首先注意的是在Hadoop Streaming 中可以通过-D mapred.map.tasks=(你想要设定的map数量) 来确定map任务的个数,
goal_num = mapred.map.tasks
但是这里需要注意的是,只有在这个值大于hadoop中计算的默认个数default_num的时候才会有效,默认个数的计算方式如下:
default_num = total_size / block_size;
此外,可以通过改变mapred.min.split.size设置每个task处理文件的大小,但是只有在这个值大于block_size时才会生效
split_size= max (mapred.min.split.size,block_size)
split_num = total_size /split_size
在计算map的个数时:
compute_map_num = min(split_num ,max (default_num,goal_num))//
这个是参考的https://blog.csdn.net/dr_guo/article/details/51150278 感觉应该用错误,因为当goal_num设置为一个较大的数时,计算的compute_map_num为goal_num
这里可以看出split_num <= default_num,所以上述值其实就为split_num,
整理一下 :
split_num 肯定会小于或等于默认的分块大小,即:split_num <=default_num
而当期望的map个数goa