【Spark内核源码】Spark基本概念及特点

目录

Hadoop MapReduce的不足

Spark的基本概念

RDD

DAG

Partition

NarrowDependency

ShuffleDependency

Job

Stage

Task

Shuffle

Spark的基本组件

Cluster Manager

Worker

Executor

Driver

Application

Spark的特点


Hadoop MapReduce的不足

Spark也是基于MapReduce算法模型实现的分布式计算框架,拥有Hadoop MapReduce所有的优点,同时还解决了Hadoop MapReduce很多缺陷。

Hadoop MRv1中包含:

  1. MapReduce的运行环境为JobTracker和TaskTracker
  2. 编程模型是MapReduce
  3. 数据处理分为Map任务和Reduce任务

 Hadoop MRv1的不足:

  1. 扩展性差,JobTracker负责资源调度和任务调度,JabTracker压力大,容易出现性能瓶颈
  2. 可用性差,单节点的Master,Master挂了整个集群就废掉了
  3. 资源利用率低,TaskTracker采用slot(计算资源如CPU、内存)等量划分的方式分配本节点上的资源。slot分为Map slot和Reduce slot,分别提供给MapTask和ReduceTask。运行一个完整的MapReduce任务,在Map阶段时Reduce分配到的slot就会被闲置下来
  4. 不灵活,不支持多种MapReduce框架

 针对Hadoop MRv1的缺陷,Hadoop MRv2诞生了。重用了编程模型和数据处理引擎,重构了运行环境。不存在单点故障,还有基于Yarn的资源调度平台,不仅提高了资源利用率还实现了可插拔的MapReduce框架,Spark、Storm等计算框架都运行在Yarn上。

Hadoop MR无论是v1版本还是v2版本,都是基于磁盘操作的(Map阶段将中间输出和结果存储到磁盘,Reduce端再从磁盘中拉取中间结果),读写性能瓶颈明显,所以只适用于离线批处理,不支持迭代式和流式数据的处理。 

Spark的基本概念

RDD

RDD(Resillient Distributed Dataset):弹性分布式数据集。Spark中最最最基础的东西,使用Spark API将RDD封装成一系列具有血缘关系的RDD,也就是DAG。使用Spark API将RDD或者对应的DAG提交给DAGScheduler。RDD一定会有一个数据源头RDD,负责读取数据。

DAG

DAG(Directed Acycle Graph):有向无环图。Spark使用DAG反应RDD之间的依赖和血缘关系。

Partition

数据分区。一个RDD的数据可以划分为多个Partition,Spark会根据Partition的数量确定Task的数量。

NarrowDependency

NarrowDependency:窄依赖。子RDD依赖于父RDD中固定的Partition。NarrowDependecy分为OnetoOneDependency(一对一的依赖)和RangeDependency(多对一的依赖)。

ShuffleDependency

ShuffleDependency:Shuffle依赖,又叫宽依赖。子RDD对父RDD中多个Partition都可能产生依赖(多对对的依赖),子RDD对父RDD各个Partition的依赖取决于分区计算器(Partitioner)的算法。

Job

Job:用户提交的作业。当RDD及其DAG被提交给DAGScheduler调度后,DAGScheduler会将所有RDD中的transformation和action视为一个Job。一个Job由一个或者多个Task组成。

Stage

Stage:Job的执行阶段。DAGScheduler按照ShuffleDependency(宽依赖)作为Stage的划分点对RDD的DAG进行Stage划分(上游的Stage将为ShuffleMapStage)。因此,一个Job将划分为一到多个Stage。Stage分为ShuffleMapStage和ResultStage两种。

Task

Task:具体的执行任务。一个Job在每个Stage内都会按照RDD的Partion数量,创建多个Task。Task分为ShuffleMapTask和ResultTask,分别对应Stage的ShuffleMapStage和ResultStage。ShuffleMapTask和ResultTask类似Hadoop的Map任务和Reduce任务。

Shuffle

Shuffle:Shuffle是所有MapReduce计算框架的核心执行阶段,Shuffle用于打通map任务(ShuffleMapTask)的输出与reduce任务(ResultTask)的输入。map任务的中间输出结果按照指定的分区策略分配给处理某一个分区的reduce任务。

Spark的基本组件

Cluster Manager

Cluster Manager:Spark集群管理器。主要负责对整个集群资源的分配和管理。Cluster Manager在YARN部署模式下是ResourceManager;在Standalone部署模式下是Master。Cluster Manager分贝的资源属于一级分配,它将各个Worker上的内存、CPU等资源分配给A评评理查体欧尼,但并不负责对Executor的资源分配。Standalone模式下,Master会直接给Application分配内存、CPU及Executor等资源。

Worker

Worker:Spark的工作节点。在YARN部署模式下是NodeManager。Worker节点的主要负责以下工作:

  1. 将自己的内存、CPU等资源通过注册机制告知Cluster Manager
  2. 创建Executor
  3. 将资源和任务进一步分配给Executor
  4. 同步资源信息、Executor状态信息给Cluster Manager

在Standalone模式下,Master将Worker上的内存、CPU及Executor等资源分配给Application后,将命令Worker启动CoarseGrainedExecutorBackend进程(此进程会创建Executor实例)

Executor

Executor:执行计算任务的一线组件。主要负责任务的执行以及与Worker、Driver的信息同步。

Driver

Driver:Application的驱动程序,Application通过Driver与Cluster Manager、Executor进行通信。Driver可以运行在Application中也可以由Application提交给Cluster Manager并由Cluster Manager安排Worker运行。

Application

Application:用户使用Spark提供的API编写的应用程序,Application通过Spark API将进行RDD的转换和DAG的构建,并通过Driver将Appliccation注册到Cluster Manager。Cluster Manager将会根据Application的资源需求,通过一级分配将Executoer、内存、CPU等资源分配给Applicaiton。Driver通过二级分配将Executor等资源分配给每个人物,Application最后通过Driver告诉Executor运行任务。

Spark的特点

  1. 大大减少磁盘I/O。减少磁盘I/O分为两个方面:第一个方面是Map阶段的中介输出和结果可以存在内存中,Reduce阶段拉取中间结果是可以避免大量的磁盘I/O;第二个方面是Spark应用程序上传的资源文件会缓存到Driver本地服务的内存中,Executor执行任务时,从Driver内存中读取资源,也较少了磁盘I/O操作。
  2. 增加并行度。Spark把不同的计算环节抽象为Stage,多个Stage即可串联又可并联。
  3. 高容错、避免重复计算。当Stage中某个分区的Task执行失败,Spark并不会全盘重新计算,而是会过滤掉已经成功的分区Task,避免重复计算和资源的浪费。
  4. 可选的Shuffle排序。Hadoop MapReduce在Shuffle之前的排序是固定的,Spark可以根据不同应用场景选择在Map端排序还是在Reduce端排序。
  5. 细粒度的内存管理。Spark内存分为堆上存储内存、堆外存储内存、堆内执行内存和堆外执行内存。执行和存储内存既有固定边界又有“软”边界,一方内存不足可以借助另一方。
  6. check point支持。RDD之前维护了血缘关系(lineage),某个RDD失败后,又父RDD重建。linage很长的化,恢复起来也是很耗时。开启应用的check point功能,在Stage中Task都执行成功后,SparkContext会把RDD计算的结果记录到check point中,这样失败的RDD,由父RDD重建时不需要重新计算,直接拿check point中的数据就可以了。
  7. 易于使用。支持Java、Scala、Python、R等语言,提供相应高级API,运行使用Scala、Python、R的REPL中进行交互式查询。
  8. 支持交互式。基于scala的Iloop实现交互式shell。
  9. 支持SQL、Hive SQL查询。
  10. 支持流式计算。
  11. 拥有成熟的机器学习库和图计算库。
  12. 高可用。本身支持Master高可用,还支持使用外部部署模式,比如Yarn。
  13. 数据源丰富。本地系统、HDFS、Kafka、Hbase、Hive、关系型数据库等众多数据源。
  14. 文件格式丰富。本本格式、CSV格式、JSON、ORC、Parquet等众多文件格式。

猜你喜欢

转载自blog.csdn.net/lazy_moon/article/details/83009577