【问题标题】:Why does Hadoop Spilling happens?为什么会发生 Hadoop 溢出?
【发布时间】:2015-01-13 00:56:47
【问题描述】:

我对 Hadoop 系统非常陌生,并且处于学习阶段。

我在 Shuffle 和 Sort 阶段注意到,只要 MapOutputBuffer 达到 80%,就会发生溢出(我认为这也可以配置)。

现在为什么需要溢出阶段?

是不是因为 MapOutputBuffer 是一个循环缓冲区,如果我们不清空它可能会导致数据覆盖和内存泄漏?

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

    我写了一篇很好的文章来介绍这个主题:http://0x0fff.com/hadoop-mapreduce-comprehensive-description/

    一般:

    • 当没有足够的内存来容纳所有映射器输出时会发生溢出。可用的内存量由mapreduce.task.io.sort.mb 设置
    • 当 80% 的缓冲区空间被占用时会发生这种情况,因为溢出是在单独的线程中完成的,不会干扰映射器。如果缓冲区的利用率达到 100%,则映射器线程必须停止并等待溢出线程释放空间。为了避免这种情况,我们选择了 80% 的阈值
    • 溢出至少发生一次,当映射器完成时,因为映射器的输出应该被排序并保存到磁盘上,以便减速器进程读取它。并且为最后一个“保存到磁盘”发明一个单独的功能是没有用的,因为通常它执行相同的任务

    【讨论】:

      猜你喜欢
      • 2017-09-04
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多