• 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;
  • 相关阅读:
    SpringBoot梳理一(快速上手及常用配置)
    C# .NET写入记事本(规范版)
    PhpStorm安装及汉化
    C# .NET发送邮件方法
    Maven安装教程
    plsql连接Oracle数据库安装及配置
    Mysql常用SQL语句整理
    C#字符串处理和时间格式化整理
    PHP字符串处理和时间格式化整理
    pandas的小技巧
  • 原文地址:https://www.cnblogs.com/luogankun/p/4125081.html
Copyright © 2020-2023  润新知