您的位置:首页 > 其它

一个Hbase数据读取优化的小例子

2015-05-07 11:01 357 查看
今天群里有个有经验的大神提了一个问题(@尘事随缘),记录下来。

A君搭建一个小型的集群,7台DataNode,一台主节点。需求是这样:通过MR程序去读取Hbase表里面的数据,程序运行后发现速度比较慢,通过查询任务详细发现,累计需要1542个Map完成,目前有14个MAP在执行。客户对此速度表示不满意,请问如何优化?

首先通过Job看,有1542个Map需要执行,说明Hbase,有1542个分区(每个分区对应一个Map),这是一个知识点。

数据不存在热点,Hbase处理性能没有问题

有1542个Map需要执行,但是并行的只有14个,说明Map的数据量不够。

经过询问,他没有做配置,默认每台机器只有2个Map,所以并行度是7*2=14,也就是同时运行14个Map

所以提示他去配置文件重新配置,每台机器配置的Map数据量是CPU个,因为8个CPU,所以配置8个MAP。那么并行处理能力是7*8=56(同时56个Map)。

运行速度提升4倍。

参数修改:

conf/mapred-site.xml

1.0 版本是这个参数 mapred.tasktracker.map.tasks.maximum 配置Map

mapred.tasktracker.reduce.tasks.maximum 配置Reduce
https://hadoop.apache.org/docs/r1.0.4/mapred-default.html
2.0 版本是这个参数

mapreduce.map.cpu.vcores 配置 每个Map Task 需要的虚拟CPU的个数
http://hadoop.apache.org/docs/r2.4.1/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
反思:

Hadoop集群搭建好了,必须要做优化(优化需要根据你不同的业务场景来做优化)

一个Region对应一个Map,那么反过来,批量导入数据到Hbase,怎么优化呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: