Spark-core解读

从三个部分来解读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。如下图:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spark-Core文档是本人经三年总结笔记汇总而来,对于自我学习Spark核心基础知识非常方便,资料例举完善,内容丰富。具体目录如下: 目录 第一章 Spark简介与计算模型 3 1 What is Spark 3 2 Spark简介 3 3 Spark历史 4 4 BDAS生态系统 4 5 Spark与Hadoop的差异 5 6 Spark的适用场景 6 7 Spark成功案例 6 第二章 Spark开发环境搭建 8 1 Spark运行模式 8 2 Spark环境搭建 8 2.1Scala的安装 8 2.2Spark的单节点配置 9 2.3Spark-Standalone集群配置 9 2.4Spark-on-Yarn模式配置 12 2.5Spark-on-Mesos模式配置 13 2.6Hive-on-Spark配置 13 第三章 Spark计算模型 15 1 RDD编程 15 1.1弹性分布式数据集RDD 15 1.2构建RDD对象 15 2RDD操作 15 2.1将函数传递给Spark 16 2.2了解闭包 16 2.3Pair RDD模型 17 2.4Spark常见转换操作 18 2.5Spark常见行动操作 20 2.6RDD持久化操作 21 2.7注意事项 23 2.7并行度调优 24 2.8分区方式 25 3Examle:PageRank 27 第四章 Spark编程进阶 29 1共享变量 29 1.1累加器 30 1.2广播变量 31 2基于分区进行操作 32 3与外部程序间的管道 33 4数值RDD的操作 34 5 Spark Shuffle机制 34 第五章 Spark调优与调试 39 1开发调优: 40 1.1调优概述 40 1.2原则一:避免创建重复的RDD 40 1.3原则二:尽可能复用同一个RDD 41 1.4原则三:对多次使用的RDD进行持久化 42 1.5原则四:尽量避免使用shuffle类算子 43 1.6原则五:使用map-side预聚合的shuffle操作 44 1.7原则六:使用高性能的算子 45 1.8原则七:广播大变量 46 1.9原则八:使用Kryo优化序列化性能 47 1.10原则九:优化数据结构 48 2资源调优 48 2.1调优概述 48 2.2 Spark作业基本运行原理 49 2.3资源参数调优 50 第六章 Spark架构和工作机制 52 1 Spark架构 52 1.1 Spark架构组件简介 52 1.2 Spark架构图 54 2 Spark工作机制 54 2.1 Spark作业基本概念 54 2.2 Spark程序与作业概念映射 55 2.3 Spark作业运行流程 55 3 Spark工作原理 55 3.1 作业调度简介 55 3.2 Application调度 56 3.3 Job调度 56 3.4 Tasks延时调度 56 第七章 Spark运行原理 57 1 Spark运行基本流程 57 2 Spark在不同集群的运行架构 58 2.1 Spark on Standalone运行过程 59 2.2 Spark on YARN运行过程 60

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值