hadoop 2.2.0 关于map和reduce的个数的设置

关于hadoop中的map过程,个人理解是每个map系统会开启一个JVM进程来处理,map之间相互并行,map函数内串行。这样的想法是否正确?函数

因为想在hadoop集群上算一个初始输入数据很少,可是计算很复杂的程序,但愿经过mapreduce来达到并行计算的目的。能够经过job.setNumReduceTasks(0);语句设置reduce个数为0,只使用map来计算。可是设置map的个数时遇到了问题:新的API中job没有相似setNumMapTasks()这样的方法; 在运行时加入参数-D mapreduce.map.tasks=2这样的参数也无效。oop

查过好多资料,好像是说map的个数取决于block_sizetotal_size等参数。可是都说的是1.x版本的设置,hadoop 2.2.0上并无找到mapred.map.tasksmapred.min.split.size等对应的设置方法。大数据

因为个人输入文件只有一个文件,并且不算是“大数据”,只是单纯想在hadoop上实现并行,因此我但愿可以设置一个最少的map数目,以便能在各个计算节点上并行。请问我应该如何设置?code

 

 

 

事隔10天后无人回答,再次自问自答(— . —!)。最近看到一本书,上面介绍自定义InputFormat来控制map个数以及存储位置。稍微看了下FileInputFormat的接口,发现竟然有setMaxInputSplitSize()这个静态方法。(本身之前怎么没发现!! 也怪本身懒,不肯意去找) 在run方法中加了这么一句FileInputFormat.setMaxInputSplitSize(job, 1048576), 再次运行貌似有效,程序生成了6个map来运行。orm

但感到无法解释的有两点:接口

1.此处设置的值为1048576(1M),个人输入文件有20.95MB,若是最大份片大小为1M的话应该有20多个map。其中必然有更细致的判断,还得研究如下相应处理的代码才能解决;
2. 6个map全在同一个节点上运行,没有分到不一样节点上;进程

个人环境为hadoop 2.2.0,我曾经试过修改dfs.blocksize等配置参数,可是彷佛都没有生效。不知道为何会出现配置参数无效的状况。hadoop


补充:刚才了解到最终的分片大小splitSize受到maxsizeminsize以及blocksize的影响。设置FileInputFormat.setMinInputSplitSize(job, 1)后,map数果真达到了20。it

相关文章
相关标签/搜索