zoukankan      html  css  js  c++  java
  • Spark的shuffle和MapReduce的shuffle对比

    MapperReduce的shuffle

    shuffle阶段划分

    Map阶段和Reduce阶段

    任务

    MapTask和ReduceTask

    shuffle过程

    Map阶段shuffle:分区->排序->合并

    ①数据从环形缓冲区溢写到磁盘前,需要先进行分区,然后区内排序

    ②环形缓存区数据到达阈值(80%),会以小文件的形式溢写到磁盘,此过程可以开启combiner

    ③将溢写的小文件按照相同分区进行merge

    Reduce阶段shuffle:拷贝数据->排序->合并

    ①一个ReduceTask负责一个分区数据,需从多个MapTask的同一个分区拷贝数据到机器。

    ②将拷贝过来的数据优先存储在内存,次之磁盘,然后排序,合并做到数据分区内有序

    shffle的意义:只有存在reduce才有shuffle,shuffle的意义就是给reduce提供服务。

    Spark的shuffle

    介绍

    ①spark的某些算子会触发shuffle,出现shuffle的目的是在不同分区间重新分配数据。

    ②shuffle过程数据是跨机器传输的,消耗大量的网络io和序列化,消耗性能。

    ③shuffle后不能保证新的分区的数据是有序的。区别于MR ( MR的shuffle后区内的数据是有序的 )

    但是可以调用排序的算子,使得数据区内有序。

    ④产生shuffle的算子都是分两步执行,mapTask组织数据(shuffle write), reduceTask(shuffle read)

    ⑤spark的mapTask优先将数据写入内存,内存不足,将数据区内有序,溢写到磁盘

    会产生shuffle的算子

    ①repartition 和 coalesce 重新计算分区的算子。

    ②??ByKey:除了countByKey,都会产线shuffle

    ③cogroup 和 join

    性能的影响

    shuffle就是将数据在不同分区间进行聚合分配,集群的多节点的数据交换,会涉及到磁盘I/O,序列化,网络I/O,很消耗性能。

    总结

    spark中的shuffle耗时,消耗性能,应该尽量避免!

    spark中的shuffle和MapReduce的shuffle的功能一致,跨机器传输数据,细节略有不同。

  • 相关阅读:
    洛谷 3393 逃离僵尸岛
    洛谷 3275 [SCOI2011]糖果
    SP1437 Longest path in a tree(树的直径)
    洛谷2483 k短路([SDOI2010]魔法猪学院)
    洛谷3243 [HNOI2015]菜肴制作
    洛谷 4568 [JLOI2011] 飞行路线
    [USACO08DEC]在农场万圣节Trick or Treat on the Farm
    手机端table表格bug
    手机端左右滑动效果
    去掉手机端延迟300ms
  • 原文地址:https://www.cnblogs.com/wh984763176/p/13411617.html
Copyright © 2011-2022 走看看