基本概念
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,实现数据的本地化处理。如果将数据分发给其他机器,会产生额外的开销。
执行完之后:


