- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
一,MR的shuffle回顾
1,Map 阶段:
- 在 MapReduce 中,Map 阶段的任务是处理输入数据,并将数据转换为键值对的形式。每个 Map 任务会处理一部分输入数据,并生成一系列中间键值对。
- 例如,对于文本数据的处理,Map 任务可能会将每行文本拆分为单词,并以单词为键,出现次数为值生成键值对。
2,Shuffle 阶段:
- Shuffle 阶段是 MapReduce 中连接 Map 阶段和 Reduce 阶段的重要环节。在这个阶段,中间键值对会根据键进行分区、排序和分组,然后被发送到相应的 Reduce 任务进行处理。
- 分区:Map 任务生成的中间键值对会根据键的哈希值被分配到不同的分区中。每个分区对应一个 Reduce 任务。
- 排序:在每个分区内,中间键值对会按照键进行排序。这样可以确保相同键的键值对被分配到同一个 Reduce 任务中,并且在 Reduce 任务中可以按照键的顺序进行处理。
- 分组:排序后的中间键值对会被分组,相同键的键值对会被放在一起。这样可以方便 Reduce 任务对相同键的键值对进行聚合操作。
- 数据传输:经过分区、排序和分组后的中间键值对会被发送到相应的 Reduce 任务所在的节点上。这个过程通常涉及网络传输,因此可能会成为性能瓶颈。
3,Reduce 阶段:
- Reduce 阶段的任务是处理 Shuffle 阶段发送过来的中间键值对,并生成最终的输出结果。
- Reduce 任务会对相同键的键值对进行聚合操作,例如求和、求平均值等。然后,将结果写入到输出文件中。
二,spark的shuffle介绍
spark中也有shuffle
当执行宽依赖的算子,就会进行shuffle洗牌阶段
也就是把RDD的数据传递给下一个RDD,进行数据交换
无论是MR还是spark,shuffle的本质都是传递交换数据