1

HFileOutputFormat を使用して、CSV ファイルを hbase テーブルに一括読み込みします。job.setNumReduceTasks(0) を使用したマップのみがあり、reduce タスクはありません。しかし、ジョブでレデューサーが実行されていることがわかりました。このレデューサーは、HFileOutputFormat のために開始されたのでしょうか?
以前は、リデューサーが実行されなかった同じジョブに TableOutputFormat を使用していました。最近、HFileOutputFormat を使用するようにマップ タスクをリファクタリングしましたが、この変更後、リデューサーが実行されていることがわかりました。

次に、レデューサーで以下のエラーが発生しています。これは、以前は TableOutputFormat で取得できませんでした。これは HFileOutputFormat にも関連していますか?

エラー: java.lang.ClassNotFoundException: com.google.common.base.Preconditions

4

2 に答える 2

2

HFileOutputFormat は実際に (HFiles が必要な場合) 削減タスクを開始します。

そこにエラーが表示されます Hadoop は、HFiles を生成するために Google の Guava ライブラリが必要です。Hadoop にこのライブラリを見つけさせる最も簡単な方法は、単に から にコピーすること$HBASE_HOME/lib/です$HADOOP_HOME/lib/。を探しguava-<version>.jarます。

于 2013-04-16T09:30:15.377 に答える
0

はい。Reducer の数を 0 に設定しても、HFileOutputFormat はマッパー出力を並べ替えてマージするための Reducer タスクを開始して、このファイルを HTable 互換にします。レデューサーの数は、HBase テーブル内のリージョンの数と同じです

MapReduce ジョブを介して HBase バルク ロード用のデータを準備するサンプル コードは、こちらにあります。

于 2013-12-02T15:31:18.153 に答える