如何从Mapper或Reducer中发出值列表?

时间:2012-05-04 19:59:05

标签: hadoop mapreduce hbase hdfs

我有一个包含一些地球物理数据(地震数据)的文件,我正在从本地文件系统读取这些文件,并将它们存储为HDFS中的Hadoop Sequential文件。

现在我想编写一个MapReduce作业,它可以读取这些Sequential文件中的值并将它们存储到HBase表中。这些文件不仅仅是平面文件。相反,它们由许多部分组成,其中每个部分是240字节的块并且具有多个字段。每个字段可以是short或整数。我使用块号作为键,并使用240字节的字节数组(包含所有字段)作为Sequential文件的值。因此,每个Sequential文件都将所有块作为字节数组及其块号。

我的问题是,在处理这样的文件时,如何读取每个240字节块,读取单个字段并在240字节块完成后一次性发出所有字段?假设我有一个包含1000个块的文件。所以在我的MapReduce程序中,我必须一次读取这1000个块,提取每个字段(short或int)并作为一个Map的结果发出所有字段。

我需要一些帮助。

1 个答案:

答案 0 :(得分:0)

为了确保,您想要读取每个240 bytes块,将块编号作为键发出,将字节数组作为值发出?我想你必须延长默认SequenceFileInputFormat。我不确定Sequence File是如何工作的,或者它们的结构是什么样的(抱歉),但是我试图读取文件的全部内容作为输出值发出,我这样做是为了扩展{{1 }}。也许您可以查看FileInputFormat的源代码,看看是否有办法SequenceFileInputFormatInputSplit(如果您的数据是结构化的),或者是某个分隔符。

希望这有帮助!