在 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"
来查找下一条记录,这也不是管理记录查找的有效方法,因为这意味着扫描所有数据而不仅仅是标题并寻找必要的位置。