hive参数配置终极总结

本文详细介绍了Hive的参数配置与优化策略,包括如何通过调整hive-site.xml中的参数来提升查询速度、解决数据倾斜问题及合理分配资源。涵盖执行模式、文件合并、SQL优化、数据倾斜处理、压缩策略及外部jar包引入等多个方面。
摘要由CSDN通过智能技术生成

概要

           我们平时在使用hive执行一些SQL任务时。经常会遇到执行速度很慢,数据倾斜,资源不够用等问题。那是因为我们没有合理的使用hive。hive 的主要配置文件为 conf 中  hive-site.xml,里面包含许多配置参数,灵活的根据业务进行相关的参数配置,可以解决以上问题。下面将介绍hive的全部参数的意义以及如何配置。重要的会标红。

hive参数大全

设置一些基本参数,让hive使用起来更便捷

1、让提示符显示当前库:

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

2.显示查询结果时显示字段名称:

hive>set hive.cli.print.header=true;

但是这样设置只对当前会话有效,重启hive会话后就失效,解决办法:在linux的当前用户目录中,编辑一个.hiverc文件,将参数写入其中:

vi .hiverc


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

关于是否本地运行的参数

    hive.exec.mode.local.auto 

   决定 Hive 是否应该自动地根据输入文件大小,在本地运行(在GateWay运行) 

 hive.exec.mode.local.auto.inputbytes.max 

   如果 hive.exec.mode.local.auto 为 true,当输入文件大小小于此阈值时可以自动在本地模式运行,默认是 128兆。 
    134217728L  
    hive.exec.mode.local.auto.tasks.max 
    如果 hive.exec.mode.local.auto 为 true,当 Hive Tasks(Hadoop Jobs)小于此阈值时,可以自动在本地模式运行。 
    默认值:4

 hive.mapred.local.mem 

Mapper/Reducer 在本地模式的最大内存量,以字节为单位,0为不限制。 

关于文件个数和合并的参数

hive.merge.mapfiles 

  在只有map的作业结束时合并小文件,默认开启true

hive.merge.mapredfiles:

  在一个map/reduce作业结束后合并小文件,

    默认不开启false

hive.merge.size.per.task:

    作业结束时合并文件的大小,默认256MB;

hive.merge.smallfiles.avgsize:

    在作业输出文件小于该值时,起一个额外的map/reduce作业将小文件合并为大文件,小文件的基本阈值,设置大点可以减少小文件个数,注意:需要mapfiles和mapredfiles为true, 默认值是16MB;

mapred.reduce.tasks:

    每个作业的reduce任务数,默认是hadoop client的配置1个;

hive.exec.reducers.bytes.per.reducer:

    每个reducer的大小,

    默认是1G,输入文件如果是10G,那么就会起10个reducer;

hive.exec.reducers.max:

    reducer的最大个数,如果在mapred.reduce.tasks设置为负值,那么hive将取该值作为reducers的最大可能值。当然还要依赖(输入文件大小/hive.exec.reducers.bytes.per.reducer)所得出的大小,取其小值作为reducer的个数,

    hive默认是999;

hive.exec.max.created.files:

    一个mapreduce作业能创建的HDFS文件最大数,默认是100000(十万)

   关于SQL优化的参数

hive.exec.parallel

    hive的执行job是否并行执行,默认不开启false,

    在很多操作如join时,子查询之间并无关联可独立运行,这种情况下开启并行运算可以大大加速。

hive.exec.parallel.thread.number

并行运算开启时,允许多少作业同时计算,默认是8

hive.mergejob.maponly:

    试图生成一个只有map的任务去做merge,前提是支持CombineHiveInputFormat,默认开启true;

hive.auto.convert.join:

    根据输入文件的大小决定是否将普通join转换为mapjoin的一种优化,默认不开启false

hive.mapjoin.smalltable.filesize:

    输入表文件的mapjoin阈值,如果输入文件的大小小于该值,则试图将普通join转化为mapjoin

    默认25MB;

hive.groupby.skewindata 

决定 group by 操作是否支持倾斜的数据。 默认值false

 hive.default.fileformat 

Hive 默认的输出文件格式,与创建表时所指定的相同,可选项为 'TextFile' 、 'SequenceFile' 或者 'RCFile'。 
默认值 TextFile'   

    hive.mapred.mode 

 Map/Redure 模式,如果设置为 strict,将不允许笛卡尔积。 
  默认值 'nonstrict'

  hive.exec.dynamic.partition 

 是否打开动态分区。 默认 false

 hive.exec.dynamic.partition.mode 

打开动态分区后动态分区的模式,有 strict 和 nonstrict 两个值可选,strict 要求至少包含一个静态分区列,nonstrict 无此要求。 

hive.exec.max.dynamic.partitions 

所允许的最大的动态分区的个数。 默认值1000

   hive.exec.max.dynamic.partitions.pernode 

 单个 reduce 结点所允许的最大的动态分区的个数。 默认值 100

关于数据倾斜于资源配置的参数

hive.optimize.skewjoin 

 是否优化数据倾斜的 Join,对于倾斜的 Join 会开启新的 Map/Reduce Job 处理。 默认值 false

hive.join.cache.size:

    在做表join时缓存在内存中的行数,默认25000;

hive.mapjoin.bucket.cache.size:

    mapjoin时内存cache的每个key要存储多少个value,默认100;

  hive.skewjoin.key 

倾斜键数目阈值,超过此值则判定为一个倾斜的 Join 查询。 默认值 1000000    

hive.exec.dynamic.partition:

    在DML/DDL中是否支持动态分区,默认false

hive.skewjoin.mapjoin.map.tasks 

处理数据倾斜的 Map Join 的 Map 数上限。 10000

 hive.skewjoin.mapjoin.min.split 

处理数据倾斜的 Map Join 的最小数据切分大小,以字节为单位,默认为32M。  33554432 

    mapred.min.split.size 

Map Reduce Job 的最小输入切分大小,与 Hadoop Client 使用相同的配置。 默认值  1

 hive.mergejob.maponly 

 是否启用 Map Only 的合并 Job。 默认值 true

 hive.mapjoin.maxsize 

  Map Join 所处理的最大的行数。超过此行数,Map Join进程会异常退出。 默认值1000000

压缩参数

hive.exec.compress.output:

    控制hive的查询结果输出是否进行压缩,压缩方式在hadoop的mapred.output.compress中配置, 默认不压缩false;

hive.exec.compress.intermediate:

    控制hive的查询中间结果是否进行压缩,同上条配置,默认不压缩false;

Job输出结果是否压缩

mapred.output.compress 

是否压缩,默认值false。

mapred.output.compression.type

压缩类型,有NONE, RECORD和BLOCK,默认值RECORD。

mapred.output.compression.codec

压缩算法,默认值org.apache.hadoop.io.compress.DefaultCodec。

map task输出是否压缩

mapred.compress.map.output

是否压缩,默认值false

mapred.map.output.compression.codec

压缩算法,默认值org.apache.hadoop.io.compress.DefaultCodec

hive进入外部jar包

hive需要引入包时?该怎么引入?

一、hive-site.xml中的hive.aux.jars.path

此配置项对于hive server有效,但是是不会作用到hive shell.也就是说即使你在hive节点上配置了这一项,但是对于hive shell来说是无效的(为什么会这样?难道不是服务器配置了,所有的hive shell都能生效吗?搞不懂)。但是在hive-site.xml的模板文件中找不到hive.aux.jars.path的配置,是不是hive正慢慢改变用户放弃配置此属性呢?

注意:1,目前只支持file://也就是本地文件,暂不支持HDFS,也不支持文件夹。2,多个文件使用逗号分隔。3,不能换行

案例:

<property>
 <name>hive.aux.jars.path</name>
 <value>file:///usr/local/service/hive/auxlib/hive-hcatalog-core-2.1.1.jar,file:///usr/local/service/hive/auxlib/hive-hcatalog-pig-adapter-2.1.1.jar,file:///usr/local/service/hive/auxlib/hive-hcatalog-server-extensions-2.1.1.jar,file:///usr/local/service/hive/auxlib/hive-hcatalog-streaming-2.1.1.jar,file:///usr/local/service/hive/auxlib/json-serde-1.3-jar-with-dependencies.jar</value>
</property>

二、hive-env.sh中的HIVE.AUX.JARS.PATH

hive-env.sh中的HIVE.AUX.JARS.PATH对服务器无效,仅对当前hive shell有效,不同的hive shell相互不影响,每个hive shell都需要配置,可以配置成文件夹形式。

注意:1,根据hive启动脚本,此属性应该也只支持file://也就是本地文件,暂不支持HDFS,没有做验证。2,此配置可以配置文件,也可以配置成文件夹,建议配置成文件夹。

可以使用如下配置:export HIVE_AUX_JARS_PATH=$HIVE_HOME/lib

三、使用add jar

使用add jar应该也对服务器无效,仅对当前hive shell有效(没验证过),add jar 建议制定一个HDFS路径,jar包上传到HDFS上,这样比较方便。如果指定是本地路径,则需要确保每个hive shell节点上的对应位置上都放置了需要的jar包,这样操作起来比较麻烦。

可以使用如下命令:

add jar hdfs://ip:9000/user/hive/share/HiveUdf.jar;
delete jar hdfs://ip:9000/user/hadoop/share/HiveUdf.jar;

扫一扫加入大数据公众号和技术交流群,了解更多大数据技术,还有免费资料等你哦

扫一扫加入大数据公众号和技术交流群,了解更多大数据技术,还有免费资料等你哦

扫一扫加入大数据公众号和技术交流群,了解更多大数据技术,还有免费资料等你哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿华田512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值