全面总结Hive性能优化(一)

对于hive来说,相信大家都明白,
Hive是基于Hadoop的一个数据仓库工具;它是MapReduce的一个封装,底层就是MapReduce程序;
Hive可以将结构化的数据文件(按照各字段分类的数据)映射成一张虚表,并提供类SQL查询功能。

由于Hive的执行依赖于底层的MapReduce作业,因此对Hadoop作业的优化或者对MapReduce作业的调整是提高Hive性能的基础。
所以我们可以通过一系列的调优方法来使其提高效率。

为什么Hive运行性能低下?

简单来说hive用查询语句查询数据时,会花费大量的时间,尤其是数据量大的时候,低效的查询语句查询不仅耗时长,还会浪费运行资源,有可能查询的时候没有限制分区,导致任务起了好几万个map,导致造成太多的小文件,用过hive的朋友,我想或多或少都有类似的经历:一天下来,没跑几次hive,就到下班时间了。hive在极大数据或者数据不平衡等情况下,经常表现一般,所以很多时候必须进行优化来提高效率。

Hive的性能优化可以从以下几方面入手

首先我们需要知道,在Hadoop分布式计算框架下会衍生哪些问题:

1.数据倾斜

       所谓的「数据倾斜」,用通俗的话来讲,就是“一个人累死,其他人闲死”,在
  MapReduce程序中,大量的相同key被partition分配到一个分区里,
  使这个节点承受着巨大的压力,而其他节点计算完毕后要一直等待这个忙碌的节点,
  这样一来也拖累了整体的计算时间,使数据的生产效率十分低下。

2.job数比较多的作业运行效率相对比较低

     原因是mapreduce作业初始化的时间是比较长的。
 即使只有几百行的表,如果进行多次关联多次汇总,产生十几个jobs,同样会耗时很长。

3.分组太少,不必要的分组,分配reduce不均造成计算压力大

     count(distinct)在数据量大的情况下,效率较低,如果是多count(distinct...)效率更低,
 因为count(distinct)是按group by字段分组,按distinct字段排序,一般这种分布方式是很倾斜的;
     假设需要计算男女的UV,像淘宝一天30亿的PV,
 如果按性别分组,分配2个reduce,每个reduce要处理15亿数据。

4.数据倾斜是导致效率大幅降低的主要原因

 可以采用多一次 Map/Reduce 的方法, 避免倾斜。

清楚了出现效率低下的主要原因,那么去优化的话也就知道从哪入手了。

调优方案

1.减少处理数据量

列裁剪

Hive 在读数据的时候,可以只读取查询中所需要用到的列,而忽略其它列.
SELECT a,b FROM z WHERE e<10;

在实施此项查询中,z表有 5 列(a,b,c,d,e),Hive 只读取查询逻辑中真实需要 的 3 列 a、b、e,
而忽略列 c,d;这样做节省了读取开销,中间表存储开销和数据整合开销。

分区裁剪

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值