【问题标题】:Custom input splits for streaming the data in MapReduce用于在 MapReduce 中流式传输数据的自定义输入拆分
【发布时间】:2013-11-15 04:27:22
【问题描述】:

我有一个大型数据集,它作为序列文件被摄取到 HDFS 中,关键是文件元数据并重视整个文件内容。我正在使用 SequenceFileInputFormat,因此我的拆分基于序列文件同步点。

我面临的问题是当我摄取非常大的文件时,我基本上是将整个文件加载到 Mapper/Reducer 的内存中,因为值是整个文件内容。我正在寻找在保留序列文件容器的同时流式传输文件内容的方法。我什至考虑过编写自定义拆分,但不确定如何保留序列文件容器。

任何想法都会有所帮助。

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

    由于以下两个原因,自定义拆分方法不适合这种情况。

    1) 整个文件被加载到 Map 节点,因为 Map 函数需要整个文件(因为值 = 整个内容) .如果您拆分文件,Map 函数只接收部分记录(值)并且它会失败。

    2) 序列文件容器可能会将您的文件视为“单记录”文件。因此,它最多只有 1 个同步点,即在 Header 之后。因此,即使您保留序列文件容器的同步点,整个文件也会在加载时加载到 Map 节点。

    【讨论】:

      【解决方案2】:

      如果编写自定义拆分,我担心会丢失序列文件同步点。我正在考虑这种修改序列文件输入格式/记录读取器以返回文件内容块而不是整个文件的方法,但为每个块返回相同的键。

      分块策略类似于 MapReduce 中文件拆分的计算方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多