次のようなバイナリ形式で記述された大規模な時系列データ ファイルを処理する M/R ジョブを作成しています (読みやすくするためにここに新しい行があり、実際のデータは明らかに連続しています)。
TIMESTAMP_1---------------------TIMESTAMP_1
TIMESTAMP_2**********TIMESTAMP_2
TIMESTAMP_3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%TIMESTAMP_3
.. etc
ここで、timestamp は単に 8 バイトの構造体であり、最初の 2 バイトで識別できます。実際のデータは、上に表示されているように、重複した値のタイムスタンプの間に境界があり、1 つ以上の事前定義された構造体が含まれています。キーと値のペアをマッパーに発行するカスタム InputFormat を作成したいと思います。
< TIMESTAMP_1, --------------------- >
< TIMESTAMP_2, ********** >
< TIMESTAMP_3, %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% >
論理的には、TIMESTAMP
現在TIMESTAMP
の<TIMESTAMP, DATA>
. 私の問題は、 内の分割間の同期でRecordReader
あるため、特定のリーダーが次の分割を受信した場合
# a split occurs inside my data
reader X: TIMESTAMP_1--------------
reader Y: -------TIMESTAMP_1 TIMESTAMP_2****..
# or inside the timestamp
or even: @@@@@@@TIMES
TAMP_1-------------- ..
これにアプローチする良い方法は何ですか?CustomRecordReader
分割間で同期でき、データを失わないように、ファイル オフセットにアクセスする簡単な方法はありますか? 分割の処理方法について概念的なギャップがあると思うので、これらの説明が役立つかもしれません。ありがとう。