hadoop2.2.0 运行任务时map数的确定以及分配问题

psycore 2014-11-07 05:42:53
1. 关于hadoop中的map过程,我的理解是每一个map系统会开启一个JVM进程来处理,map之间相互并行,map函数内串行。这样的想法是否正确?

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

查过好多资料,好像是说map的个数取决于block_size、total_size等参数。但是都说的是1.x版本的设置,hadoop 2.2.0上并没有找到mapred.map.tasks、mapred.min.split.size等对应的设置方法。

由于我的输入文件只有一个文件,而且不算是“大数据”,只是单纯想在hadoop上实现并行,所以我希望能够设置一个最少的map数目,以便能在各个计算节点上并行。请问我应该如何设置?

******
3. 我通过手动将输入文件分为4份,使得hadoop的确生成了4个map,但是Web UI显示的结果如下:

我的集群有两台nodemanager, 但好像4个map任务都运行在了一台机器上,这是怎么回事?如何才能使map均匀的分配在两台机器上?

另外,我的配置文件基本上是默认的,也就是说mapreduce.job.maps为默认值“2” , mapreduce.tasktracker.map.tasks.maximum也为默认值“2”, 不可能存在一个节点上四个map的情况啊?这两个配置参数究竟是如何影响程序的?
...全文
5133 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
CD_Yes先生 2015-07-25
  • 打赏
  • 举报
回复
不知道楼主现在对这个问题的研究如何了? map之间严格说,应该不是并行的,启动一个程序时,根据InputSplit分片确定了map数目,真正在运行时却是第一个map运行完毕,资源释放第二个map才启动。只有应用程序第一个map需要第二个map程序辅助时才启动两个两个map。比如PI程序,运行hadoop jar pi.jar pi 10 100,启动10个map,但同时间一起启动的map只有两个。
entrance722 2015-01-25
  • 打赏
  • 举报
回复
我也遇到了一样的问题?我的程序的map,分出了5个map task,结果这5个map task都在1台电脑上。我修改了mapreduce.tasktracker.map.tasks.maximum=1,也是没有作用。不知,是什么问题?
skyWalker_ONLY 2014-11-12
  • 打赏
  • 举报
回复
引用 8 楼 Cversion 的回复:
最近看到一本书,上面提到自定义FileInputFormat类来控制map数目和分布位置,自己再研究看看。就此结贴,感谢两位的热心帮助。
可以参考http://blog.csdn.net/skywalker_only/article/details/41012977
psycore 2014-11-11
  • 打赏
  • 举报
回复
最近看到一本书,上面提到自定义FileInputFormat类来控制map数目和分布位置,自己再研究看看。就此结贴,感谢两位的热心帮助。
  • 打赏
  • 举报
回复
每次修改文件再同步再重启很麻烦,有没有更好一点的设置方式? 我使用的是hadoop 2..4.1 hadoop dfsadmin -refreshNodes yarn rmadmin -refreshNodes 不用重启
psycore 2014-11-10
  • 打赏
  • 举报
回复
我的hadoop 为2.2.0版本,从官方文档上查到类似的配置项只有mapreduce.input.fileinputformat.split.minsize和dfs.blocksize(不知道去掉一个点是什么意思!—_—)。mapreduce.input.fileinputformat.split.minsize默认的“0”以及手动设置成“4194304”(4M),dfs.blocksize设置为“1048576”(1M),重启运行后依旧只有一个map.(输入文件有20.9M)。在50075端口的web UI 上查看dfs中的文件,发现Block Size依旧为 128M ,设置没有生效。难道是我的设置方式有问题? 我的设置方式为修改对应的配置文件,添加相应的<property>项,修改保存后同步到数据节点机器中,再stop×××.sh 和 start×××.sh。 PS:每次修改文件再同步再重启很麻烦,有没有更好一点的设置方式?
psycore 2014-11-09
  • 打赏
  • 举报
回复
感谢sky_walker85的回答。我试着将输入文件加大到100多G,发现的确可以在两台机器上同时运行map任务,总map数达到几百个,同时有14个左右的map任务同时运行(第一台机器上6个任务,第二台机器上8个任务)。感觉那些参数设置完全没有起到效果。 我又修改hdfs-site.xml文件,添加设置`dfs.blocksize`的值为`1m`,同步文件并重启后,输入文件调整为14Mb并运行,发现还是只有1个map。(`mapreduce.input.fileinputformat.split.minsize`值还是默认的“0”)
  • 打赏
  • 举报
回复
试验了一下: 调整mapred-site.xml中mapred.min.split.size的值可以改变map的数量 首先设置了hdfs-site.xml中的dfs.block.size为20M,测试文件为72M 然后调整mapred-site.xml中mapred.min.split.size的值 30M 时候为 3个map 20M 时候为 4个map 10M 时候为 8个map
  • 打赏
  • 举报
回复
默认情况下,每个JVM上可以运行的任务数是1,但是可以修改jvm重用参数值(-1 无限制),这样同一个JVM可以被该作业的所有任务使用。map之间是并行的。 hadoop 新版本中 mapred.map.tasks过期了,应该使用mapreduce.job.maps。但是在使用hadoop-streaming的时候好像可以使用mapred.map.tasks hadoop jar share/hadoop/tools/lib/hadoop-streaming-2.4.1.jar -D mapred.map.tasks=1 -input /input -output /output -mapper "wc -l" 至于修改map数可以参考下面这篇文章 http://blog.csdn.net/strongerbit/article/details/7440111
skyWalker_ONLY 2014-11-08
  • 打赏
  • 举报
回复
1、不要指望依靠mapreduce.job.maps参数设置map任务的数量,该参数由hadoop在运行时通过计算文件分片的数量设置 2、通过更改dfs.blocksize确实可以影响map任务的数量,但不是唯一地因素,参数mapreduce.input.fileinputformat.split.minsize也会影响map任务的数量 3、如果修改的是core-site.xml和hdfs-sitex.ml,可以使用refresh命令重新加载配置文件,如果修改的是mapred-site.xml好像则不能,我试过修改使用的容器类,并使用命令yarn rmadmin -refreshNodes好像没起作用。手动设置mapreduce.job.maps将不会影响实际的map任务 参考http://blog.csdn.net/skywalker_only/article/details/40820275
psycore 2014-11-08
  • 打赏
  • 举报
回复
感谢楼上的回答。我依旧有一些细节问题不太清楚: 1. 我的`mapreduce.job.maps`的参数为默认值“2”, 但是执行时依旧有4个map数,如一开始给出的图所示。这是不是意味着参数的设置无效? 2. 图中是不是说明4个map任务都在机器centos2上?如果是,为什么任务无法平均分配在每台机器上(我的集群还有一台机器centos1作为数据节点)?这是不是同时意味着`mapreduce.tasktracker.map.tasks.maximum`的默认值“2”无效? 3. 大致了解到map数和总数据大小以及HDFS中分块大小有关,是不是说明将块设置小一些(修改参数`dfs.blocksize`)就可以增加map数?因为不想修改配置文件然后重启集群,在`run`函数中使用如下语句:

Configuration conf = getConf();
conf.set("mapreduce.job.maps", "4");
能够达到设置配置文件而无需重启集群的效果吗? 再次感谢各位的帮助。

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧