0
点赞
收藏
分享

微信扫一扫

HashShuffleManager

1.普通机制

HashShuffleManager_java

  • 执行流程
    1.每一个 map task 将不同结果写到不同的 buffer 中,每个 buffer 的大小为 32K。buffer 起到数据缓存的作用。
    2.每个 buffer 文件最后对应一个磁盘小文件。
    3.reduce task 来拉取对应的磁盘小文件。
  • 总结
    1.map task 的计算结果会根据分区器(默认是 hashPartitioner)来决定写入到哪一个磁盘小文件中去。 ReduceTask 会去 Map 端拉取相应的磁盘小文件。
    2.产生的磁盘小文件的个数: M(map task 的个数)*R(reduce task 的个数)
  • 存在的问题,产生的磁盘小文件过多,会导致以下问题:
    1.在 Shuffle Write 过程中会产生很多写磁盘小文件的对象。
    2.在 Shuffle Read 过程中会产生很多读取磁盘小文件的对象
    3.在 JVM 堆内存中对象过多会造成频繁的 gc,gc 还无法解决 运行所需要的内存 的话,就会 OOM。
    4.在数据传输过程中会有频繁的网络通信,频繁的网络通信出 现通信故障的可能性大大增加,一旦网络通信出现了故障会 导致 shuffle file cannot find 由于这个错误导致的 task 失 败,TaskScheduler 不负责重试,由 DAGScheduler 负责 重试 Stage。

2.合并机制

HashShuffleManager_java_02

  • 总结
    产生磁盘小文件的个数:C(core 的个数)*R(reduce 的个数)


举报
0 条评论