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