hive入门学习:浅谈hive的常见优化策略

                               hive入门学习:浅谈hive的常见优化策略      

                hive的产生虽然大幅度的减轻了编写MR代码的代价,但是由于它依然使用的是以mapreduce作为底层的驱动,那么由于shuffle产生的问题依然保留着,这里简单的讨论一下和hive性能优化的讨论。主要涉及如下几点:第一:合理的设置map的个数和reduce的个数,第二,选择合理的数据压缩策略,第三,有限我考虑分布式缓存,第三充分利用jobs的中间结果集,第四,设置允许并行执行策略,第五,最好禁止推测执行,第六,适当的设置JVM重用策略。

        第一:map的个数不用设置,如果可以设置的话,就设置block的最小值和最大值,在改变block大小的基础上改变map的个数。对于reduce的个数,唯一可行的方法就是随机的设置reduce的个数,当一个临近区域reduce的个数导致消耗的时间在一定的范围内波动的时候,我们就把此时的reduce_number设置为应用环境下的个数。也就是说,合理的reduce的个数是在测试环境下测试出来的。reduce个数的设置如下,这些信息在MR的刚开始会打印出来。

In order to change the average load for a reducer (in bytes):
   set hive.exec.reducers.bytes.per.reducer=<number>//设置reduce每次计算的字节数
In order to limit the maximum number of reducers:
    set hive.exec.reducers.max=<number>//   设置reducer的最大个数
In order to set a constant number of reducers:
    set mapreduce.job.reduces=<number>//  设置reducer的场数个数

      第二:合理的使用压缩技术,压缩可以减小磁盘IO的性能和减缓网络传输的压力,但是我们需要注意压缩和解压带来的时间消耗是否可以真正的减少时间消耗。常用的压缩技术有snappy,lzo,默认情况下一般用zlib2。在使用压缩的时候一定要注意,当前的数据操作,是否适合数据压缩。

     第三: 这里的分布式缓存主要指的是开启auto.convert.join=true。自动对table的join进行优化。

     第四: 大部分的业务都是对于一个table_info(50个字段)种的部分字段进行操作的,例如job1,job2,job3,job4这几个job都利用了table_info中的5个字段,涉及到了很多的相同的数据提取和预处理操作,这时,需要把这部分操作提取出来,就可以节省很多的经历,大幅度的减少了无用功。

       第五:把set hive.exec.parallel=true,set  hive.exec.parallel.thread.numbe=num_para(这个数设置成为cpu的线程数最好),可以提高程序的并行性。

       第六:关闭推测执行。为什么呢?因为在测试环境下我们都把应用程序跑通了,如果还加上推测执行,如果有一个数据分片本来就会发生数据倾斜,执行执行时间就是比其他的时间长,那么hive就会把这个执行时间长的job当作运行失败,继而又产生一个相同的job去运行,这不就多此一举吗?通过如下设置关闭推测执行:

<span style="font-size:18px;">set mapreduce.map.speculative=false
set mapreduce.reduce.speculative=false
set hive.mapred.reduce.tasks.speculative.execution=false</span>
      第七:设置JVM重用,也就是说让一个JVM种可以运行多个任务,这个数据最好设置在1到10以内,不要超过20。因为jvm的初始化,销毁占用了太多的时间,jvm重用一般可以节省2/3的时间。例如hadoop下开启对于小任务开启uber模式就是一个不错的选择。

      总结:上面谈到的优化方法仅仅是hive优化中的一小部分,以后遇到了会继续记录。



           

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值