【发布时间】:2013-02-27 07:02:46
【问题描述】:
所以,我有两个作业,作业 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) 等待 tasktracker 完成启动
3) 运行作业 A
然后在我需要运行作业 B 时执行类似的操作。
我真的不喜欢这个解决方案;它看起来很笨拙且容易失败。有没有更好的方法来做我需要做的事情?
【问题讨论】:
标签: java hadoop mapreduce hdfs mappers