我是靠谱客的博主 高贵小蜜蜂,最近开发中收集的这篇文章主要介绍【Hive】常见优化方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  1. 列裁剪
    select后面跟要选择的列,由于hive中数据采用列式存储,选择需要的字段可加快字段的读取、减少数据量。(节省了读取开销,中间表存储开销和数据整合开销)
  2. 分区裁剪
    where条件第一个为分区字段,
  3. 多值group by
    如果group by后面有多个字段时,将更多值的字段放在前面,如group by有user_id和sex两个字段,应该是group by user_id、sex
  4. order by
    order by时尽量使用limit,尽量避免使用order by。Order by需要扫描数据到单个worker节点进行排序,导致单个worker需要大量内存。如果是查询Top N或者Bottom N,使用limit可减少排序计算和内存压力
  5. 大小表join
    Join时将大表放在左边:join时会将左边的表分割到多个worker,然后将join右边的表数据整个复制一份发送到每个worker进行计算。如果右边的表数据量太大,则可能会报内存溢出错误
  6. union 和 union all
    UNION ALL 代替 UNION :不用去重.和distinct的原因类似, UNION有去重的功能, 所以会引发内存使用的问题.如果只是拼接两个或者多个SQL查询的结果, 考虑用UNION ALL
  7. 谓词下推
    在子查询中,where条件应当放在子查询内部,而非外部。
  8. distinct
    使用group by代替distinct,当要计算某一列去重数据量时,使用count(distinct)时,速度很慢,原因和order by一样,数据将会在一个reduce中处理,此时可以使用group by语句替代
eg:select count(distinct user_id) from table_name
改为
select count(1) from (select user_id from table_name group by user_id)t;

当然,使用group by时会产生两个MR job,而distinct只会产生一个job,因此当数据量大到启动job的overhead远小于计算耗时,才考虑这种方法。当数据集很小或者key的倾斜比较明显时,group by还可能会比distinct慢。

最后

以上就是高贵小蜜蜂为你收集整理的【Hive】常见优化方法的全部内容,希望文章能够帮你解决【Hive】常见优化方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部