圖 8. 企業(yè)隊(duì)列層次的例子


接下來(lái)就在 Capacity-Scheduler 視圖進(jìn)行配置。
選中 root 根節(jié)點(diǎn),點(diǎn)擊 + Add Queue,依次添加 Engineering、Marketing 和 Support。
選中 Engineering 節(jié)點(diǎn),點(diǎn)擊 + Add Queue,依次添加 Development、QA。
選中 Marketing 根節(jié)點(diǎn),點(diǎn)擊 + Add Queue,依次添加 Advertising、Sales。
選中 Support 根節(jié)點(diǎn),點(diǎn)擊 + Add Queue,依次添加 Services、Training。
每個(gè)隊(duì)列擁有集群容量的一小部分,而這個(gè)指定的隊(duì)列容量可以動(dòng)態(tài)地從集群節(jié)點(diǎn)中獲得。因?yàn)榭側(cè)萘靠梢宰兓?,因此?duì)列的容量配置值表示為百分?jǐn)?shù)。
Capacity 屬性可以由系統(tǒng)管理員根據(jù)集群容量的百分比分配給隊(duì)列?,F(xiàn)在以工程、市場(chǎng)、支持和其它部門按照集群資源 3:4:2:1 的比例,即 30%、40%、20% 和 10% 來(lái)分配。
工程部旗下的開(kāi)發(fā)和質(zhì)量子團(tuán)隊(duì)按照 1:4 的比例分配資源。市場(chǎng)部旗下的廣告和銷售子團(tuán)隊(duì)按照 3:7 的比例分配資源。支持部旗下的培訓(xùn)和服務(wù)子團(tuán)隊(duì)按照 1:4 的比例分配資源。
依次選中每個(gè)隊(duì)列,進(jìn)行 Capacity 屬性的設(shè)置,可以拖拽來(lái)調(diào)整百分比。Capacity 屬性在層次結(jié)構(gòu)中的任何級(jí)別的總和必須等于 100%,當(dāng)設(shè)置不正確的時(shí)候,配置界面會(huì)出現(xiàn)紅色警告。
圖 9. 配置 Capacity-Scheduler


最后配置的隊(duì)列的 Capacity 屬性如圖所示,其中 Default 隊(duì)列是指不屬于工程,支持和市場(chǎng)部門的其它作業(yè)任務(wù)隊(duì)列。
圖 10. 企業(yè)隊(duì)列層次 Capacity 的要求


資源分配流程
除了 Capacity 屬性以外,每個(gè)隊(duì)列都有一個(gè) Max Capacity 的屬性,這個(gè)屬性可以通過(guò)一個(gè)例子來(lái)說(shuō)明。例如 Hadoop 集群有 30 GB 的內(nèi)存資源,根據(jù)先前描述的配置中,工程部分配到 9 GB 集群的能力,即 30 GB 的絕對(duì)容量的 30%。同樣,支持部分配到 12 GB 和市場(chǎng)部得到 6 GB。其它作業(yè)分配到 3 GB。
根據(jù)工程部的開(kāi)發(fā)子團(tuán)隊(duì)和質(zhì)量子團(tuán)隊(duì)之間分布在以 1:4 的比例,所以開(kāi)發(fā)子團(tuán)隊(duì) 1.8 GB,質(zhì)量子團(tuán)隊(duì) 7.2 GB。
最初,整個(gè)工程部沒(méi)有應(yīng)用程序運(yùn)行,工程部隊(duì)列是空閑的,而支持和市場(chǎng)隊(duì)列正在利用其全部計(jì)算能力。
用戶 dev1 和 dev2 分別提交作業(yè)申請(qǐng),都屬于 root.Engineering.Development 隊(duì)列。盡管 root.Engineering.Development 隊(duì)列被分配為 1.8 GB,用戶 dev1 和 dev2 分別獲得了 1.8 GB,總共 3.6 GB。Capacity Scheduler 為更好地利用可用的群集資源而允許 Hadoop 集群資源彈性共享。接下來(lái),用戶 dev3、dev4、dev5 提交更多的應(yīng)用程序,也都屬于 root.Engineering.Development 隊(duì)列。即使每個(gè)被限制為 1.8 GB,也會(huì)逐步使用完隊(duì)列中的總使用容量 9 GB,接管了 root.Engineering.QA 隊(duì)列的資源。
這時(shí)用戶 qa1 提交作業(yè)申請(qǐng),屬于 root.Engineering.Development 隊(duì)列,由于集群中沒(méi)有可用的空閑資源,他的應(yīng)用程序必須等待。鑒 root.Engineering.Development 隊(duì)列正在利用所有可用的資源,用戶 qa1 是否可能或不能立即取回 root.Engineering.QA 隊(duì)列的保證容量,這取決于搶占參數(shù) yarn.resourcemanager.scheduler.monitor.enable 的設(shè)置,IBM BigInsights 的缺省設(shè)置是不搶占,管理員可以從 Ambari 的管理界面上找到搶占參數(shù)的設(shè)置。
圖 11. YARN 的參數(shù)設(shè)置


隨著用戶 dev1、dev2、dev3、dev4 的作業(yè)完成,新的資源將被分配到用戶 qa1 提交的作業(yè)。這將繼續(xù)下去,直到集群穩(wěn)定在預(yù)期的工程部旗下的開(kāi)發(fā)和質(zhì)量子團(tuán)隊(duì)按照 1:4 的比例使用資源。