1

在 Hadoop v2 中,我需要基于存储在 HDFS 中的一些大型二进制格式创建一个RecordReader和/或一个。InputFormat这些文件基本上是具有以下结构的串联记录:

4-byte constant string "FOOO"
8-byte integer record length n1
n1-byte rest of the record

4-byte constant string "FOOO"
8-byte integer record length n2
n2-byte rest of the record

4-byte constant string "FOOO"
8-byte integer record length n3
n3-byte rest of the record

4-byte constant string "FOOO"
8-byte integer record length n4
n4-byte rest of the record
...

要知道所有的边界点,我需要扫描整个文件。

是否有任何自定义阅读器/格式的示例可以解决这样的结构?

我希望避免提前预先计算所有分割点,我宁愿在每个记录中流式传输,因为映射器需要它,这样我就不必浪费数据循环。但即使我必须预先计算分割点,我也不知道如何编写自定义分割器,所以如果可能的话,我也会很感激指向类似东西的指针。

需要注意的一点:每条记录的“有效负载”本质上是任意二进制数据,"FOOO"据我所知,其中可能包含 4 字节常量。因此,如果输入拆分位于记录中间的某个位置,我不一定只能前进到下一个实例"FOOO"来查找下一条记录,这也不是管理记录查找的有效方法,因为这意味着扫描所有数据而不仅仅是标题并寻找必要的位置。

4

0 回答 0