基本概念
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)申请资源,再进行资源的分配,从而启动
进程(启动Worker Node)Executor
- 指挥官
根据提交的代码,通过Spark Context
的依赖关系,生成一个RDD
有向无环图。应用程序就是针对DAG
一次又一次的操作。RDD
- 将DAG图交给
,将DAG Scheduler
图分解成多个阶段DAG
。每个阶段Stage中包含多个任务Stage
task
-
中任务的分发是通过Stage
进行的,分发给不同的节点进行处理,分发原则:计算向数据靠拢。如果数据在机器Task Scheduler
上,就将数据分发给机器A
,实现数据的本地化处理。如果将数据分发给其他机器,会产生额外的开销。A
执行完之后: