概要

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:

注意:需要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:

默认是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:

则试图将普通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:

默认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;