常用的Hive调优参数
--1.设置队列名称参数,这个看公司实际情况,指定队列执行
set mapreduce.job.queuename=root.paas_test;
--设置用户使用队列
set mapred.job.name = HV_INS_ORDER_INFO_D;
– 设置作业名
set hive.cli.print.header=true;
--让CLI打印出字段名称
--2.控制map/reduce的内存和核数,相关堆内存的参数一般不建议设置
--这个参数有时候用的比较多,比如报oom,堆内存溢出等,数量过大,处理慢等可以适当增加这个值;
set mapreduce.map.memory.mb=6144;
set mapreduce.reduce.memory.mb=6144;
set mapreduce.map.cpu.vcores=1;
set mapreduce.reduce.memory.mb=6144;
set mapreduce.reduce.cpu.vcores= 2 ;
--3.控制reduce个数的参数;
set hive.exec.reducers.bytes.per.reducer=1000000000;
--控制redcue处理量的参数
set hive.exec.reducers.max=2999;
--控制单个job最大redcue个数
set mapreduce.job.reduces=10; --或者用老版本的set mapred.reduce.tasks
--直接指定单个job多少个reduce个数
--4.设置map/reduce的task实例的最大失败尝试次数
set mapreduce.map.maxattempts=4; --老版本用:mapred.map.max.attempts
set mapreduce.reduce.maxattempts =4; ---老版本用 :mapred.reduce.max.attempts
--5.设置APPmaster的相关内存/CPU,使用相对较少,一般报appmaster内存溢出可以使用;
set yarn.app.mapreduce.am.resource.mb=6144;
set yarn.app.mapreduce.am.resource.cpu-vcores=2;
--补充即当 AppMaster 失败2次之后,运行的任务将会失败。
Set mapreduce.am.max-attempts=2;(官方默认值)
--6.关于是否开启map/redduce 推测执行的参数,建议跟随集群层面即可
set mapreduce.map.speculative=true ;
set mapreduce.reduce.speculative=true ;
set mapreduce.job.speculative.speculative-cap-running-tasks=0.1 ;
--7.小文件治理参数
set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
--开启小文件合并,以及小文件大小
set hive.merge.mapfiles = true ;
set hive.merge.mapredfiles = true;
set hive.merge.smallfiles.avgsize=32000000;
set hive.merge.size.per.task=25600000;
--控制map的输入大小,实现真正的小文件合并
set mapred.max.split.size=256000000 ;
set mapred.min.split.size=32000000 ;
set mapred.min.split.size.per.node=32000000 ;
set mapred.min.split.size.per.rack=32000000 ;
--8.对于需要并行执行的任务,开启并行
set hive.exec.parallel=true;
--是否开启job并行执行 ,默认false;
SET hive.exec.parallel.thread.number=8;
--同一段sql最多可以并行执行多少作业job
--9.动态分区相关参数
set hive.exec.dynamic.partition =true;
--(默认false),表示开启动态分区功能
set hive.exec.dynamic.partition.mode = nonstrict;
--默认strict模式,表示用户必须指定至少一个静态分区字段,以防用户覆盖所有分区。Nonstrict模式表示允许所有分区都可以直接动态分区;
set hive.exec.max.dynamic.partitions.pernode=100;
--默认100,一般可以设置大一点,比如1000,表示每个maper或reducer可以允许创建的最大动态分区个数,默认是100,超出则会报错
set hive.exec.max.dynamic.partitions =1000;
--表示一个动态分区语句可以创建的最大动态分区个数,超出报错
set hive.exec.max.created.files =10000;
--(默认) 全局可以创建的最大文件个数,超出报错。
--mapjoin优化参数,注意mapjoin的使用场景;
set hive.auto.convert.join=true;
set hive.mapjoin.smalltable.filesize= 25000000;
--groupby参数优化
set hive.map.aggr=true;
--开启mapside聚合,建议开启
set hive.groupby.skewindata= false;
--慎用,尤其和上面参数一起使用时可能造成错误的统计结果
--10.向量化默认,慎用,有时候会变慢;
Set hive.vectorized.execution.enabled=true;
--11.了解即可,关于Hadoop2.x的jvm重用机制的uber模式
set mapreduce.job.ubertask.enable=false;
--是否启用uber功能
set mapreduce.job.ubertask.maxmap=9;
set mapreduce.job.ubertask.maxreduces=1;
set mapreduce.job.ubertask.maxbytes=dfs.block.size;
--12.了解即可本地模式
set hive.exec.mode.local.auto=true;
set hive.exec.mode.local.auto.inputbytes.max=268217728;
set hive.exec.mode.local.auto.tasks.max=10;
--13.了解即可,严格模式
set hive.mapred.mode=nonstrict;
--14.了解即可fetch抓取模式
set hive.fetch.task.conversion=more;
--15.limit限制
set hive.limit.optimize.enable=true;
– 官方默认false,我们集群也是false
set hive.limit.row.max.size= 100000;
--使用limit做数据的子集查询时保证的最大行数据量
set hive.limit.optimize.limit.file= 10;
--在使用limit做数据子集查询时,可抽样的最大文件数
set hive.limit.optimize.fetch.max=50000;
--16.常用命令
--1.手动通过客户端杀死任务
yarn application -kill application_1639740855307_4111216
hadoop job -kill job_1639740855307_4111216
hadoop job -kill-task attempt_1639740855307_4111291_r_000001_1
--2.给在跑的任务换个队列跑
yarn application -movetoqueue application_1639740855307_3934397 -queue root.ga_mid
--18.偶尔可能用的参数
--1.查询加个表头(特殊场景使用)
set hive.cli.print.header=true;
--2.给作业加个名称,统一名称,很香的
set mapred.job.name=''dsbigdata_光哥'';
--3.如果 DROP TABLE/VIEW/PARTITION/INDEX/TEMPORARY FUNCTION 指定了一个不存在的表/视图,不要报错
set hive.exec.drop.ignorenonexistent=false;
--19.分桶表的使用
---1.分桶表导数时使用
1.set hive.enfore.bucketing =true;
2.hive.enforce.sorting=true;
3.hive.optimize.bucketingsorting=true;
--开启smb-mapjoin,主要是如下四个参数;
set hive.optimize.bucketmapjoin = true;
set hive.auto.convert.sortmerge.join=true;
set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;
set hive.optimize.bucketmapjoin.sortedmerge = true;
--20.对于倾斜表,开启skewedjoin倾斜自动优化
set hive.optimize.skewjoin=true;
set hive.skewjoin.key =5000000;
--21分区表操作系列
--修复分区
MSCK REPAIR TABLE table_name ADD/DROP/SYNC PARTITIONS;
msck repair table s_test.ods_star_sample_data_a_d;
---分区表加字段
alter table default.testparquet add columns(c8 string) cascade;
--99.集群相关的参数需要大数据开发了解的参数
--1.表示maptask至少完成50%以上,才开始为reduce申请资源吗,执行reducetask。实际比比如我们公司生产设置的1。
set mapreduce.job.reduce.slowstart.completedmaps=0.5 ;
---2.把一台物理机的多少资源分配给Nodemanager,比如64core/256G的机器,我们分配给nm 48core/195G
set yarn.nodemanager.resource.memory-mb=195*1024*1024*1024
set yarn.nodemanager.resource.cpu-vcores=48
---3.给每个container分配的内存范围,CPU范围
yarn.scheduler.minimum-allocation-mb=3072;
yarn.scheduler.maximum-allocation-mb=64*1024;
yarn.scheduler.minimum-allocation-vcores=1;
yarn.scheduler.maximum-allocation-vcores=32;
---4.严格模式开启
set hive.mapred.mode=strict;
