与服务器一起的日子

  • mysql
  • linux
  • 高可用
  • nginx
与服务器一起的日子
冰冷的机器也熄不灭火热的心
  1. 首页
  2. 大数据
  3. hive
  4. 正文

HIVE的优化原则

2017年10月12日 640点热度 0人点赞 0条评论

hive作为hadoop的生态系统的重要的一环,将关系型数据库和hadoop生态系统连接了起来。

而hive支持类sql结构化语句查询,所以有时候就需要优化它。

hive的执行是由mapreduce驱动的,所以hive的优化也需要去配置mapreduce。

========================优化原则总结========================

  1. join连接时的优化:当三个或多个以上的表进行join操作时,如果每个on使用相同的字段连接时只会产生一个mapreduce。
  2. join连接时的优化:当多个表进行查询时,从左到右表的大小顺序应该是从小到大。 原因:hive在对每行记录操作时会把其他表先缓存起来,直到扫描最后的表进行计算
  3. 在where字句中增加分区过滤器。
  4. 当可以使用

    left semi join

    语法时不要使用

    inner join

    前者效率更高。

    原因:对于左表中指定的一条记录,一旦在右表中找到立即停止扫描。

  5. 如果所有表中有一张表足够小,则可置于内存中,这样在和其他表进行连接的时候就能完成匹配,省略掉reduce过程。 设置属性即可实现,

    set hive.auto.covert.join=true;

    用户可以配置希望被优化的小表的大小

    set hive.mapjoin.smalltable.size=2500000;

    如果需要使用这两个配置可置入$HOME/.hiverc文件中。

  6. 同一种数据的多种处理:从一个数据源产生的多个数据聚合,无需每次聚合都需要重新扫描一次。 例如:

    insert overwrite table student select  from employee; insert overwrite table person select from employee;

    可以优化成:

    from employee insert overwrite table student select insert overwrite table person select

     

  7. limit调优:limit语句通常是执行整个语句后返回部分结果。

    set hive.limit.optimize.enable=true;

     

  8. 开启并发执行。 某个job任务中可能包含众多的阶段,其中某些阶段没有依赖关系可以并发执行,开启并发执行后job任务可以更快的完成。设置属性:

    set hive.exec.parallel=true;

     

  9. hive提供的严格模式,禁止3种情况下的查询模式。

    a:当表为分区表时,where字句后没有分区字段和限制时,不允许执行。

    b:当使用order by语句时,必须使用limit字段,因为order by 只会产生一个reduce任务。

    c:限制笛卡尔积的查询。

     

  10. 合理的设置map和reduce数量。
  11. jvm重用。可在hadoop的mapred-site.xml中设置jvm被重用的次数。

=========================结尾=========================

对于hive,优化完成后,可以成倍的提升速度。也可以提高业务的支持,加快数据清洗的速度。

标签: hive 优化 原则 大数据
最后更新:2017年10月12日

jhin

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2024 与服务器一起的日子. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang