0

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

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

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

我需要一些帮助,关于这个。

4

1 回答 1

0

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

希望这可以帮助!

于 2012-05-09T01:50:22.173 回答