发现这个作者总结的很好,大家直接去原作者下学习吧~原文链接:https://blog.csdn.net/qq_26442553/article/details/99438121
如果对于Hive调优,想通过控制map个数进行调优,首先确定集群是否启动了压缩,且压缩的算法是否直接文件切分,然后再确定集群配置的默认的hive.input.format是什么实现类,不同实现类对于split的算法不同,当然控制map的参数也不同。所以对于控制map个数调优远远不是网上很多人说的那么简单。
————————————————
我总结的还待改进:
dfs.block.size=256 集群块的大小
total_size 每个文件的大小;
default_num = total_size/dfs.block.size ;
default_num = max(default_num,集群默认2)
可以根据map.mapred.task 来指定map数量,前提是,这个数量大于split_num 生效;
还有两个参数 map.min.split.size 、 map.max.spit.size ;
如果split_size= dfs.block.size > map.min.split.size && dfs.block.size<map.max.spit.size 则用dfs.block.size
否则用 map.min.split.size 、 map.max.spit.size ;
split_num = total_size/split_size ;
compute_map_num = split_num
input_file_num 文件的个数,每一个map处理的数据是不能跨越文件的;m 个数一定>=input_file_num
m个数= max(compute_map_num, input_file_num)