據我所知,hadoop架構認爲所有機器都可以與任何能夠在羣集中的所有機器上運行的任務/作業相同。是否可以選擇特定的機器來運行特定類型的hadoop作業?
有沒有辦法改變這個模型來將某些機器標記爲具有某些功能,然後只挑選具有作業所需功能的機器來運行該作業?
據我所知,hadoop架構認爲所有機器都可以與任何能夠在羣集中的所有機器上運行的任務/作業相同。是否可以選擇特定的機器來運行特定類型的hadoop作業?
有沒有辦法改變這個模型來將某些機器標記爲具有某些功能,然後只挑選具有作業所需功能的機器來運行該作業?
想出這一個。由於我使用的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)
,讓我有自定義的邏輯來允許或拒絕特定的工作在一個特定的任務跟蹤器運行。問題解決了。
獲得的經驗教訓:閱讀源代碼很有用。
好吧。這似乎很有用,但數據可能不是本地的權利?也可以運行兩個JobTracker,每個管理一個不同的任務管理器池。您可以將作業提交給正確的求職者。