1

HBase バルク ロード (configureIncrementalLoad ヘルパー メソッドを使用) は、hbase テーブル内のリージョンと同じ数のレデューサー タスクを作成するようにジョブを構成します。したがって、数百の領域がある場合、ジョブは数百のレデューサー タスクを生成します。これは、小さなクラスターでは非常に遅くなる可能性があります..

MultipleOutputFormat などを使用して回避策はありますか?

ありがとう

4

2 に答える 2

1
  1. リデュース ステージをリージョンごとに分割することで、多くの長期的なメリットが得られます。インポートされたデータがオンラインになると、データの局所性が得られます。また、リージョンがいつ別のサーバーに負荷分散されたかを判断することもできます。より粗い粒度にすぐに行くことはありません。
  2. リデュース ステージでは 1 つのファイルの書き込みが行われるため、NumReduceTasks(ハード ドライブの数) を設定できるはずです。そうすればもっと速くなるかもしれません。
  3. ネットワークがボトルネックになるのは非常に簡単です。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());
    
  4. データのインポート サイズは、Put ベースの形式を使用して検討する必要があるほど小さい場合があります。これにより、通常の HTable.Put API が呼び出され、リデューサー フェーズがスキップされます。TableMapReduceUtil.initTableReducerJob(テーブル、ヌル、ジョブ) を参照してください。

于 2011-03-15T16:10:48.577 に答える
0

HFileOutputFormat を使用すると、設定したレデューサーの数がオーバーライドされます。レデューサーの数は、その HBase テーブル内のリージョンの数と同じです。したがって、レデューサーの数を制御したい場合は、リージョンの数を減らしてください。

ここにサンプルコードがあります:

これが役立つことを願っています:)

于 2013-12-02T15:48:37.747 に答える