• Spark与Hadoop Shuffle对比


    1)

    • spark中只有特定的算子会触发shuffle,shuffle会在不同的分区间重新分配数据!

    • 如果出现了shuffle,会造成需要跨机器和executor传输数据,这样会导致 低效和额外的资源消耗!

    2)
    和Hadoop的shuffle不同的时,数据分到哪些区是确定的,但是在区内的顺序不一定有序!

    Hadoop 的shuffle :
    MapTask : map------- sort -------- merge
    ReduceTask: copy ---- sort ----- reduce

    shuffle阶段 : sort -------- merge ----- copy ---- sort

    Spark的shuffle:
    第一种表现: MapTask端也不排序,ReduceTask一定不排序!
    第二种表现: MapTask端可以排序,ReduceTask一定不排序!

    如果希望shuffle后的数据有序,可以以下操作:
    a) 调用mapPartitions,对每个分区的数据,进行手动排序!
    b)repartitionAndSortWithinPartitions
    c)sortBy

    3)
    什么操作会导致shuffle
    a)重新分区的算子 : reparition, collase
    b) xxxBykey类型的算子,除了 count(统计)ByKey
    c)join类型的算子,例如cogroup and join.

    4)
    在Spark中,shuffle会带来性能消耗,主要涉及 磁盘IO,网络IO,对象的序列化和反序列化!

    总结:
    ①Spark的shuffle和Hadoop的shuffle目的都是为了 在不同的task交换数据!
    ② Spark的shuffle借鉴了hadoop的shuffle,但是在细节上略有不同
    hadoop的shuffle: 在到达ReduceTask端时,会进行排序!
    在Spark中,数据在ReduceTask端一定不排序,在MapTask端,可以根据设置进行排序或不排!
    ③shuffle会消耗性能,因此能避免就避免,避免不了,采取一些优化的策略!

  • 相关阅读:
    document cookie用法
    禁用表单元素 && 禁止选中
    tool
    居中对齐
    插件
    浮动应用
    兼容低版本 ie 的思路
    Linux无权限上传文件解决办法
    linux系统常用运维命令
    linux系统快捷键
  • 原文地址:https://www.cnblogs.com/itboys/p/14168903.html
Copyright © 2020-2023  润新知