zoukankan      html  css  js  c++  java
  • hive优化之参数调优

    1、hive参数优化之默认启用本地模式

    启动hive本地模式参数,一般建议将其设置为true,即时刻启用:

    hive (chavin)> set hive.exec.mode.local.auto;    

    hive.exec.mode.local.auto=false

    2、设置hive执行模式

    hive (default)> set hive.mapred.mode;

    hive.mapred.mode=nonstrict

    参数hive.mapred.mode控制着hive的执行模式,如果设置为strict模式,则hive作业禁止3种类型查询:

    1)分区表没有启用分区过滤字段。

    2)order by没有指定limit限制

    3)笛卡尔积

    3、限制调整

    查询中使用limit限制返回数据行数,但是实际mapreduce任务很多情况已经跑完了整个任务。可以通过配置参数对这种情况进行控制:

    设置hive.limit.optimize.enable=true;将针对查询对元数据进行抽样。

    同时可能还需要设置以下两个参数:

    set hive.limit.row.max.size=100000;

    set hive.limit.optimize.limit.file=10;

    这样设置不好的一点是有些数据可能永远也访问不到。

    4、jvm重用相关设置

    jvm重用是hadoop调优参数的内容,其对hive的性能影响是非常大的,特别是对于针对很多小文件的场景或task特别多的场景,这类场景任务执行的时间都很短。hadoop默认使用派生的jvm执行mapreduce任务,对于jvm的启动时很大的开销,特别针对于task任务比较多的场景。jvm重用可以使jvm实例在同一个job中运行n次,n的值在hadoop的mapred-site.xml文件进行配置:

            <property>

                    <name> mapred.job.reuse.jvm.num.tasks </name>

                    <value>10</value>

            </property>

    也可以在hive cli中通过set设置:

    hive (default)> set mapred.job.reuse.jvm.num.tasks;

    mapred.job.reuse.jvm.num.tasks=1

    hive (default)> set mapred.job.reuse.jvm.num.tasks=10;

    hive (default)> set mapred.job.reuse.jvm.num.tasks;  

    mapred.job.reuse.jvm.num.tasks=10

    这个功能的一个缺点就是会一直占用task插槽不释放,以备重用,直到任务完成才释放。如果在任务过程中出现数据倾斜,则可能task插槽需要等到reduce task任务完成才能释放。

    5、推测执行相关配置

    hadoop的推测执行功能由mapred-site.xml文件中的2个参数决定:

            <property>

                    <name> mapred.map.tasks.speculative.execution </name>

                    <value>true</value>

            </property>

            <property>

                    <name> mapred.reduce.tasks.speculative.execution</name>

                    <value>true</value>

            </property>

    hive本身也有控制推测执行的参数,可以在hive-site.xml文件中配置:

            <property>

                    <name>hive.mapred.reduce.tasks.speculative.execution </name>

                    <value>true</value>

            </property>

    hive中推测执行参数默认值如下:

    hive (default)> set mapred.map.tasks.speculative.execution;

    mapred.map.tasks.speculative.execution=true

    hive (default)> set mapred.reduce.tasks.speculative.execution;

    mapred.reduce.tasks.speculative.execution=true

    hive (default)> set hive.mapred.reduce.tasks.speculative.execution;

    hive.mapred.reduce.tasks.speculative.execution=true

    6、单个mapreduce中运行多个group by

    参数hive.multigroupby.singlemr控制师徒将查询中的多个group by组装到单个mapreduce任务中。如果启用这个优化,那么需要一组常用的group by键:

    7、聚合优化:

    启用参数:hive.map.aggr=true

    8、参数hive.fetch.task.conversion的调优:

    默认值:hive.fetch.task.conversion=minimal

    建议值:set hive.fetch.task.conversion=more;

    9、设置队列优先级

    Set mapreduce.job.queuename=bigdata;

  • 相关阅读:
    二叉排序树的查找和插入操作
    二叉排序树(二叉查找树)- 数据结构和算法73
    线性索引查找
    斐波那契查找(黄金分割法查找)- 数据结构和算法71
    插值查找(按比例查找)- 数据结构和算法70
    序列!序列!- 零基础入门学习Python016
    字符串:格式化
    字符串:各种奇葩的内置方法
    为duilib的MenuDemo增加消息响应,优化代码和显示效果
    为duilib的MenuDemo增加消息响应,优化代码和显示效果
  • 原文地址:https://www.cnblogs.com/wcwen1990/p/7601262.html
Copyright © 2011-2022 走看看