互联网数据 是直接放在hbase吗

2025-05-07 05:59:21
推荐回答(1个)
回答1:

1、研究版本hbase0.94.12;2、贴出的源代码可能会有删减,只保留关键的代码

从client和server两个方面探讨hbase的写数据过程。
一、client端

1、写数据API
写数据主要是HTable的单条写和批量写两个API,源码如下:
// 单条写API
public void put( final Put put) throws IOException {
doPut(put);
if (autoFlush) {
flushCommits();
}
}
//批量写API
public void put( final List puts) throws IOException {
for (Put put : puts) {
doPut(put);
}
if (autoFlush) {
flushCommits();
}
}
//具体的put实现
private void doPut(Put put) throws IOException{
validatePut(put);
writeBuffer.add(put);
currentWriteBufferSize += put.heapSize();
if (currentWriteBufferSize > writeBufferSize) {
flushCommits();
}
}
public void close() throws IOException {
if ( this.closed) {
return;
}
flushCommits();
….
}
通过两个put API可以看出如果autoFlush为false,则无论是否是批量写效果均是相同,均是等待写入的数据超过配置的writeBufferSize(通过hbase.client.write.buffer配置,默认为2M)时才提交写数据请求,如果最后的写入数据没有超过2M,则在调用close方法时会进行最后的提交,当然,如果使用批量的put方法时,自己控制flushCommits则效果不同,比如每隔1000条进行一次提交,如果1000条数据的总大小超过了2M,则实际上会发生多次提交,导致最终的提交次数多过只由writeBufferSize控制的提交次数,因此在实际的项目中,使用单条写的put( final Put put)API即可,这样即可以简化写操作数据的程序代码,写入效率也更优。