鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

Bulkload测试用例

用例分析

Bulkload用例前半部分鲲鹏计算平台48核CPU占用90%+,x86计算平台CPU占用100%。分析Bulkload用例具体流程如下:

  1. map阶段:该阶段是并发生成hfile,根据数据量的大小,map阶段会有上万个并发去加载hdfs中待导入的数据,然后进行格式转换,格式转换过后会对数据进行校验,检测kv是否有效。最后会对生成的hfile进行压缩。这一过程会消耗大量的CPU。现有mapreduce配置为1个map申请一个vcore。
  2. reduce阶段:根据region个数将生成的hfile放置到不同的region。reduce阶段的并发数量是根据region个数来决定的。

Map优化

Bulkload的ImportTsv默认是以Hdfs的blocksize(默认128MB)来切分数据文件,如200G的数据文件大概有1600多个map任务,但是并没有相应的参数设定来修改map数,故通过更改ImportTsv源码,ImportTsv该类具体位于HBase源码的hbase-mapreduce-2.0.2.3.1.0.0-78.jar中,具体的路径如下所示。

在ImportTsv.java增加一个配置参数,即增加一个成员变量:

在createSubmittableJob方法中增加如下代码:

将该JAR包重新编译后,通过find查找到JAR包所在位置,替换到对应的HBase源码中。

替换之后就可以在ImportTsv上配置一个mapreduce.split.minsize参数,参照如下。

1
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=HBASE_ROW_KEY,f1:H_NAME,f1:ADDRESS -Dimporttsv.separator="," -Dimporttsv.skip.bad.lines=true -Dmapreduce.split.minsize=5368709120 -Dimporttsv.bulk.output=/tmp/hbase/hfile ImportTable /tmp/hbase/datadirImport

-Dmapreduce.split.minsize=5368709120:该值就是设定了数据文件的分割数值,进而可以修改map数值,设置map数时可以将map数与CPU核数设置差不多。

Reduce优化

查看任务运行的时间,发现reduce运行时间很不均衡,有的3分钟,有的40秒,相差很大,故尝试增加reduce数,使每个reduce处理数据更均衡。

通过修改预分区数(region),可以修改reduce数量。(本次测试设定的是800region)

修改对应文件run_create.txt中的split_num即可修改region数量。

顺序数据测试

本次bulkload测试的数据为每条1K,单条格式如下:

HBase的Rowkey是按照ASCII字典排序设计的,排序时会先比对两个Rowkey的第一个字节,如果相同,然后会比对第二个字节,依次类推,直到比较到最后一位。为了保证数据能够均衡写入到每个region,利用位补齐的方法将Rowkey的位数长度设置成一样。