HIVE参数配置
--查看参数使用:set 或者set -v;
--设置参数使用:set key=value;
--设置reduce个数(默认-1)
mapreduce.job.reduces=-1
--控制最大的reducer的数量(默认1009)
hive.exec.reducers.max=1009
--每个reduce处理的数据量(默认300000000)
hive.exec.reducers.bytes.per.reducer=256000000
--设置任务名称,方便查找监控
mapred.job.name=xxx
example:
这里的${statis_date}不要加引号,否则无法识别
mapred.job.name=xxx_${statis_date}
分区中partition(statis_date='${statis_date}')需要加。
create table xxx_${statis_date}如果表被引用的话${statis_date}也不要添加引号
mapreduce.input.fileinputformat.split.minsize=1
mapreduce.input.fileinputformat.split.minsize.per.rack=1
mapreduce.input.fileinputformat.split.minsize.per.node=1
mapreduce.input.fileinputformat.split.maxsize=256000000
--数据类型校验
hive.typecheck.on.insert=true
-- 除去表名(默认是true,改为false即可)
hive.resultset.use.unique.column.names=true
--合并小文件(每个文件对应一个map,把小文件合并成大文件可以减少map数量)
--map的个数 == 输入文件的个数
--合理合并小文件,减少map个数
--合并map输出文件
hive.merge.mapfiles=true
--合并reduce输出文件
hive.merge.mapredfiles=false
--合并后文件的大小
hive.merge.size.per.task=256000000
--决定是否使用map端join,如果关联表有一个小于这个参数的配置则自动开map端join
hive.mapjoin.smalltable.filesize=25000000
--执行select是否运行mapreduce参数设置(
more(默认值):简单查询不走mapreduce;
minimal:任何简单select都会走map/reduce
none:任何select都不会走map/reduce
)
hive.fetch.task.conversion=more
--配置mapreduce计算引擎
set hive.execution.engine=mr
--配置spark计算引擎
set hive.execution.engine=spark;
--配置tez 计算引擎
set hive.execution.engine=tez;
-- 是否允许并行执行sql,默认不允许(允许的前提是多个sql不存在前后关系)
hive.exec.parallel=false
--并行执行线程个数,默认8个
hive.exec.parallel.thread.number=8
--设置是否自动开启本地模式,把sql转化为mapreduce不再发送到yarn上执行,而是在开启hiveserver2的机器上运行
set hive.exec.mode.local.auto=true
--本地模式容忍的最大输入文件字节数
set hive.exec.mode.local.auto.inputbytes.max=134217728
--本地模式容忍的最大文件个数
set hive.exec.mode.local.auto.input.files.max=4
--动态导入分区数据参数配置
-- 是否允许动态指定partition,如果允许的话,那么我们修改内容的时候可以不指定partition的值
hive.exec.dynamic.partition=true
-- 动态partition模式,strict模式要求至少给定一个静态的partition值。nonstrict允许全部partition为动态的值
hive.exec.dynamic.partition.mode=nonstrict
--每个mapper和reducer所能创建的最大动态分区数,如果超出这个值则会报错,可不进行设置
hive.exec.max.dynamic.partitions.pernode=100
--一个动态分区创建语句可以创建的最大分区数,超出则报错。可不进行设置
hive.exec.max.dynamic.partitions=1000
-- 在mr程序中最大创建的hdfs文件个数
hive.exec.max.created.files=100000
-- 压缩,设置是否压缩(最终输出结果)
--默认压缩格式deflate(设置为false即不进行压缩)
set hive.exec.compress.output=true
-- 压缩成gz格式( 设置压缩Reduce类型输出)
SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec;
-- 压缩成bz2格式( 设置压缩Reduce类型输出)
SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec;
-- 压缩成Snappy格式( 设置压缩Reduce类型输出)
SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
-- 压缩成LZO格式( 设置压缩Reduce类型输出)
SET mapreduce.output.fileoutputformat.compress.codec= com.hadoop.compression.lzo.LzoCodec;
-- 压缩成Lzop格式( 设置压缩Reduce类型输出)
SET
mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzopCodec;
--中间结果压缩(map输出压缩)
--查看编解码器
SET dfs.image.compression.codec
dfs.image.compression.codec=org.apache.hadoop.io.compress.DefaultCodec
--开启中间是否进行压缩
SET hive.exec.compress.intermediate=TRUE
--设置编解码格式
SET mapred.output.compression.type=BLOCK|RECORD|NONE
--map配置压缩格式
SET mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
SET mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.GzipCodec;
SET mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.BZip2Codec;
SET mapreduce.map.output.compress.codec=com.hadoop.compression.lzo.LzoCodec;
SET mapreduce.map.output.compress.codec=com.hadoop.compression.lzo.LzopCodec;
--开启最终结果压缩(mapred-site.xml)
SET hive.exec.compress.output=true
--因为Hive底层用的是mapreduce,也可以直接在hadoop中对mapred-site.xml中进行配置
<property>
<!--设置map端是否开启压缩-->
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
<property>
<!--设置map端压缩格式-->
<name>mapreduce.map.output.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<property>
<!--设置mapreduce端是否开启压缩-->
<name>mapreduce.output.fileoutputformat.compress</name>
<value>true</value>
</property>
<property>
<!--设置mapreduce端压缩格式-->
<name>mapreduce.output.fileoutputformat.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
hive.exec.compress.intermediate=false
hive.exec.check.crossproducts=true
-- 当启用动态hive的时候,如果插入的partition为空,是否抛出异常信息
hive.error.on.empty.partition=false
显示数据库名字需设置:
set hive.cli.print.current.db=true
老版本hive中如果在命令行进行查询需要看到字段,需进行设置(默认false):
set hive.cli.print.header=true
--是否开启自动的map端join
hive.auto.convert.join=true
--设置order by 执行时,是否严格模式
hive.mapred.mode=nonstrict/strict
--查看当前堡垒机hive有多少版本
change_hive_version
一个标准hive任务常用的配置项(优化)
-- 设置作业名
set mapred.job.name = SOR_EVT_TBL_FB_CUST (${hivevar:statis_date});
-- 每个Map最大输入大小
set mapred.max.split.size = 300000000;
-- 每个Map最小输入大小
set mapred.min.split.size = 100000000;
-- 执行Map前进行小文件合并
set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
-- hive自动根据sql,选择使用common join或者map join
set hive.auto.convert.join = false;
-- 在Map-only的任务结束时合并小文件
set hive.merge.mapfiles = true;
-- 在Map-Reduce的任务结束时不合并小文件
set hive.merge.mapredfiles = false;
-- 合并文件的大小
set hive.merge.size.per.task = 300000000;
-- 添加jar包
USE fdm_sor;
add jar /home/bigdata/software/hive/ext-lib/suning-hive-inputformat.jar;