基本概念
RDD:弹性分布式数据集,数据可大可小,动态的变化分区数量,分布式地保存在多台机器的内存当中
DAG:Directed Acyclic Graph
,有向无环图,反映和RDD之间的依赖关系
Executor:运行在工作节点上进程,负责运行Task
Application:用户编写的运行程序
Task:运行在Executor
上的工作单元
Job:一个Job包含多个RDD
,以及作用于相应RDD
上的各种操作。
Stage:Job
的基本调度单位,一个job分成多个task,每组task被称为stage。
架构特点
常见的架构有两种:P2P
和一主多从架构。Spark
采用的是:一主多从
- 主节点:
Driver Program
- 多个从节点:
Worker Node
执行过程
应用---->主节点(任务控制节点)—>作业—>阶段(每个阶段是多个任务的集合)
运行基本流程
- 为应用构建基本的运行环境,找到主节点
Driver
(指挥所) - 主节点创建一个
Spark Context
,它被当做整个运行程序的指挥官 - 指挥官找资源管理器(YARN、Mesos)申请资源,再进行资源的分配,从而启动
Executor
进程(启动Worker Node) - 指挥官
Spark Context
根据提交的代码,通过RDD
的依赖关系,生成一个DAG
有向无环图。应用程序就是针对RDD
一次又一次的操作。 - 将DAG图交给
DAG Scheduler
,将DAG
图分解成多个阶段Stage
。每个阶段Stage中包含多个任务task
Stage
中任务的分发是通过Task Scheduler
进行的,分发给不同的节点进行处理,分发原则:计算向数据靠拢。如果数据在机器A
上,就将数据分发给机器A
,实现数据的本地化处理。如果将数据分发给其他机器,会产生额外的开销。
执行完之后: