美文网首页
Hive优化方法

Hive优化方法

作者: 小北觅 | 来源:发表于2018-10-14 22:53 被阅读48次

    ①join连接时的优化:当三个或更多的表进行join连接时,如果每个on使用相同的字段连接时只会产生一个MapReduce job。
    ②join连接时的优化:当多个表进行查询时,从左到右表的大小顺序应该是从小到大。 原因:hive在对每行记录操作时会把其他表先缓存起来,直到扫描最后的表进行计算。

    tips: 用户并非总是要将最大的表放置在查询语句最后面,因为Hive提供了一个“标记”机制来显式地告知查询优化器哪张表是大表。
    /*+STREAMTABLE(tablename)*/

    ③在where字句中增加分区过滤器。

    ④当可以使用

    left semi join

    语法时不要使用

    inner join

    前者效率更高。

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

    tips: LEFT SEMI JOIN 的限制是, JOIN 子句中右边的表只能在ON 子句中设置过滤条件,在 WHERE 子句、SELECT 子句或其他地方过滤都不行。

    ⑤如果所有表中有一张表足够小,则可置于内存中,Hive可以在map端执行连接过程(map-side JOIN),这是因为Hive可以和内存中的小表进行逐一匹配,从而省略掉常规连接操作所需要的reduce过程。 设置属性即可实现:

    set hive.auto.covert.join=true;

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

    set hive.mapjoin.smalltable.size=2500000;

    如果需要使用这两个配置可置入$HOME/.hiverc文件中。
    Hive对于右外连接和全外连接不支持这个优化。

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

    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

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

    set hive.limit.optimize.enable=true;

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

    set hive.exec.parallel=true;

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

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

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

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

    ⑩合理的设置map和reduce数量。

    11:JVM重用。可在hadoop的mapred-site.xml中设置JVM被重用的次数。

    12:使用explain和explain extended学习Hive是如何将查询转化为MapReduce任务的。

    参考资料:https://blog.link-lin.cn/

    相关文章

      网友评论

          本文标题:Hive优化方法

          本文链接:https://www.haomeiwen.com/subject/paitzftx.html