Hive 配置参数汇总

主要功能 hive配置参数 作用 默认值 应用场景
并发 hive.exec.parallel=true; 多job并发
hive.exec.parallel.thread.numbe=X; 可以并行化的job数 8
输入合并小文件 hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; 执行Map前进行小文件合并。一个data node节点上多个小文件会进行合并,合并文件数由mapred.max.split.size限制的大小决定。
hive.hadoop.supports.splittable.combineinputformat = true; 是否支持可切分的 CombieInputFormat FALSE
小文件 mapreduce.job.split.metainfo.maxsize=-1 java.io.IOException:Split metadata size exceeded 10000000,小文件过多
mapreduce.jobtracker.split.metainfo.maxsize = -1
mapreduce.job.running.map.limit=50000; map数超过50000的job设置:
map数 mapred.min.split.size = X; 每个Map最小输入大小
mapred.max.split.size=X; 每个Map最大输入大小
mapred.min.split.size.per.node=100000000; 一个节点上(datanode)split至少的大小,
mapred.min.split.size.per.rack=100000000; 同一个交换机(rack locality)下split至少的大小
mapreduce.input.fileinputformat.split.maxsize = 256000000; mapred代表的是hadoop旧API,而mapreduce代表的是hadoop新的API。
mapreduce.input.fileinputformat.split.minsize.per.node=256000000;
mapreduce.input.fileinputformat.split.minsize.per.rack=256000000;
reduce数 hive.exec.reducers.bytes.per.reducer = X; 每个reducer处理的文件大小,默认是1GB,调整reduce数目 100000000 生成的文件大小,设置每个reducer处理的数据hive.exec.reducers.bytes.per.reducer=5120000000; insert into table xxx select * from xxx distribute by rand();备注: 设置的参数是生成的文件大小,distribute by rand()保证数据的平均大小是512Mb。
hive.exec.reducers.max 控制最大的reducer的数量, 如果 input / bytes per reduce >max 则会启动这个参数所指定的reduce个数。 这个并不会影响mapre.reduce.tasks参数的设置。默认的max是999 999
hive.mapred.reduce.tasks 这个参数如果指定了,hive就不会用它的estimation函数来自动计算reduce的个数,而是用这个参数来启动reducer。默认是-1(reduce的个数设置其实对执行效率有很大的影响:1)、如果reduce太少: 如果数据量很大,会导致这个reduce异常的慢,从而导致这个任务不能结束,也有可能会OOM 2)、如果reduce太多: 产生的小文件太多,合并起来代价太高,namenode的内存占用也会增大。如果我们不指定mapred.reduce.tasks,hive会自动计算需要多少个reducer。计算的公式: reduce个数 = InputFileSize / bytes per reducer 3)、估算reducer的个数,及计算公式:注意最重要的一句话:int reducers = (int)((totalInputFileSize +bytesPerReducer - 1) / bytesPerReducer)) 生成的文件个数。设置reduce个数 mapred.reduce.tasks=50; insert into table xxx select * from xxx distribute by rand();备注: 设置的参数是生成的文件个数,distribute by rand()保证数据随机分配到50个文件中。
输出合并小文件 hive.merge.mapredfiles = true 正常的map-reduce job后,是否启动merge job来合并reduce端输出的结果,建议开启
hive.merge.mapfiles = true; 正常的map-only job后,是否启动merge job来合并map端输出的结果
hive.merge.size.per.task = X; 合并后文件的大小
hive.merge.smallfiles.avgsize=X; 当输出文件平均大小小于该值,启动新job合并文件 -1
输出压缩 mapred.output.compress=true; 压缩输出
hive.exec.compress.output=true; 为最终输出结果启用压缩
mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec; 输出所用的压缩codec 常见的压缩格式:DEFLATE org.apache.hadoop.io.compress.DefaultCodec gzip org.apache.hadoop.io.compress.GzipCodec bzip org.apache.hadoop.io.compress.BZip2Codec Snappy org.apache.hadoop.io.compress.SnappyCodec org.apache.hadoop.io.compress.DefaultCodec
mapred.output.compression.type=BLOCK; 控制限制使用压缩格式,默认值为RECORD, 即对每一条记录进行压缩, 如果将其改为BLOCK,将针对一组记录进行压缩SqeuenceFile的输出可以使用的压缩类型:NONE,RECORD,BLOCK RECORD
中间过程压缩 hive.exec.compress.intermediate=true; 为map中间输出启用压缩。
mapred.map.output.compression.codec=com.hadoop.compression.lzo.LzoCodec; 一般对于中间输出压缩采用低压缩比,高压缩解压缩速度的压缩算法,如LZO,Snappy org.apache.hadoop.io.compress.DefaultCodec
hive.intermediate.compression.type=BLOCK; RECORD
动态分区 hive.exec.max.created.files=100000; 动态分区属性,全局可以创建的最大文件个数 100000
hive.exec.dynamic.partition.mode = nonstrict; 动态分区的模式,默认strict,表示必须指定至少一个分区为静态分区,nonstrict模式表示允许所有的分区字段都可以使用动态分区。一般需要设置为nonstrict strict
hive.exec.dynamic.partition = true; 是否开启动态分区功能,默认false关闭。使用动态分区时候,该参数必须设置成true; FALSE
hive.exec.max.dynamic.partitions.pernode 在每个执行MR的节点上,最大可以创建多少个动态分区。该参数需要根据实际的数据来设定。比如:源数据中包含了一年的数据,即day字段有365个值,那么该参数就需要设置成大于365,如果使用默认值100,则会报错。 100
hive.exec.max.dynamic.partitions 在所有执行MR的节点上,最大一共可以创建多少个动态分区。
hive.error.on.empty.partition 当有空分区生成时,是否抛出异常。一般不需要设置。 FALSE
groupby负载均衡 hive.groupby.skewindata=true; 负载均衡(一般不建议使用,会有丢数据的风险)数据倾斜时负载均衡,当选项设定为true,生成的查询计划会有两个MRJob。第一个MRJob 中,Map的输出结果集合会随机分布到Reduce中,每个Reduce做部分聚合操作,并输出结果,这样处理的结果是相同的GroupBy Key有可能被分发到不同的Reduce中,从而达到负载均衡的目的;第二个MRJob再根据预处理的数据结果按照GroupBy Key分布到Reduce中(这个过程可以保证相同的GroupBy Key被分布到同一个Reduce中),最后完成最终的聚合操作。
hive.groupby.mapaggr.checkinterval=100000; group的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置
查看 hive.stats.dbclass=counter; 存储临时Hive统计信息的方式
dfs.block.size; 查看集群设置的文件块大小,不能修改,值为134217728,即128mb。
io.compression.codecs; 查看集群的支持的压缩算法.org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.SnappyCodec
数据倾斜优化 hive.auto.convert.join=true /+mAPJOIN(小表名)/ 小表加载到内存中,表的JOIN操作是在Map端且在内存进行的 FALSE 大表 join 小表
hive.optimize.skewjoin=true join过程出现倾斜则优化
hive.skewjoin.key=1000000 join的键对应的记录条数超过这个值则会进行优化
作业 mapreduce.job.name 作业名称
mapreduce.job.priority 作业优先级,VERY_HIGH,HIGH,NORMAL,LOW,VERY_LOW NORMAL
MR ApplicationMaster设置 yarn.app.mapreduce.am.resource.mb MR ApplicationMaster占用的内存量 1536
yarn.app.mapreduce.am.resource.cpu-vcores MR ApplicationMaster占用的虚拟CPU个数 1
mapreduce.am.max-attempts MR ApplicationMaster最大失败尝试次数 2
Map Task mapreduce.map.memory.mb 每个Map Task需要的内存量 1024 MAP YARN 申请内存 4096
mapreduce.map.cpu.vcores 每个Map Task需要的虚拟CPU个数 1
mapreduce.map.maxattempts Map Task最大失败尝试次数 4
Reduce Task mapreduce.reduce.memory.mb 每个Reduce Task需要的内存量 1024 REDUCE YARN 申请内存
mapreduce.reduce.cpu.vcores 每个Reduce Task需要的虚拟CPU个数 1
mapreduce.reduce.maxattempts Reduce Task最大失败尝试次数 4
mapreduce.map.speculative 是否对Map Task启用推测执行机制 FALSE
mapreduce.reduce.speculative 是否对Reduce Task启用推测执行机制 FALSE
mapreduce.map.sort.spill.percent Map阶段溢写文件的阈值(排序缓冲区大小的百分比) 0.8
mapreduce.reduce.shuffle.parallelcopies Reduce Task启动的并发拷贝数据的线程数目 5
队列 mapreduce.job.queuename 作业提交到的队列 default
io mapreduce.task.io.sort.mb 任务内部排序缓冲区大小 100
io.sort.mb = X; map输出缓冲区大小 100
io.sort.factor = X; map端或reduce端排序文件时,每次对多合并流数,默认值为10 10
yarn yarn.app.mapreduce.am.command-opts=-Xmx8192m beyond virtual memory limits
yarn.app.mapreduce.am.resource.mb=9216
JVM mapreduce.map.java.opts=-Xmx3572M; 一般 JVM 参数可以是 Yarn 申请内存的 80%, 如果 都比较大,可以酌情 MAP JVM 内存
mapreduce.reduce.java.opts=-Xmx4096M; REDUCE JVM 内存
yarn.app.mapreduce.am.resource.mb=2000; AM YARN 申请内存
yarn.app.mapreduce.am.command-opts=-Xmx1524m; AM JVM 内存
矢量查询(Vectorized query) hive.vectorized.execution.enabled = true; 每次处理数据时会将1024行数据组成一个batch进行处理,而不是一行一行进行处理,这样能够显著提高执行速度。
hive.vectorized.execution.reduce.enabled = true;
TEZ hive.execution.engine=tez; Tez 是一个开源的支持DAG作业的计算框架,它来源于MapReduce框架。
set hive.mapjoin.hybridgrace.hashtable=false Hive2.1.0的版本有一个BUG。使用Tez的时候需要设置
COST BASED QUERY OPTIMIZATION set hive.cbo.enable=true; COST BASED QUERY OPTIMIZATION可以优化hive的每次查询。如果我们想要使用CBO,需要通过HIVE的分析模式来收集表的不同统计数据,我们可以通过下面的命令来进行:analyze table tweets compute statistics for columns;
set hive.compute.query.using.stats=true;
set hive.stats.fetch.column.stats=true;
set hive.stats.fetch.partition.stats=true;

资料:
https://zh.hortonworks.com/blog/5-ways-make-hive-queries-run-faster/
Hive官网:https://cwiki.apache.org/confluence/display/Hive/AdminManual+Configuration
Hadoop官网:http://hadoop.apache.org/docs/current/
set -v; 查看hive的所有默认配置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,335评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,895评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,766评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,918评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,042评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,169评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,219评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,976评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,393评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,711评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,876评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,562评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,193评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,903评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,699评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,764评论 2 351

推荐阅读更多精彩内容