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
...
したがって、すべての境界点を知るには、ファイル全体をスキャンする必要があります。
このような構造に対処するカスタム リーダー/フォーマットの例はありますか?
すべての分割ポイントを事前に計算することを避けたいと思っています。データのループを無駄にする必要がないように、マッパーが必要とするときに各レコードをストリーミングしたいと考えています。ただし、分割ポイントを事前に計算する必要がある場合でも、カスタムスプリッターの作成方法がわからないため、可能であればそのようなものへのポインターもいただければ幸いです。
1 つの注意点: 各レコードの「ペイロード」は基本的に任意のバイナリ データであり、"FOOO"
私の知る限り、4 バイトの定数が含まれている可能性があります。したがって、入力分割がレコードの途中で発生した場合、必ずしも"FOOO"
次のレコードを見つけるためにの次のインスタンスに進むことはできません。ヘッダーだけでなくデータを検索し、必要な場所を探します。