0

いくつかの地球物理データ (地震データ) を含むファイルがあり、これらのファイルをローカル ファイル システムから読み取り、HDFS に Hadoop Sequential ファイルとして保存しています。

ここで、これらの Sequential ファイルから値を読み取って HBase テーブルに格納できる MapReduce ジョブを作成したいと考えています。これらのファイルは単なるフラット ファイルではありません。代わりに、各ピースは 240 バイトのブロックであり、いくつかのフィールドを持つ多くのピースで構成されています。各フィールドは、short または integer のいずれかです。ブロック番号をキーとして使用し、240 バイトのバイト配列 (すべてのフィールドを含む) を Sequential ファイルの値として使用しています。したがって、各 Sequential ファイルには、すべてのブロックがバイト配列とそのブロック番号として含まれています。

私の質問は、そのようなファイルを処理しているときに、各 240 バイト ブロックを読み取り、個々のフィールドを読み取り、240 バイト ブロックが完了したらすべてのフィールドを一度に出力するにはどうすればよいかということです。1000 ブロックのファイルがあるとします。したがって、私の MapReduce プログラムでは、これらの 1000 ブロックを一度に 1 つずつ読み取り、各フィールド (short または int) を抽出し、すべてのフィールドを 1 つの Map の結果として出力する必要があります。

これに関して、助けが必要です。

4

1 に答える 1

0

念のため、各240 bytesブロックを読み取り、ブロック番号をキーとして、バイト配列を値として出力しますか? デフォルトを拡張する必要があると思いますSequenceFileInputFormat。Sequence File がどのように機能するのか、またはそれらの構造がどのようなものか (申し訳ありません) は正確にはわかりませんが、ファイルの内容全体を読み取って出力値として出力しようとしていましたFileInputFormat。おそらく、のソースコードを見て、 every (データが構造化されている場合) または区切り文字SequenceFileInputFormatを作成する方法があるかどうかを確認できます。InputSplit240 bytes

お役に立てれば!

于 2012-05-09T01:50:22.173 に答える