Hadoop 用于在MapReduce中传输数据的自定义输入拆分

Hadoop 用于在MapReduce中传输数据的自定义输入拆分,hadoop,mapreduce,Hadoop,Mapreduce,我有一个大的数据集,作为序列文件被摄取到HDFS中,密钥是文件元数据,并对整个文件内容进行赋值。我使用的是SequenceFileInputFormat,因此我的拆分基于序列文件同步点 我面临的问题是,当我摄取非常大的文件时,我基本上是将整个文件加载到Mapper/Reducer的内存中,因为值是整个文件内容。我正在寻找在保留序列文件容器的同时对文件内容进行流式处理的方法。我甚至考虑过编写自定义拆分,但不确定如何保留序列文件容器 任何想法都会有帮助。由于以下两个原因,自定义拆分方法不适用于此场景

我有一个大的数据集,作为序列文件被摄取到HDFS中,密钥是文件元数据,并对整个文件内容进行赋值。我使用的是SequenceFileInputFormat,因此我的拆分基于序列文件同步点

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


任何想法都会有帮助。

由于以下两个原因,自定义拆分方法不适用于此场景。

<1)整个文件将加载到映射节点,因为映射函数需要整个文件(值=整个内容)。如果分割文件,映射函数只接收部分记录(值),它将失败。

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

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

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