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 回答