1.架构
Master 做为整个集群的控制器复负责整个集群的正常运行
Worker 相当于计算节点,接收主节点命令与进行状态汇报。运行一个或多个Executor进程,相当于计算节点
Client 用户提交作业的客户端
Driver 负责控制一个应用的执行,运行Application的main函数和初始化SparkContext,Driver将Task和Task所依赖的file和jar(序列化后)传递给对应的Worker机器运行
Cluster Manager 在集群上获取资源的外部服务 (例如:Standalone、Mesos、Yarn)
Executor 运行在Worker上的Task执行器,Executor启动线程池运行task,并且负责将数据写入内存或是磁盘上,每个Application会申请各自的Executor执行任务
SparkContext 整个应用的上下文,控制程序的生命周期
RDD Spark的基本运算单元,一组RDD形成执行的有向无环图RDD Graph
DAGScheduler 根据Job构建基于Stage的DAG的工作流,并提交Stage给TaskScheduler
TaskScheduler 将task发给Executor执行
SparkEnv 线程级别的上下文,存储运行时的重要组件的引用
spark集群部署后在主节点和从节点分别启动Master进程和Worker进程,对整个集群进行控制。Excecutor /Task 每个程序自有,不同程序互相隔离,task多线程并行。集群对Spark透明,Spark只要能获取相关节点和进程。Driver 与Executor保持通信,协作处理。
2.运行逻辑
Client提交应用,Master找到一个Worker启动Driver,Driver向Master或是资源管理器申请资源,之后把任务转换成RDD有向无环图,再由DAGScheduler将RDD的有向无环图转换成stage的有向无环图提交给TaskScheduler,由TaskScheduler将task提交给Executor执行任务。任务的执行过程中其它组件在协同工作,确保程序正确运行