美文网首页
1.1 Spark Architecture 总体简介

1.1 Spark Architecture 总体简介

作者: GongMeng | 来源:发表于2018-11-12 13:02 被阅读0次

系列中绝大部分配图来自 GITHUB中独立作者@jaceklaskowski, 基于知识共享协议已取得使用许可!

系列中源码来自Apache Spark项目, 大部分来自1.6.x版本, 少部分高级特性讲解来自2.4.x

系列中全部中文部分讲解 注释 结构均为原创

1. 集群架构

图1 集群架构
  • 在资源调度上, 采用Master-worker的模型管理整个集群的资源.这里是Stand Alone模式
  • 在程序执行上, 采用Driver-Executor的模型的分布式执行任务.

2. 执行逻辑

当用户提交一个任务到Spark集群时.
首先会启动一个Driver节点作为整个任务的管理者, Driver中的SparkContext会从Master那里申请资源.
Master会根据调度逻辑, 划分一些Worker给Driver来使用, Driver会告知Worker需要具体的任务细节, Worker启动Executor来执行这些细节.

图2 执行逻辑

3. 抽象概述

我们可以把Master和Worker想像成一家外包公司的老总和他管理的搬砖工.

  • 在接到任务的时候, 公司会委任一个项目经理(Driver), 他会和客户沟通, 把客户的要求, 也就是各种RDD的操作, 绘制成一个任务表, 这里就是DAGScheduler.
  • 有了这个任务表后, 项目经理心理就有数了, 他跑去找老总(Master)要人要资源, 和大部分外包公司一样, 搬砖的码农(worker)可以同时给多个项目工作.
  • 于是老总分配了几个worker给这个项目经理, 项目经理要求所有的Worker拿出资源的一部分, 比如每天3小时为他的项目工作, 这就是Executor, 所有搬砖工抽出来一定的时间资源响应这个项目经理的需求(Task)
  • 项目经理把自己的蓝图DAGScheduler后的记过, 通过TaskScheduler分配给这些搬砖工搞, 理解成项目经理把任务更新到Jira上分配到人.
  • 搬砖工把每天工作进度(Metrics), 负责的项目组件(Task), 使用的资源(ExecutorSource, BlockSource), 对上游工作的的依赖(ShuffleSource)汇总到项目经理(Driver)这里, 由他统一调度.
  • 最后执行结果在项目经理这里交付客户(Action), 执行结束完, 老总(Master)从项目经理这里回收全部资源(ContextCleaner, BroadCastCleaner), 等待下一个项目进场

4. 系列规划

  • Spark的基本架构
  • SparkContext部分
  • Spark消息队列和分发的实现
  • DAGScheduler
  • TaskScheduler
  • MemoryManager
  • BlockManager (未完成)
  • ShuffleManager
  • Metrics (未完成)
  • Utils 中的collection (未完成)
  • JavaNIO 和 RPC 的实现 (未完成)
  • 图计算和图存储 (在另外一个标签里)

相关文章

网友评论

      本文标题:1.1 Spark Architecture 总体简介

      本文链接:https://www.haomeiwen.com/subject/vbnqfqtx.html