Hive常用性能调优&&常见问题参考&&MR作业调优

设置队列

Hive中所有MapReduce作业都提交到队列queue1中,对本次启动的会话有效,下次启动需要重新配置

hive --hiveconf mapreduce.job.queuename=queue1

设置执行引擎

set hive.execution.engine=mr;
set hive.execution.engine=spark;

控制Hive中map的数量

hive.merge.mapfiles=true//合并map端输出的结果
mapreduce.map.memory.mb=8192  // 设置申请map资源  10G内存
mapreduce.map.cpu.vcores=1 //设置申请cpu资源(需要在Yarn配置)
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;执行Map前进行小文件合并

map数量由三个配置决定:
mapred.min.split.size.per.node, 一个节点上split的至少的大小
mapred.min.split.size.per.rack 一个交换机下split至少的大小
mapred.max.split.size 一个split最大的大小

主要是把输入目录下的大文件分成多个map的输入, 并合并小文件, 做为一个map的输入。
具体的原理是下述三步:
a、根据输入目录下的每个文件,如果其长度超过mapred.max.split.size,以block为单位分成多个split(一个split是一个map的输入),每个split的长度都大于mapred.max.split.size, 因为以block为单位, 因此也会大于blockSize, 此文件剩下的长度如果大于mapred.min.split.size.per.node, 则生成一个split, 否则先暂时保留.
b、现在剩下的都是一些长度效短的碎片,把每个rack下碎片合并, 只要长度超过mapred.max.split.size就合并成一个split, 最后如果剩下的碎片比mapred.min.split.size.per.rack大, 就合并成一个split, 否则暂时保留.
c、把不同rack下的碎片合并, 只要长度超过mapred.max.split.size就合并成一个split, 剩下的碎片无论长度, 合并成一个split

控制Hive中reduce数量

hive.merge.mapredfiles=true//合并reduce端输出的结果
mapred.reduce.tasks=3 (强制指定reduce的任务数量)
hive.exec.reducers.bytes.per.reducer(每个reduce任务处理的数据量,默认256000000)
hive.exec.reducers.max(每个任务最大的reduce数,默认为1009)
计算reducer数的公式很简单N=min( hive.exec.reducers.max ,总输入数据量/ hive.exec.reducers.bytes.per.reducer ) 

只有一个reduce的场景:
  a、没有group by 的汇总
  b、order by
  c、笛卡尔积

数据倾斜

set hive.exec.reducers.max=200;
set mapred.reduce.tasks= 200;---增大Reduce个数
set hive.groupby.mapaggr.checkinterval=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值