hive优化参数配置

配置参数说明

--mapjoin
set hive.auto.convert.join=true;
set hive.auto.convert.join.noconditionaltask=true;
set hive.auto.convert.join.noconditionaltask.size=10000000;
set hive.mapjoin.smalltable.filesize=200000000;

--输入小文件合并,若读取小文件较多,则设置在map端进行小文件合并参数
set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;-- 执行Map前进行小文件合并
set hive.hadoop.supports.splittable.combineinputformat = true;
--其中一种方版本
set mapreduce.input.fileinputformat.split.maxsize = 256000000;
set mapreduce.input.fileinputformat.split.minsize =256000000;
set mapreduce.input.fileinputformat.split.minsize.per.node=256000000;
set mapreduce.input.fileinputformat.split.minsize.per.rack=256000000;
--另一种版本(老版本,最好都设置)
SET mapred.max.split.size = 256000000; //设置mapper拆分大小
SET mapred.min.split.size = 256000000;
SET mapred.min.split.size.per.node = 256000000;
SET mapred.min.split.size.per.rack = 256000000;

--开启输出小文件合并(rcfile和orc需要特殊设置才能进行文级别的合并,parquet、textfile、sequencefile默认进行文件级别的合并)
set hive.merge.mapfiles = true;--开启只有map(map-only)操作结束时小文件输出合并
set hive.merge.mapredfiles = true;--开启有MR操作结束时小文件输出合并
set hive.merge.size.per.task = 256000000;--合并后每个文件的大小
set hive.merge.smallfiles.avgsize=256000000;--当输出文件的平均大小小于256000000时,启动一个独立的MR任务进行文件合并,触发小文件合并的阀值
set hive.merge.orcfile.stripe.level=false; --当这个参数设置为true,orc文件进行stripe Level级别的合并,当设置为false,orc文件进行文件级别的合并。
set hive.merge.rcfile.block.level=false;--当这个参数设置为true,rcfile文件进行block Level级别的合并,当设置为false,rcfile文件进行文件级别的合并。

--开启并发
SET hive.exec.parallel = true; //开启任务并行执行
SET hive.exec.parallel.thread.number = 16; //同一个sql允许并行任务的最大线程数

--设置reduce限制,以下只设置其中一个即可
--设置每个reducer处理的数据(默认是1G,设置为5G)
set hive.exec.reducers.bytes.per.reducer=5120000000;
--设置reduce个数
set mapred.reduce.tasks=50;

--map或reduce执行缓慢设置
--map
set mapreduce.map.cpu.vcores=1;
SET mapreduce.map.memory.mb=4096;
SET mapreduce.map.java.opts=-Xmx3572M;
--reduce
--REDUCE YARN 申请内存
set mapreduce.reduce.cpu.vcores=1;
set mapreduce.reduce.memory.mb=4096;
--REDUCE JVM 内存
set mapreduce.reduce.java.opts=-Xmx3572M;

--join数据倾斜
set hive.optimize.skewjoin=true;
--groupby数据倾斜优化
set hive.groupby.skewindata=true;

--groupby时开启map端部分聚合,相当于Combiner
set hive.map.aggr=true;

--开启MR中间结果压缩
set hive.exec.compress.intermediate=true;--开启hive中间传输数据压缩功能
set mapred.map.output.compression.codec= org.apache.hadoop.io.compress.SnappyCodec
--开启MR最终输出Reduce输出压缩
set hive.exec.compress.output=true;  --开启hive最终输出数据压缩功能
set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
set mapred.output.compression.type=BLOCK;--设置mapreduce最终数据输出压缩为块压缩,只有SEQUENCEFILE格式需要设置

--设置创建文件的格式,例如: create table t1 as select * from t2;
SET hive.default.fileformat = orc;

--动态分区
SET hive.exec.dynamic.partition=true; --是否允许动态分区
SET hive.exec.dynamic.partition.mode=nostrict; --分区模式设置
SET hive.exec.max.dynamic.partitions=100000; --允许动态分区的最大数量
SET hive.exec.max.dynamic.partitions.pernode =10000; --单个节点上的mapper/reducer允许创建的最大分区

--向量化执行
set hive.vectorized.execution.enabled=TRUE;
--开启mapreduce的递归查询模式
set mapreduce.input.fileinputformat.input.dir.recursive=true


--频繁GC
--GC(Garbage Collecting)是JVM特有垃圾回收机制;在Hadoop集群应用程序运行时,如果堆内存设置小或者小文件太多,都会引发频繁的GC,浪费计算资源并导致任务执行时间长甚至失败。
--MAP阶段GC时间40%以上,OPTS参数调整:
set mapreduce.map.cpu.vcores=$[目前值]*2
set mapreduce.map.memory.mb =$[目前值]*2
set mapreduce.map.java.opts=$[目前值] *2
--REDUCE阶段GC时间40%以上,OPTS参数调整:
set mapreduce.reduce.cpu.vcores=$[目前值]*2
set mapreduce.reduce.memory.mb=$[目前值]*2
set mapreduce.reduce.java.opts=$[目前值]*2

配置示例

demo1:

--mapjoin
set hive.auto.convert.join=true;
set hive.auto.convert.join.noconditionaltask=true;
set hive.auto.convert.join.noconditionaltask.size=10000000;
set hive.mapjoin.smalltable.filesize=200000000;
--若读取小文件较多,则设置在map端进行小文件合并参数
set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
set hive.hadoop.supports.splittable.combineinputformat = true;
set mapreduce.input.fileinputformat.split.maxsize = 256000000;
set mapreduce.input.fileinputformat.split.minsize.per.node=256000000;
set mapreduce.input.fileinputformat.split.minsize.per.rack=256000000;
--配置MR任务结束后进行文件合并
set hive.merge.mapfiles = true;
set hive.merge.mapredfiles = true;
set hive.merge.size.per.task = 256000000;
set hive.merge.smallfiles.avgsize=256000000;
set hive.merge.orcfile.stripe.level=false; --当这个参数设置为true,orc文件进行stripe Level级别的合并,当设置为false,orc文件进行文件级别的合并。
set hive.merge.rcfile.block.level=false;--当这个参数设置为true,rcfile文件进行block Level级别的合并,当设置为false,rcfile文件进行文件级别的合并。

SET hive.exec.parallel = true;
SET hive.exec.parallel.thread.number = 16;
SET mapred.max.split.size = 256000000;
SET mapred.min.split.size.per.node = 256000000;
SET mapred.min.split.size.per.rack = 256000000;
--设置reduce限制
set hive.exec.reducers.bytes.per.reducer=5000000000;
--map或reduce执行缓慢设置
SET mapreduce.map.memory.mb=4096;
SET mapreduce.map.java.opts=-Xmx3572M;
set mapreduce.reduce.memory.mb=4096;
set mapreduce.reduce.java.opts=-Xmx3572M;
--数据倾斜
--join数据倾斜
set hive.optimize.skewjoin=true;
--groupby数据倾斜优化
set hive.groupby.skewindata=true;

--启用压缩
SET mapred.output.compress = true;
SET hive.exec.compress.output = true;
SET hive.default.fileformat = orc;

demo2:

--mapjoin
set hive.auto.convert.join=true;
set hive.auto.convert.join.noconditionaltask=true;
set hive.auto.convert.join.noconditionaltask.size=10000000;
set hive.mapjoin.smalltable.filesize=200000000;
--若读取小文件较多,则设置在map端进行小文件合并参数
set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
set hive.hadoop.supports.splittable.combineinputformat = true;
set mapreduce.input.fileinputformat.split.maxsize = 2560000000;
set mapreduce.input.fileinputformat.split.minsize.per.node=2560000000;
set mapreduce.input.fileinputformat.split.minsize.per.rack=2560000000;

SET mapred.max.split.size = 2560000000;
SET mapred.min.split.size.per.node = 2560000000;
SET mapred.min.split.size.per.rack = 2560000000;


--配置MR任务结束后进行文件合并
set hive.merge.mapfiles = true;
set hive.merge.mapredfiles = true;
set hive.merge.size.per.task = 2560000000;
set hive.merge.smallfiles.avgsize=2560000000;
set hive.merge.orcfile.stripe.level=false; 
set hive.merge.rcfile.block.level=false;

SET hive.exec.parallel = true;
SET hive.exec.parallel.thread.number = 32;
--设置reduce限制
set hive.exec.reducers.bytes.per.reducer=5000000000;
--map或reduce执行缓慢设置
SET mapreduce.map.memory.mb=8192;
SET mapreduce.map.java.opts=-Xmx7186M;
set mapreduce.reduce.memory.mb=8192;
set mapreduce.reduce.java.opts=-Xmx7186M;
--数据倾斜
set hive.optimize.skewjoin=true;
--启用压缩
SET mapred.output.compress = true;
SET hive.exec.compress.output = true;
SET hive.default.fileformat = orc;
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值