HBase bulkLoad的注意事项
bulk load 特性使用MapReduce 来输出table数据到HBase 内部数据格式, 然后直接把存储文件装进一个正在运行的集群。使用BulkLoad将会使用更少的CPU和网络带宽来简化HBASE API。
BulkLoad限制
BulkLoad会跳过WAL,Replication需要使用WAL所以无法看到bulk load 数据。解决方法是要裸数据或者HFILE发到备集群在那边处理。
BulkLoad架构分为两部分:
生成Hbase内部存储文件所以之后可以被有效的放入急群众。
为了有效的实现功能,HFileOutputFormat2必须被设置成HFIle在同一个region中,为了实现这个目的,需要使用TotalOrderPartitioner把输出文件分割成以Region键范围分割的文件
HFileOutputFormat2 包含一个方便的方法,configureIncrementalLoad(),可以自动根据当前表region边界来使用TotalOrderPartitioner进行分割。
完成数据装载
当数据import已经被准备好了, 使用completebulkload工具来把数据装在进正在运行的cluster里面.这个命令行扫描全部准备好的文件,每一个都决定好这个文件属于哪个region。之后会联系要接受HFIle的RegionServer,放入存储目录然后client就可以读出数据。
如果region的界限在bulkLoad准备阶段改变了,或者在准备和完成阶段改变了,completebulkload工具将会在自动将数据分到对应的region界限去。这个过程并不是最有效率的,所以用户应该减少准备bulkload 文件和导入cluster的时间, 除非其他clients同事也在用其他方式loading数据。
$ hadoop jar hbase-server-VERSION.jar completebulkload [-c /path/to/hbase/config/hbase-site.xml] /user/todd/myoutput mytable
http://blog.cloudera.com/blog/2013/09/how-to-use-hbase-bulk-loading-and-why/