关闭写WAL日志
根据HBase 内部设计,WAL是规避数据丢失风险的一种补偿机制,如果应用可以容忍一定的数据丢失的风险,可能尝试在更新数据时,关闭写WAL
该方法存在的风险是,当RegionServer宕机时,可能写入的数据会出现丢失的情况,且无法恢复。
代码
Put put = new Put(Bytes.toBytes("r1"));
put.add(Bytes.toBytes("cf1"),Bytes.toBytes("mid"),Bytes.toBytes(123111));
....
put.setWriteToWAL(false);
table.put(put)
table.close();
设置AutoFlush
HTable🈶一个属性是AutoFlush,该属性用于支持客户端的批量更新。
该属性默认值是true,即客户端每收到一条数据,立即发送到服务端。
如果该属性设置为false,直到数据达到某个阈值的容量时,才会项RegionServer提交请求。
如果还没有达到该缓存而客户端崩溃。该部分数据将由于未发送到RegionServer而丢失,这个对于有些零容忍的在线服务是可不接受的
代码
table.setAutoFlush(AUTO_FLUSH)
table.setWriteBufferSize(WRITE_BUFFER_SIZE);
Put put = new Put(Bytes.toBytes("r1"));
put.add(Bytes.toBytes("cf1"),Bytes.toBytes("mid"),Bytes.toBytes(123111));
....
put.setWriteToWAL(true);
table.put(put)
table.flushCommits();
table.close();
预创建Region
场景:
创建表时,只有一个Region,随着数据量不断增加,当该Region大小到一定阈值时,就会出现分裂操作。在创建的一段时间内,造成资源的浪费
解决方案:
第一种:
使用RegionSpliter的方法
hbase org.apache.hadoop.hbase.util.RegionSplitter test HexStringSplit -c 10 -f f
test:表明
HexStringSplit:划分算法
-c 10:预创建10Region
-f f:创建f的列族