0

HBase テーブルをスキャンして特定の行を削除するジョブを作成しています。個々の削除を処理したり、バッチ全体を一度に処理したりするのではなく、削除をバッチ処理して定期的にフラッシュする必要があることを読みました。私のコードは今と同等です..

void addDeleteToBatch(Delete delete) {

  deleteBatch.add(delete);

  if (deleteBatch.size() >= 1000) {
    flushDeletes();
  }
}

void flushDeletes() {

  if (!deleteBatch.isEmpty()) {
    hbase.batchDelete("table_name", deleteBatch);
  }

  deleteBatch.clear();

  log("batch flushed");
}

ただし、最大バッチ サイズとして 1000 を選択する本当の理由はありません。一度にいくつの操作をバッチ処理する必要があるかを示唆するリソースが見つかりません。これに関するガイドラインはありますか?直感的には、まったくバッチ処理を行わないか、非常に小さなバッチ処理を行うのは非常に非効率的であるように思われます。また、非常に大きなバッチサイズは良くないようです。効率のスイートスポットはありますか?

4

1 に答える 1

1

何千もの削除を行っている場合は、BulkDelete コプロセッサを使用する必要があります: https://hbase.apache.org/0.94/apidocs/org/apache/hadoop/hbase/coprocessor/example/BulkDeleteProtocol.html

上記のコプロセッサを使用したくない場合は、バッチ処理のスイート スポットを見つける必要があります。100かもしれないし、1000かもしれない。

于 2015-09-12T05:57:00.977 に答える