未加星标

HBase Bulk Load

字体大小 | |
[数据库(综合) 所属分类 数据库(综合) | 发布者 店小二04 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏
概述

BulkLoad是一种高效写入HBase的方式,适用于将数据批量迁移到HBase。BulkLoad使用MapReduce作业直接生成HBase的StoreFile,并将生成的StoreFile直接装载入正在运行的HBase集群。较之使用HBase的API,使用BulkLoad耗费的CPU和网络资源都相对较少。

因为BulkLoad绕过了正常写数据的路径(WAL、MemStore、flush、StoreFile),尤其是WAL,通过WAL进行的复制操作就不会处理BulkLoad装载的数据。这很像是调用HBase API时使用了Put.setDurability(SKIP_WAL)。一个解决方式是将原始文件或HFile移到备份集群上再做其他处理。《 Bulk Loaded HFile Replication 》对这个问题做了讨论。

步骤

Bulk Load分成两步完成。

通过MapReduce作业准备数据

BulkLoad的第一步是在MapReduce作业中使用HFileOutputFormat2类生成HBase数据文件(StoreFile)。

为了使最终生成的每个HFile都能对应一个Region,需要在MapReduce作业中使用TotalOrderPartitioner类对map的输出结果进行partition,使之与Region的RowKey范围达到一致。幸运的是HFileOutputFormat2类的configureIncrementalLoad()已经做了这个工作,它会根据HBase表中现有的Region边界自动配置TotalOrderPartitioner。

载入数据到HBase集群

在准备好数据文件后,可以在命令行中使用completebulkload工具完成BulkLoad,命令如下:

$ hadoop jar hbase-server-VERSION.jar completebulkload [-c /path/to/hbase/config/hbase-site.xml] /path/to/prepared/data/ tableName

也可以直接调用LoadIncrementalHFiles实例的doBulkLoad方法完成BulkLoad:

LoadIncrementalHFiles loader = new LoadIncrementalHFiles(conf); loader.doBulkLoad(new Path(outputPath), new HTable(tableName));

执行doBulkLoad方法会遍历MapReduce作业生成的每个数据文件,并决定将其分配给哪一个Region,随后联系接收数据的HRegionServer,将数据移动到HRegionServer上的存储目录,都做完后再通知client数据可用了。

如果在准备数据的时候或者是在装载数据到HBase集群的过程中,Region的边界发生了变化,LoadIncrementalHFiles会自动对数据文件进行split,并发送split后的文件到不同的Region。但是这样会影响导入数据的效率,尤其是在还有其他客户端同时写数据的时候。在执行BulkLoad的时候应当尽量避免这种情况发生。

###########

本文数据库(综合)相关术语:系统安全软件

主题: HBaseMapReduce数据CPU
分页:12
转载请注明
本文标题:HBase Bulk Load
本站链接:http://www.codesec.net/view/532387.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(综合) | 评论(0) | 阅读(41)