spark - frame 构架

一、构架

  • Spark 采用 Master-Slave 模型

    1. Master : 对应集群中含有 (Master 进程) 的节点
    2. Slave : 对应集群中含有 (Worker 进程) 的节点
  • Spark - 构架 Base

1. 执行角色 Driver 和 Worker(多个)

  1. Driver : 程序是应用逻辑的执行起点,负责主页的调度(即 Task 任务的分发)
  2. 执行阶段 : Driver 会将 Task Task 所依赖的 file jar 序列化传递给对应的 Worker 机器, Executor 会对相应的数据分区处理
  3. Worker : 多个 Worker 来管理计算节点的创建 Executor 并行处理任务

2. Spark 构架基础组件

  1. - ClusterManager (Master 管理节点)
  2. (1) 控制整个集群 监控 Worker 进程
  3. (2) 不同模式下
  4. Standalone 模式中即为 Master 进程 (主节点)
  5. Yarn 模式中为资源管理器 (Resource Manager)
  6. - Worker (Slave 工作节点)
  7. (1) 从节点,负责控制计算节点
  8. 启动 Executor Driver
  9. (2) 不同模式下
  10. Standalone 模式中即为 Worker 进程
  11. Yarn NodeManager
  12. - Driver 执行角色
  13. (1) 负责运行 Application main() 函数,并且创建 SparkContext 上下文
  14. (2) 每个 Application 拥有独立的一组 Executors
  15. - Executorg'zekjʊtə;] 执行器
  16. (1) 在 worker|NodeManager node 上执行任务的组件
  17. 启动线程池运行任务
  18. - SparkContext 上下文
  19. 整个用上下文,控制整个应用的生命周期
  20. - RDD 基本计算单元
  21. Spark 基本计算单元,一组 RDD 可形成执行的有向无环图 RDD Graph
  22. - DAG Shedueler 构建 Stage 过程的 DAG
  23. 根据作业(Job) 构建基于 Stage 过程的 DAG ,并且 stage 给 TaskScheduler
  24. - TaskScheduler
  25. 将任务(Task) 分发给 Executor 执行
  26. - SparnEnv 线程级别上线文,存储重要组件的引用
  27. - MapOutPutTasker 负责 Shuffle 元信息的存储
  28. - BroadcastManager 负责广播变量的控制与元信息的存储
  29. - BlockManager 负责存储管理、创建和查找块
  30. - MetricsSystem 监控运行时性能指标信息
  31. - SparkConf 负责存储配置

3. 运行过程

  1. (1) Client 提交应用给 Master
  2. (2) Master 节点找到一个 Worker 节点启动 Driver
  3. (3) Driver Master 节点申请资源,之后转化为 RDD Graph
  4. (4) DAG Shedueler RDD Graph 转换为 Stage 的有向无环图,提交给 TaskScheduler
  5. (5) TaskScheduler 提交任务 Executor 执行

二、 Spark On Yarn

1. 运行过程

  1. 基于 Yarn Spark 作业首先在客户端生成作业信息
  2. (1) SparkClient 生成作业信息, 提交给 ResourceManager
  3. (2) ResourceManager 在某一 NodeManager 汇报时,把 AppMaster 分配给 NodeManager
  4. (3) NodeManager 启动 SparkAppMaster
  5. SparkAppMaster 启动后初始化作业,向 ResourceManager 申请资源
  6. (4) SparkAppMaster 申请到相应资源后
  7. SparkAppMaster 通过 PRC NodeManager 启动相应的 SparkExecutor
  8. (5) SparkExecutor SparkAppMaster 汇报并完成相应的任务
  9. PS : SparkClient 可以通过 AppMaster 获取作业运行状态