Spark-core-架构及工作机制综述

注:本文参考文献有书籍《Spark大数据处理:技术、应用与性能优化》、RDD的Paper《Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing》。从三个部分来解读Spark-core,首先是Spark的架构,阐述了Spark基于弹性分布式数据集RDD这个计算模型的工作机制(计算流程):Application->Job->Stage->Task 的分解、分发和并行计算;接下去从计算模型工作机制两个方面,分别解读RDD的设计思想及其算子,以及划分RDD有向无环图为Stage和Task、并行计算的工作机制。进一步的原理分析和源码研读将在该系列的后续文章中撰写。

Spark的架构

Spark采用了分布式计算中的Master-Slave模型。Master作为整个集群的控制器,负责整个集群的正常运行;Worker是计算节点,接受主节点命令以及进行状态汇报;Executor负责任务(Tast)的调度和执行;Client作为用户的客户端负责提交应用;Driver负责控制一个应用的执行。

Spark架构图:出自《Spark大数据处理》

Spark集群启动时,需要从主节点和从节点分别启动Master进程和Worker进程,对整个集群进行控制。在一个Spark应用的执行过程中,Driver是应用的逻辑执行起点,运行Application的main函数并创建SparkContext,DAGScheduler把对Job中的RDD有向无环图根据依赖关系划分为多个Stage,每一个Stage是一个TaskSet, TaskScheduler把Task分发给Worker中的Executor;Worker启动Executor,Executor启动线程池用于执行Task。

Spark执行有向无环图:出自《Spark大数据处理》

Spark的计算模型

RDD:弹性分布式数据集,是一种内存抽象,可以理解为一个大数组,数组的元素是RDD的分区Partition,分布在集群上;在物理数据存储上,RDD的每一个Partition对应的就是一个数据块Block,Block可以存储在内存中,当内存不够时可以存储在磁盘上。

RDD逻辑物理结构

Hadoop将Mapreduce计算的结果写入磁盘,在机器学习、图计算、PageRank等迭代计算下,重用中间结果导致的反复I/O耗时过长,成为了计算性能的瓶颈。为了提高迭代计算的性能和分布式并行计算下共享数据的容错性,伯克利的设计者依据两个特性而设计了RDD:
1、数据集分区存储在节点的内存中,减少迭代过程(如机器学习算法)反复的I/O操作从而提高性能。
2、数据集不可变,并记录其转换过程,从而实现无共享数据读写同步问题、以及出错的可重算性。

Operations:算子

算子是RDD中定义的函数,可以对RDD中的数据进行转换和操作。如下图,Spark从外部空间(HDFS)读取数据形成RDD_0,Tranformation算子对数据进行操作(如fliter)并转化为新的RDD_1、RDD_2,通过Action算子(如collect/count)触发Spark提交作业。
  如上的分析过程可以看出,Tranformation算子并不会触发Spark提交作业,直至Action算子才提交作业,这是一个延迟计算的设计技巧,可以避免内存过快被中间计算占满,从而提高内存的利用率。

Spark算子:出自《Spark大数据处理》

下图是算子的列表,分三大类:Value数据类型的Tranformation算子;Key-Value数据类型的Tranformation算子;Action算子。

RDD的算子:出自伯克利的RDD论文
Lineage Graph:血统关系图

下图的第一阶段生成RDD的有向无环图,即是血统关系图,记录了RDD的更新过程,当这个RDD的部分分区数据丢失时,它可以通过Lineage获取足够的信息来重新运算和恢复丢失的数据分区。DAGScheduler依据RDD的依赖关系将有向无环图划分为多个Stage,一个Stage对应着一系列的Task,由TashScheduler分发给Worker计算。

RDD运行变化图

Spark的工作机制

本模块从六个方面,介绍Spark的内部运行机制。

应用执行机制

Spark应用(Application)是用户提交的应用程序,执行模式有Local、Standalone、YARN、Mesos。根据Application的Driver Program(或者YARN的AppMaster)是否在集群中运行,Spark应用的运行方式又可以分为Cluster模式和Client模式。
  Standalone模式
  Driver运行在客户端

Driver运行在客户端:出自网络

Driver运行在Worker

Driver运行在Worker:出自网络
  YARN模式

Spark on YARN架构:出自《Spark大数据处理》
调度与任务分配

从Spark整体上看,调度可以分为4个级别,Application调度 -> Job调度 -> Stage调度 -> Task调度。


Spark应用转换流程:出自《Spark大数据处理》
I/O机制

序列化
  块管理

通信机制

Spark在模块间通信使用的是AKKA框架。AKKA基于Scala开发,用于编写Actor应用。Actors是一些包含状态和行为的对象。它们通过显式传递消息来进行通信,这些消息会被发送到它们的收信箱中(消息队列)。

容错机制

Lineage机制:记录粗粒度的更新
  Checkpoint机制:将RDD写入Disk做检查点。检查点的本质是作为Lineage做容错的辅助,lineage过长会造成容错成本过高。在计算的中间阶段做检查点容错,如果之后的节点出现问题而丢失分区,从做检查点的RDD开始重做Lineage,就可以减少开销。

Shuffle机制

当单进程空间无法容纳所有计算数据进行计算时,通过Shuffle将各个节点上相同的key拉取到某个节点上的一个task来进行处理,比如按照key进行聚合或join等操作。此时如果某个key对应的数据量特别大的话,就会发生数据倾斜。数据倾斜是Spark性能优化的一个重大课题。
  可能会触发shuffle操作的算子 :distinct、groupByKey、reduceByKey、aggregateByKey、join、cogroup、repartition等。
  Shuffle分为两个阶段:Shuffle Write和Shuffle Fetch。如下图:

Shuffle机制:出自网络
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容