【问题标题】:When will a spilling process stop?溢出过程何时停止?
【发布时间】:2015-08-26 10:59:44
【问题描述】:

映射器输出临时存储在循环缓冲区中(在内存中)。默认缓冲区大小为 100 Mb。当缓冲区填满 80% 时,将开始溢出过程。 (http://grepalex.com/2012/09/24/map-partition-sort-spill/) 这种溢出(一次溢出)何时停止/完成? 创建固定大小的溢出后它会停止吗?

【问题讨论】:

    标签: hadoop mapreduce hadoop-yarn


    【解决方案1】:

    好问题。让我试着一步一步解释。

    1. 地图将(使用 Mapper.Context.write())将其输出写入循环内存缓冲区 (MapTask.MapOutputBuffer)。
    2. 当缓冲区超过 80% 的默认阈值限制时,缓冲区中的所有数据都将溢出到磁盘。
    3. 因此,假设 mapreduce.task.io.sort.mb 设置为 100 MB,mapreduce.map.sort.spill.percent 设置为 0.8。
    4. 现在,当缓冲区中的数据达到 85 MB(超过 80%)时,所有 85 MB 将被溢出到单个拆分文件中。
    5. 使用多个线程将数据溢出到磁盘。
    6. 溢出在单独的线程中工作,允许映射器在发生溢出时继续运行和处理输入数据。
    7. 因此,循环缓冲区超过其大小的 80% 的情况将再次发生,并且将创建一个新的溢出文件。

    参考链接: Link 1Link 2

    【讨论】:

      【解决方案2】:

      这里的溢出意味着它溢出到本地磁盘(不是 hdfs),reducer 会在那里拾取它。溢出以循环方式写入 mapred.local.dir 属性指定的目录。当所有地图输出都写入磁盘时,溢出将停止。

      【讨论】:

        猜你喜欢
        • 2021-11-02
        • 2022-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-11
        • 2010-11-05
        相关资源
        最近更新 更多