所以,我有两个工作,工作 A 和工作 B。对于工作 A,我希望每个节点最多有 6 个映射器。但是,工作 B 有点不同。对于 Job B,我只能为每个节点运行一个映射器。这样做的原因并不重要——我们只是说这个要求是不可协商的。我想告诉 Hadoop,“对于作业 A,每个节点最多安排 6 个映射器。但对于作业 B,每个节点最多安排 1 个映射器。” 这可能吗?
我能想到的唯一解决方案是:
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)在我运行作业 A 之前:
2a) 关闭我的任务跟踪器
2b) 将 conf.JobA/mapred-site.xml 复制到 Hadoop 的 conf 文件夹中,替换已经存在的 mapred-site.xml
2c)重新启动我的任务跟踪器
2d) 等待任务跟踪器完成启动
3) 运行作业 A
然后在我需要运行 Job B 时做类似的事情。
我真的不喜欢这个解决方案;它看起来很笨拙且容易失败。有没有更好的方法来做我需要做的事情?