设为首页 加入收藏

TOP

【Spark内核源码】Spark基本概念及特点
2018-12-06 17:26:33 】 浏览:11
Tags: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等众多文件格式。

编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇spark-job-server 下一篇spark IDE:   System memory..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }