所以,我有两份工作,工作a和工作b。对于作业a,我希望每个节点最多有6个Map器。然而,工作b有点不同。对于作业b,每个节点只能运行一个Map器。这样做的原因并不重要——我们就说这个要求是不可协商的。我想告诉hadoop,“对于作业a,每个节点最多安排6个Map器。但是对于作业b,每个节点最多安排1个Map器?
我能想到的唯一解决办法是:
1) 在hadoop主文件夹下有两个文件夹conf.joba和conf.jobb。每个文件夹都有自己的mapred-site.xml副本。conf.joba/mapred-site.xml的mapred.tasktracker.map.tasks.maximum值为6。conf.jobb/mapred-site.xml的mapred.tasktracker.map.tasks.maximum值为1。
2) 在运行作业之前:
2a)关闭TaskTracker
2b)将conf.joba/mapred-site.xml复制到hadoop的conf文件夹中,替换已经在那里的mapred-site.xml
2c)重新启动TaskTracker
2d)等待TaskTracker完成启动
3) 运行作业a
然后在我需要运行作业b时执行类似的操作。
我真的不喜欢这个解决方案;它看起来很笨拙而且容易失败。有没有更好的方法来做我需要做的事?
1条答案
按热度按时间sxpgvts31#
在自定义jar本身的java代码中,可以设置此配置
mapred.tasktracker.map.tasks.maximum
为了你的两份工作。这样做:
编辑:
您还需要设置属性
mapred.map.tasks
从以下公式导出的值(mapred.tasktracker.map.tasks.maximum*集群中tasktracker节点数)。