Hadoop参数调优

最近看了很多如何让hadoop运行时间减少的文章,一点自己的理解,记录如下

1)压缩map输出和reduce输出

    压缩输出结果,不仅可以减少写数据,还可以加快map到ruduce的传输速度,有利于加快运行时间。

2)不要重复创建对象

    尽量在mapper或者reducer的类中去创建,不要重复的在map函数中创建对象。

3)scan的参数设置

    在扫描数据库表时,scan的一些属性:hbase.scan.catching 和 hbase.scan.batch 都是可以一次性的返回

    多条记录,避免每次都要去访问数据库,同时要注意只设置自己需要的columnFamily就可以了,减少不必要的

    数据返回,同时设置scan.setCatchingBlocks(false),这样可以避免扫库的时候重写了缓存,因为扫库这种动作

    不代表真实的查询频率,不应该覆盖缓存。

4)推测执行

    mapred.map.tasks.speculative.execution,此属性默认为true,即当程序感知到某个map的运行时间较慢,会

    在另外一个机器上运行同样的任务,成功后kill掉当前运行的任务。个人感觉这个参数在资源充足的时候,可以设置

    为false,避免浪费资源。在资源不足的时候,可以打开此参数,避免因为某些任务过慢,影响整体任务的执行时间。

5)hbase的参数设置(客户端设置无效)

  hbase.regionserver.handler.count

    regionserver的工作线程数量,默认是10,没有疑问,官方默认值太小,通常都调到100~200之间,提高regionserver性能。

  hbase.regionserver.lease.period  

    regionserer租约时间,默认值是60s,也有点小,如果你的生产环境中,在执行一些任务时,如mapred时出现lease超时的报错,那这个时候就需要去调大这个值了。

  hfile.block.cache.size

    regionserver cache的大小,默认是0.2,是整个堆内存的多少比例作为regionserver的cache,调大该值会提升查询性能,当然也不能过大,如果你的hbase都大量的查询,

    写入不是很多的话,调到0.5也就够了。

原文地址:https://www.cnblogs.com/zhanglanyun/p/3240063.html