HBase バルク ロード (configureIncrementalLoad ヘルパー メソッドを使用) は、hbase テーブル内のリージョンと同じ数のレデューサー タスクを作成するようにジョブを構成します。したがって、数百の領域がある場合、ジョブは数百のレデューサー タスクを生成します。これは、小さなクラスターでは非常に遅くなる可能性があります..
MultipleOutputFormat などを使用して回避策はありますか?
ありがとう
ネットワークがボトルネックになるのは非常に簡単です。HFile と中間 MR データを圧縮していることを確認してください。
job.getConfiguration().setBoolean("mapred.compress.map.output", true);
job.getConfiguration().setClass("mapred.map.output.compression.codec",
org.apache.hadoop.io.compress.GzipCodec.class,
org.apache.hadoop.io.compress.CompressionCodec.class);
job.getConfiguration().set("hfile.compression",
Compression.Algorithm.LZO.getName());
データのインポート サイズは、Put ベースの形式を使用して検討する必要があるほど小さい場合があります。これにより、通常の HTable.Put API が呼び出され、リデューサー フェーズがスキップされます。TableMapReduceUtil.initTableReducerJob(テーブル、ヌル、ジョブ) を参照してください。
HFileOutputFormat を使用すると、設定したレデューサーの数がオーバーライドされます。レデューサーの数は、その HBase テーブル内のリージョンの数と同じです。したがって、レデューサーの数を制御したい場合は、リージョンの数を減らしてください。
ここにサンプルコードがあります:
これが役立つことを願っています:)