Q1:Hbase 使用时间戳来维护版本。如果您不提供,则采用 hbase 系统默认提供的值。
如果您有这样的要求,您也可以在放置请求中更新自定义时间。它不会影响性能。
Q2:您可以通过两种方式做到这一点。
例如:#1 使用批处理技术的简单 Java 客户端。
我使用 hbase 批量列出 100000 条记录的对象来解析 json(类似于您的独立 csv 客户端)
下面是我实现这一目标的代码片段。解析其他格式时也可以做同样的事情)
可能你需要在两个地方调用这个方法
1)批量为100000条记录。
2) 对于您的批次记录少于100000条的处理提醒
public void addRecord(final ArrayList<Put> puts, final String tableName) throws Exception {
try {
final HTable table = new HTable(HBaseConnection.getHBaseConfiguration(), getTable(tableName));
table.put(puts);
LOG.info("INSERT record[s] " + puts.size() + " to table " + tableName + " OK.");
} catch (final Throwable e) {
e.printStackTrace();
} finally {
LOG.info("Processed ---> " + puts.size());
if (puts != null) {
puts.clear();
}
}
}
注意:批量大小在内部由以下因素控制hbase.client.write.buffer
就像下面在您的配置 xml 之一中一样
<property>
<name>hbase.client.write.buffer</name>
<value>20971520</value> // around 2 mb i guess
</property>
其默认值为 2mb 大小。一旦缓冲区被填满,它将刷新所有实际插入到表中的内容。
此外,mapreduce 客户端或具有批处理功能的独立客户端
技术。批处理由上述缓冲区属性控制