Spark分布式计算框架Shuffle机制深度.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

本文由简悦SimpRead转码,原文地址

今天我将为你讲解计算框架的分布式实现:剖析SparkShuffle原理。我们面几个,或多或少

地提到了Shuffle,Shuffle一般被翻译为数据混洗,是类MapReduce分布式计算框架独有的机制,

也是这类分布式计算框架最重要的执行机制。本主要从两个层面讲解Shuffle,主要分为:

逻辑层面;

层面。

逻辑层面主要从RDD的血统机制出发,从DAG的角度来讲解Shuffle,另外也会讲解Spark容错

机制,而层面是从执行角度来剖析Shuffle是如何发生的。

血统与容错

在DAG中,最初的RDD被称为基础RDD,后续生成的RDD都是由算子以及依赖关系生成的,也就

是说,无论哪个RDD出现问题,都可以由这种依赖关系重新计算而成。这种依赖关系被称为RDD血

统(lineage)。血统的表现形式主要分为宽依赖(widedependency)与窄依赖

(narrowdependency),如下图所示:

窄依赖的准确定义是:子RDD中的分区与父RDD中的分区只存在一对一的映射关系,而宽依赖则是

子RDD中的分区与父RDD中的分区存在一对多的映射关系,那么从这个角度来说,map、filter、

union等就是窄依赖,而groupByKey、coGroup就是典型的宽依赖,如下图所示:

本文由简悦SimpRead转码,原文地址

今天我将为你讲解计算框架的分布式实现:剖析SparkShuffle原理。我们面几个,或多或少

地提到了Shuffle,Shuffle一般被翻译为数据混洗,是类MapReduce分布式计算框架独有的机制,

也是这类分布式计算框架最重要的执行机制。本主要从两个层面讲解Shuffle,主要分为:

逻辑层面;

层面。

逻辑层面主要从RDD的血统机制出发,从DAG的角度来讲解Shuffle,另外也会讲解Spark容错机

制,而层面是从执行角度来剖析Shuffle是如何发生的。

RDD血统与Spark容错

在DAG中,最初的RDD被称为基础RDD,后续生成的RDD都是由算子以及依赖关系生成的,也就是

说,无论哪个RDD出现问题,都可以由这种依赖关系重新计算而成。这种依赖关系被称为RDD血统

lineage)。血统的表现形式主要分为宽依赖(widedependency)与窄依赖(narrow

dependency),如下图所示:

窄依赖的准确定义是:子RDD中的分区与父RDD中的分区只存在一对一的映射关系,而宽依赖则是子

RDD中的分区与父RDD中的分区存在一对多的映射关系,那么从这个角度来说,map、filter、

union等就是窄依赖,而groupByKey、coGroup就是典型的宽依赖,如下图所示:

宽依赖还有个名字,叫依赖,也就是说宽依赖必然会发生操作,面也提到过

也是划分Stage的依据。而窄依赖由于不需要发生Shuffle,所有计算都是在分区所在节点完

成,它类似于MapReduce中的ChainMapper。所以说,在你自己的DAG中,如果你选取的算子形

成了宽依赖,那么就一定会触发。

当RDD中的某个分区出现故障时,那么只需要按照这种依赖关系重新计算即可。窄依赖最简单,只

涉及某个节点内的计算;而宽依赖,则会按照依赖关系由父分区计算而得到,如下图所示:

如果P1_0分区发生故障,那么按照依赖关系,则需要P0_0与P0_1的分区重算。如果P0_0与P0_1没

有持久化,就会不断回溯,直到找到存在的父分区为止。当计算逻辑复杂时,就会引起依赖链过长,这

样重算的代价会极其高昂。所以用户可以在计算过程中,适时调用RDD的checkpoint方法,保存当前

算好的中间结果,这样依赖链就会大大缩短。RDD的血统机制就是RDD的容错机制。

Spark的容错主要分为平台的容错和Spark应用的容错,Spark应用是基于平台运

行,所以平台的容错也是Spark容错的一部分,如YARN的ResourceM

文档评论(0)

183****7931 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档