新旧版本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.
- 注意一般来说这四个参数的配置结果大小要满足如下关系。
max.split.size >= min.split.size >= min.size.per.rack>= min.size.per.node
- 这四个参数的作用优先级分别如下
max.split.size <= min.split.size <= min.size.per.rack <= min.size.per.node
总结:
对于Hive如果想通过控制map个数进行调优,首先确定集群是否启动了压缩,且压缩的算法是否支持文件切分,然后再确定集群配置的默认的hive.input.format是什么实现类,不同实现类对于split的算法不同,当然控制map的参数也不同。所以对于控制map个数调优远远不是网上很多人说的那么简单。
7万+

被折叠的 条评论
为什么被折叠?



