实时计算引擎Spark笔试题:Spark Shuffle 机制

说明:Spark是目前大数据中非常流行的运算框架,Spark的Shuffle机制是完成运算最重要的一环,面试时经常会被问到.

在Spark中,Shuffle分为map阶段和reduce阶段,也可称之为shuffle write和shuffle read阶段,Spark在1.1以前的版本一直是采用Hash Shuffle的实现的方式,到1.1版本时参考Hadoop MapReduce的实现开始引入Sort Shuffle,在1.5版本时开始Tungsten钨丝计划,引入UnSafe Shuffle优化内存及CPU的使用,在1.6中将Tungsten统一到Sort Shuffle中,实现自我感知选择最佳Shuffle方式,到最近的2.0版本, Hash Shuffle已被删除,所有Shuffle方式全部统一到Sort Shuffle一个实现中。这里我们只说明Sort Shuffle

Write 阶段会把 Mapper 中每个 MapTask 所有的输出数据排好序,然后写到一个 Data 文件中, 同时还会写一份 index 文件用于记录 Data 文件内部分区数据的元数据(即记录哪一段数据是输出给哪个 ReduceTask 的),所以 Mapper 中的每一个 MapTask 会产生两个文件 。

Read 阶段首先 Reducer 会找 Driver 去获取父 Stage 中每个 MapTask 输出的位置信息,跟据位置信息获取并解析 Index 文件,会根据 Index 文件记录的信息来获取所需要读取的 Data 文件中属于自己那一部分的数据

*Mapper 端的排序分为两个部分:内部排序和分区排序,每个分区内部的数据是有序的,分区之间也是有序的,

如图Data 文件中有三个分区,分别着对应下游的  ReduceTask,分区排序的目的是让  ReduceTask 

获取数据更加高效

*Sorted-Based Shuffle 过程 Mapper 端生成的文件个数与什么有关? 一个 core 即一个 Task 

即一个分区即一个并发,一个 Task 会生成两个文件,Data 文件和 Index 文件。与 Reduce 端无关,

Reduce 只负责读属于自己的那一部分数据。

*Sorted-Based Shuffle解决了Hash Shuffle在Mapper端做ShuffleWriter时所产生的大量文件问题,

降低了资源消耗

*当前的Shuffle Write有三种 BypassMergeSortShuffleWriter, SortShuffleWriter 和

UnsafeShuffleWriter.

触发Shuffle的一些操作

分类操作
repartition相关repartition,coalesce
ByKey操作groupByKey,ReduceByKey,conbineByKey,aggregateByKey
Join操作cogroup,join
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值