据我所知,hadoop架构认为所有机器都可以在集群中的所有机器上运行任何任务/作业。
有没有办法更改此模型以将某些计算机标记为具有某些功能,然后只选择具有作业所需功能的计算机来运行该作业?
答案 0 :(得分:1)
想出这个。由于我使用的是FairScheduler,因此在那里有一个可扩展点,通过编写一个实现LoadManager接口的简单类来实现我的目标
根据http://hadoop.apache.org/common/docs/current/fair_scheduler.html,FairScheduler使用mapred.fairscheduler.loadmanager配置属性(默认为CapBasedLoadManager)中指定的类的实例。 LoadManager接口提供了方便的方法
boolean canLaunchTask(TaskTrackerStatus tracker, JobInProgress job, TaskType type)
允许我使用自定义逻辑来允许或拒绝特定任务在特定任务跟踪器上运行。问题解决了。
获得的经验:阅读源代码很有用。
答案 1 :(得分:0)
好。这看起来很有用,但数据可能不是本地的吗?还可以运行两个Jobtrackers,每个Jobtrackers管理一个不同的tasktrackers池。您可以将作业提交给正确的jobtracker。