Spark RDD的Shuffle

Shuffle的概念来自Hadoop的MapReduce计算过程。当对一个RDD的某个分区进行操作而无法精确知道依赖前一个RDD的哪个分区时,依赖关系变成了依赖前一个RDD的所有分区。比如,几乎所有<key, value>类型的RDD操作,都涉及按key对RDD成员进行重组,将具有相同key但分布在不同节点上的成员聚合到一个节点上,以便对它们的value进行操作。这个重组的过程就是Shuffle操作。因为Shuffle操作会涉及数据的传输,所以成本特别高,而且过程复杂。

下面以reduceByKey为例来介绍。在进行reduce操作之前,单词“Spark”可能分布在不同的机器节点上,此时需要先把它们汇聚到一个节点上,这个汇聚的过程就是Shuffle,下图所示。

 Shuffle操作

Shuffle是一个非常消耗资源的操作,除了会涉及大量网络IO操作并使用大量内存外,还会在磁盘上生成大量临时文件,以避免R错误恢复时重新计算。因为Shuffle操作的结果其实是一次调度的Stage的结果,而一次Stage包含许多Task,缓存下来还是很划算的。Shuffle使用的本地磁盘目录由spark.local.dir属性项指定。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Albert陈凯

2.0Spark编程模型

循序渐进学Saprk 与Hadoop相比,Spark最初为提升性能而诞生。Spark是Hadoop MapReduce的演化和改进,并兼容了一些数据库的基本思想...

3678
来自专栏Albert陈凯

Spark概要掌握情况自我核查

1、Spark目前只持哪哪种语言的API? Java, Scala, Python, R. Ref: http://spark.apache.org/ 2、R...

2453
来自专栏Albert陈凯

Spark对比Hadoop MapReduce 的优势

与Hadoop MapReduce相比,Spark的优势如下: ❑ 中间结果:基于MapReduce的计算引擎通常将中间结果输出到磁盘上,以达到存储和容错的目...

2964
来自专栏王小雷

Spark学习之基础相关组件(1)

Spark学习之基础相关组件(1) 1. Spark是一个用来实现快速而通用的集群计算的平台。 2. Spark的一个主要特点是能够在内存中进行计算,因而更快。...

1928
来自专栏大数据学习笔记

Spark2.x学习笔记:11、RDD依赖关系与stage划分

11、 RDD依赖关系与stage划分 Spark中RDD的高效与DAG图有着莫大的关系,在DAG调度中需要对计算过程划分stage,而划分依据就是RDD之间的...

2375
来自专栏about云

让你真正明白spark streaming

spark streaming介绍 Spark streaming是Spark核心API的一个扩展,它对实时流式数据的处理具有可扩展性、高吞吐量、可容错性等...

3037
来自专栏肖力涛的专栏

Spark踩坑记:Spark Streaming+kafka应用及调优

本文首先对spark streaming嵌入kafka的方式进行归纳总结,之后简单阐述Spark streaming+kafka 在舆情项目中的应用,最后将自己...

4.2K2
来自专栏涂小刚的专栏

【Spark教程】核心概念RDD

RDD全称叫做弹性分布式数据集(Resilient Distributed Datasets),它是一种分布式的内存抽象,表示一个只读的记录分区的集合,它只能通...

1.8K0
来自专栏https://www.cnblogs.com/L

【Spark篇】---Spark解决数据倾斜问题

数据倾斜问题是大数据中的头号问题,所以解决数据清洗尤为重要,本文只针对几个常见的应用场景做些分析 。

783
来自专栏https://www.cnblogs.com/L

【Spark篇】---Spark初始

Spark是基于内存的计算框架,性能要优于Mapreduce,可以实现hadoop生态圈中的多个组件,是一个非常优秀的大数据框架,是Apache的顶级项目。On...

1253

扫码关注云+社区