使用BufferedMutator

org.apache.hadoop.hbase.client.BufferedMutator主要用来对HBase的单个表进行操作。它和Put类的作用差不多,但是主要用来实现批量的异步写操作。

BufferedMutator替换了HTable的setAutoFlush(false)的作用。

可以从Connection的实例中获取BufferedMutator的实例。在使用完成后需要调用close()方法关闭连接。对BufferedMutator进行配置需要通过BufferedMutatorParams完成。

MapReduce Job的是BufferedMutator使用的典型场景。MapReduce作业需要批量写入,但是无法找到恰当的点执行flush。BufferedMutator接收MapReduce作业发送来的Put数据后,会根据某些因素(比如接收的Put数据的总量)启发式地执行Batch Put操作,且会异步的提交Batch Put请求,这样MapReduce作业的执行也不会被打断。

BufferedMutator也可以用在一些特殊的情况上。MapReduce作业的每个线程将会拥有一个独立的BufferedMutator对象。一个独立的BufferedMutator也可以用在大容量的在线系统上来执行批量Put操作,但是这时需要注意一些极端情况比如JVM异常或机器故障,此时有可能造成数据丢失。

如下是几个使用BufferedMutator的实例。

实例一:

这段代码演示了创建BufferedMutator的一般过程。如前文所说,BufferedMutator的配置通常通过BufferedMutatorParams完成。获取BufferedMutator实例则是通过Connection对象。在这里还调整了一个writeBuffer的设置,这里等于是覆盖了HBase配置文件中的“hbase.client.write.buffer”设置。

实例二:

这段代码只看前半部分即可。与实例一的不同在于这里新建了一个ExceptionListener接口实现,并添加到BufferedMutatorParams中替换了BufferedMutatorParams的默认ExceptionListener实现。

实例三:

这里是一段BufferedMutator测试代码。

实例四:

实例五:

如有必要,稍后抽时间对代码做些简单说明。

######

发表评论