我有一个包含一些地球物理数据(地震数据(的文件,我正在从本地文件系统读取这些文件,并将它们作为Hadoop顺序文件存储在HDFS中。
现在我想编写一个MapReduce作业,它可以从这些顺序文件中读取值并将它们存储到HBase表中。这些文件不仅仅是平面文件。相反,它们由许多部分组成,其中每个部分都是一个 240 字节的块,并具有多个字段。每个字段可以是短整型或整数。我使用块号作为键,并使用 240 字节的字节数组(包含所有字段(作为顺序文件的值。因此,每个顺序文件都将所有块作为字节数组及其块号。
我的问题是,在处理这样的文件时,一旦完成 240 字节的块,我如何读取每个 240 字节的块、读取单个字段并一次性发出所有字段?假设我有一个有 1000 个块的文件。所以在我的MapReduce程序中,我必须一次读取这1000个块,提取每个字段(short或int(,并将所有字段作为Map的结果发出。
关于这一点,我需要一些帮助。
只是为了确保,你想读取每个240 bytes
块,发出块号作为键,字节数组作为值?我认为您必须扩展默认SequenceFileInputFormat
.我不确定序列文件是如何工作的,或者它们的结构是什么样的(抱歉(,但我试图读取文件的全部内容以作为输出值发出,我这样做的方式是扩展FileInputFormat
。也许你可以看看SequenceFileInputFormat
的源代码,看看是否有办法每240 bytes
(如果你的数据是结构化的(或一些分隔符进行InputSplit
。
希望这有帮助!