zoukankan      html  css  js  c++  java
  • Hive参数层面常用优化

    1、hive数据仓库权限问题:

    set hive.warehouse.subdir.inherit.perms=true;

    2、HiveServer2的内存

    连接的个数越多压力越大,可以加大内存;可以通过-Xmx设置,在脚本中设置:-Xmx=2048m 甚至 -Xmx=4g

    3、关闭推测式任务:默认是打开的

    set mapreduce.reduce.speculative=false; 
    set mapred.map.tasks.speculative.execution=false;
    set mapred.reduce.tasks.speculative.execution=false;

    4、客户端: 默认是关闭的

    显示当前数据库:

    set hive.cli.print.current.db = true; 

    显示头信息:

    set hive.cli.print.header = true;

    5、并行执行

    每个查询被hive转化成一个或者多个stage,一个stage就是一个mapreduce作业;如果一个job有多个stage,并且每个stage是依赖的,那么这个job就不可以并行执行;如果stage之间关联性不大,则可以并行化执行,减少执行时间。并行数视集群而定,越大越好。

    set hive.exec.parallel=true;    //默认是关闭的
    set hive.exec.parallel.thread.number=16;   //默认是8 

    对比执行时间:

    set hive.exec.parallel=false;
    select t1.event_time,t2.event_time,t3.event_time from( select ordernumber, max(event_time) as event_time from order_created group by ordernumber ) t1 left outer join ( select ordernumber, max(event_time) as event_time from order_picked group by ordernumber ) t2 on t1.ordernumber = t2.ordernumber left outer join ( select ordernumber, max(event_time) as event_time from order_shipped group by ordernumber ) t3 on t1.ordernumber = t3.ordernumber;

    一共5个mr job,job一个个的按顺序执行,一共花费94.974s

    set hive.exec.parallel=true;
    set hive.exec.parallel.thread.number=16;
    select t1.event_time,t2.event_time,t3.event_time from( select ordernumber, max(event_time) as event_time from order_created group by ordernumber ) t1 left outer join ( select ordernumber, max(event_time) as event_time from order_picked group by ordernumber ) t2 on t1.ordernumber = t2.ordernumber left outer join ( select ordernumber, max(event_time) as event_time from order_shipped group by ordernumber ) t3 on t1.ordernumber = t3.ordernumber;

    一共5个mr job,其中有3个job同时启动并行执行,一共花费47.32s

    7、Local Mode:小表在本地执行,最好是关闭

    set hive.exec.mode.local.auto=true;

    8、通过explain查看执行计划,查看有几个stage以及执行流程

    explain select * from page_views;
    explain extended select * from page_views;

    9、队列设置:往指定的队列提交任务

    set mapred.queue.name = hive
    set mapred.job.queue.name = hive

    有些版本需要两个都设置才好用,设置一个还不好使

    设置任务的优先级别:

    set mapred.job.priority = HIGH

    10、JVM重用

    测试用例:3台虚拟机,内存512M,5000个小文件大小约8G,不重用JVM耗时约1个小时,重用JVM耗时约35分钟;

    结论:对于大量小文件的job,开启JVM重用可减少运行时间;

    set mapred.job.reuse.jvm.num.tasks = 15;

    每个jvm执行多少个task,默认为1表示一个jvm运行一个task后就销毁,-1表示无限制;该参数也不是越大越好,建议设置到15-20个就够了;

    11、分桶

    set hive.enforce.bucketing=true;
    set hive.enforce.sorting=true;
  • 相关阅读:
    一个好的时间函数
    Codeforces 785E. Anton and Permutation
    Codeforces 785 D. Anton and School
    Codeforces 510 E. Fox And Dinner
    Codeforces 242 E. XOR on Segment
    Codeforces 629 E. Famil Door and Roads
    Codeforces 600E. Lomsat gelral(Dsu on tree学习)
    Codeforces 438D The Child and Sequence
    Codeforces 729E Subordinates
    【ATcoder】D
  • 原文地址:https://www.cnblogs.com/luogankun/p/4125081.html
Copyright © 2011-2022 走看看