2012-03-14 19 views
2

私は最初にHBaseテーブルをスキャンするmapreduceプログラムを持っています。HBaseマップ出力をhdfs&HBASeに出力

私は、いくつかのレデューサー出力をhdfsに行き、いくつかのレデューサー出力をhbaseテーブルに書きたいと思っています。レデューサーは、このように2つの異なる場所/形式に出力するように設定できますか?

答えて

3

還元剤は、MulitpleOutputsclassを使用して複数のファイルを出力するように設定できます。このクラスの先頭にあるドキュメントは、複数のファイルに書き込むための明確な例を示しています。しかし、HBaseへの書き込み用にOutputformatが組み込まれていないので、HDFSの特定の場所に2番目のストリームを書き込んだり、HBaseに別のジョブを挿入したりすることも考えられます。

1

コードをあまり書きたくない場合は、マッパーまたはレデューサーのセットアップメソッドでテーブルを開き、hbaseテーブルにputステートメントを実行するだけです。一方、出力ファイルがhdfsファイルであるようにジョブを記述します。こうすることで、hbaseとhdfsの両方に書き込むことができます。

さらに詳しく説明すると、context.write()を実行すると、hdfsファイルに書き込む一方、putを実行するとtable.putが実行されます。

また、クリーンアップ()メソッドでテーブルなどを閉じることを忘れないでください。唯一の背景は、テーブル接続が1000回開かれるとしますが、任意のポイントでマッパーの最大数が実際に実行されるため、設定に応じて50になる可能性があります。少なくとも私のために働く!

関連する問題