我正在编写一个作业来扫描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作为最大批量大小然而。我找不到任何资源提示一次应该批处理多少个操作。有什么指导方针吗?从直觉上看,根本不批处理,或者只做很小的批处理,似乎效率很低。看起来非常大的批量也是不好的。有效率的最佳点吗?
1条答案
按热度按时间2fjabf4q1#
如果您正在执行数千次删除,那么您应该使用bulkdelete coprocessor:httpshttp://hbase.apache.org/0.94/apidocs/org/apache/hadoop/hbase/coprocessor/example/bulkdeleteprotocol.html
如果您不想使用上述协处理器,那么您需要找出批处理的最佳点。可以是100,也可以是1000。