2012-05-04 6 views
0

いくつかの地球物理データ(地震データ)が含まれているファイルがあります。これらのファイルをローカルファイルシステムから読み込み、HDFSにHadoop Sequentialファイルとして保存しています。MapperまたはReducerから値リストを発行するにはどうすればよいですか?

これらのSequentialファイルから値を読み取り、それらをHBaseテーブルに格納できるMapReduceジョブを作成します。これらのファイルは単なるフラットファイルではありません。代わりに、多くの部分で構成されます。各部分は240バイトのブロックで、いくつかのフィールドがあります。各フィールドは、短いものでも整数でもよい。私は、ブロック番号をキーとして使用し、240バイトのバイト配列(すべてのフィールドを含む)をSequentialファイルの値として使用しています。したがって、各シーケンシャルファイルには、すべてのブロックがバイト配列とそのブロック番号として格納されます。

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

私はいくつかの助けが必要です。

答えて

0

ちょうど確かめて、各240 bytesブロックを読んで、ブロック番号をキーとして出し、バイト配列を値として出力しますか?私はあなたがデフォルトのSequenceFileInputFormatを拡張する必要があると思います。 Sequence Fileの仕組みや構造がどういうものなのかは分かりませんが、出力値として出力するファイルの内容全体を読み込もうとしていましたが、やった方法はFileInputFormatです。おそらく、SequenceFileInputFormatのソースコードを見て、InputSplit(データが構造化されている場合)、または一部の区切り文字に240 bytesを作る方法があるかどうかを見てみてください。

希望すると便利です。

+0

謝:返信してくれてありがとうございます。実際には、私はすでにシーケンシャルファイルを持っています(ブロックではなく、ブロック全体を含む240バイトの配列です) – Tariq

関連する問題