关闭写WAL日志

  1. 根据HBase 内部设计,WAL是规避数据丢失风险的一种补偿机制,如果应用可以容忍一定的数据丢失的风险,可能尝试在更新数据时,关闭写WAL
  2. 该方法存在的风险是,当RegionServer宕机时,可能写入的数据会出现丢失的情况,且无法恢复。

代码

  1. Put put = new Put(Bytes.toBytes("r1"));
  2. put.add(Bytes.toBytes("cf1"),Bytes.toBytes("mid"),Bytes.toBytes(123111));
  3. ....
  4. put.setWriteToWAL(false);
  5. table.put(put)
  6. table.close();

设置AutoFlush

  1. HTable🈶一个属性是AutoFlush,该属性用于支持客户端的批量更新。
  2. 该属性默认值是true,即客户端每收到一条数据,立即发送到服务端。
  3. 如果该属性设置为false,直到数据达到某个阈值的容量时,才会项RegionServer提交请求。
  4. 如果还没有达到该缓存而客户端崩溃。该部分数据将由于未发送到RegionServer而丢失,这个对于有些零容忍的在线服务是可不接受的

代码

  1. table.setAutoFlush(AUTO_FLUSH)
  2. table.setWriteBufferSize(WRITE_BUFFER_SIZE);
  3. Put put = new Put(Bytes.toBytes("r1"));
  4. put.add(Bytes.toBytes("cf1"),Bytes.toBytes("mid"),Bytes.toBytes(123111));
  5. ....
  6. put.setWriteToWAL(true);
  7. table.put(put)
  8. table.flushCommits();
  9. table.close();

预创建Region

  1. 场景:
  2. 创建表时,只有一个Region,随着数据量不断增加,当该Region大小到一定阈值时,就会出现分裂操作。在创建的一段时间内,造成资源的浪费

解决方案:

  1. 第一种:
  2. 使用RegionSpliter的方法
  3. hbase org.apache.hadoop.hbase.util.RegionSplitter test HexStringSplit -c 10 -f f
  4. test:表明
  5. HexStringSplit:划分算法
  6. -c 10:预创建10Region
  7. -f f:创建f的列族