在 HBase 中批量删除多少?

How many deletes to batch in HBase?

我正在编写一个作业来扫描 HBase table 并删除某些行。我读过我应该批量删除并定期清除它们,而不是处理每个单独的删除或一次处理整个批次。我现在的代码相当于..

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 作为最大批量大小。我找不到任何资源来暗示一次应该批处理多少个操作。对此有任何指导方针吗?直觉上,似乎根本不对事物进行批处理,或者只进行非常小的批处理,效率会非常低下。似乎非常大的批量大小也不好。有效率最佳点吗?

如果您要执行数千次删除,那么您应该使用 BulkDelete 协处理器:https://hbase.apache.org/0.94/apidocs/org/apache/hadoop/hbase/coprocessor/example/BulkDeleteProtocol.html

如果您不想使用上述协处理器,那么您将需要找出批处理的最佳位置。可以是100个,也可以是1000个