[大数据技术原理与应用笔记] 第10讲. Spark

10.1 Spark与Hadoop的对比

Spark 相比于 Hadoop MapReduce的优缺点
  • Spark的计算模式也属于MapReduce,但不限于Map和Reduce操做,提供了多种数据集操做类型,编程模式比Hadoop MapReduce更灵活
  • Spark 基于DGA(有向无环图)的任务调度执行机制,要优于Hadoop MapReduce 的迭代执行机制
  • 提供了内存计算,可将中间结果放到内存,对于迭代效率更高,而Hadoop MapReduce 计算的中间结果须要缓存到硬盘,IO开销大

10.3 Spark 运行架构

基本概念
  • RDD:Resillient Distributed Dataset(弹性分布式数据集)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型.
  • DAG:有向无环图,反映RDD之间的依赖关系
  • Executor:一个做业会被分为多个task。executor是运行在工做结点的一个进程,负责运行task。
  • Application:用户编写的Spark 应用程序.
  • Task:运行在executor上的工做单元
  • Job:一个Job包含多个RDD,及做用在相应RDD上的各类操做.一般一个aoolication 包含多个job
  • stage: 是job的基本调度单位,一个job包含多组task,每组task被称为stage,或者被称为TaskSet,表明了一组关联的,相互直接没有shuffle依赖关系的任务组成的任务集。
运行架构

微信截图_20200218104155.png
Executor 运行在Worker Node 上java

与 MapReduce相比的优势:编程

  1. 在一个Excutor里,同时启动多个线程执行相关Task,而MapReduce以进程执行任务,因此Spark的启动开销小
  2. Excutor里有一个BlockManager的存储模块,将内存和磁盘共同做为存储设备,优先使用内存,当内存不足时再溢写到磁盘,有效减小IO开销
Spark 各类概念之间的相互关系

微信截图_20200218104913.png

Drive Program 至关于管家缓存

架构执行Application的大概过程

微信截图_20200218105218.png

Spark 运行基本流程

微信截图_20200218111437.png

  1. 为应用构建起基本的运行环境,即由Driver建立一个SparkContext进行资源的申请,任务的分配和监控.
  2. 资源管理器为Executor分配资源,启动Executor,Executor不断地向资源管理器汇报资源的使用状况.
  3. SparkContext 根据RDD依赖关系生成DAG图,并将DAG图提交给DAG Scheduler分解为stage,把一个个TaskSet 交给底层做业调度器Task Scheluder。Executor向Task Scheluder 申请Task,Task Scheluder 将Task分配给Executor 并提供相应的应用程序代码。
  4. Executor执行结束后把结果反馈给Task Scheluder,而后Task Scheluder 反馈给DAG Scheduler,运行完毕后写入数据并释放资源.
Spark 运行架构特色

微信截图_20200218113417.png

RDD

微信截图_20200218114657.png
RDD 使得Spark运行效率高于MapReduce的缘由/RDD的特性:微信

  • 高效的容错性。一般的容错机制经过日志记录,恢复日志中记录的操做来恢复数据,而这不适合数据密集性将会带来巨大的开销。RDD的错误恢复只须要经过该RDD在DAG中的上一个RDD再作一次转换便可。
  • 中间结果持久化到内存,数据在内存中多个RDD操做之间传递,避免了没必要要的磁盘开销
  • 存放的是java对象,避免了序列化和反序列化(存到磁盘须要序列化)
RDD 依赖关系
  • 窄依赖:一个父RDD的分区对应一个子RDD的分区;或多个RDD的分区对应一个子RDD的分区
  • 宽依赖: 一个父RDD的一个分区对应一个子RDD的多个分区
Stage 划分
  • DAG中进行反向解析,遇到宽依赖就断开
  • 遇到窄依赖就把当前的RDD加入到Stage中
  • 将窄依赖尽可能划分到同一个stage中,能够实现流水线计算,从而使得数据能够在内存中之间交换,避免了IO开销

例子:
微信截图_20200218121123.png架构

Stage 类型:分布式

ShuffleMapStage
  • 不是最终的stage,在他以后还有其余stage,因此它的输出必定会通过shuffle过程,并做为后续stage的输入
  • 以Shuffle做为输出边界,输入边界能够是从外部获取数据也能够是另外一个ShuffleMapStage的输出
  • 一个Job里可能有改类型的Stage,也可能没有(一次转换计算就结束了不须要其余stage,这种为ResultStage)
ResultStage
  • 最终的Stage,没有输出,而是直接产生结果或存储
  • 这种stage直接输出结果,输入边界能够是直接输入也能够是ShuffleMapStage的输出
  • 一个Job里必定包含至少一个ResultStage
RDD运行过程

微信截图_20200218122531.png

相关文章
相关标签/搜索