hive map数量控制

新旧版本map数量获取区别

  • Hadoop旧版中InputSplit的个数由下面三个参数决定:

    goalSize:totalSize/numSpilt.totalSize为文件大小,numSplit为用户设定的map task个数,默认为1.
    minSize:InputSplit的最小值,由配置参数 mapred.min.split.size,默认为1.
    blockSize:HDFS中块的大小.
    splitSize = max(minSize,min(goalSize,blockSIze))

  • 新版:

    maxSize:由配置参数mapred.max.split.size确定,已经不再考虑用户设定的map task个数.
    minSize:InputSplit的最小值,由配置参数 mapred.min.split.size,默认为1.
    blockSize:HDFS中块的大小.
    splitSize = max(minSize,min(maxSize,blockSIze))

    splitSize = max(mapred.min.split.size, min(mapred.max.split.size, dfs.block.size))

map数量

mapred.min.split.size 或者 mapreduce.input.fileinputformat.split.minsize。
mapred.max.split.size 或者 mapreduce.input.fileinputformat.split.maxsize。
mapred.min.split.size.per.rack 或者 mapreduce.input.fileinputformat.split.minsize.per.rack。
mapred.min.split.size.per.node 或者 mapreduce.input.fileinputformat.split.minsize.per.node。

set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; --hive0.5开始就是默认值,执行map前进行小文件合并

set mapred.max.split.size=256000000 --集群默认值
set mapred.min.split.size=10000000 --集群默认值
set mapred.min.split.size.per.node=8000000 --每个节点处理的最小split
set mapred.min.split.size.per.rack=8000000 --每个机架处理的最小slit.

  1. 注意一般来说这四个参数的配置结果大小要满足如下关系。

max.split.size >= min.split.size >= min.size.per.rack>= min.size.per.node

  1. 这四个参数的作用优先级分别如下

max.split.size <= min.split.size <= min.size.per.rack <= min.size.per.node

总结:

对于Hive如果想通过控制map个数进行调优,首先确定集群是否启动了压缩,且压缩的算法是否支持文件切分,然后再确定集群配置的默认的hive.input.format是什么实现类,不同实现类对于split的算法不同,当然控制map的参数也不同。所以对于控制map个数调优远远不是网上很多人说的那么简单。

参考
真正让你明白Hive参数调优系列1:控制map个数与性能调优参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值