cgroup限制oracle,Yarn 使用 Cgroup 实现任务资源限制
Linux CGroup 全稱是 Linux Control Group,是 Linux 內(nèi)核提供的一個(gè)用來限制進(jìn)程資源使用的功能,支持如 CPU, 內(nèi)存,磁盤 IO 等資源的使用限制。用戶可以使用 CGroup 對(duì)單個(gè)進(jìn)程或者一組進(jìn)程進(jìn)行精細(xì)化的資源限制,具體使用方式可以查看參考文檔。
目前, Yarn NodeManager 能夠使用 CGroup 來限制所有 containers 的資源使用,主要是 CPU 資源。如果不用 CGroup, 在 NM 端很難實(shí)現(xiàn)對(duì) container 的 CPU 使用進(jìn)行限制。默認(rèn)狀態(tài)下, container 的 CPU 使用是沒有限制的,container 申請(qǐng)了 1 vcore ,實(shí)際上能夠使用所有的 CPU 資源。所以如果 NM 上分配了一個(gè) vcore 申請(qǐng)較少實(shí)際上 CPU 使用極高的任務(wù),常常會(huì)導(dǎo)致節(jié)點(diǎn)上運(yùn)行的所有的任務(wù)都延時(shí)。
NM 運(yùn)行時(shí),可以通過 ContainersMonitor 線程監(jiān)控 container 內(nèi)存和 CPU 使用。對(duì)于 container 內(nèi)存使用, 一旦發(fā)現(xiàn)其超出申請(qǐng)內(nèi)存大小,就會(huì)立即發(fā)起 kill container 命令,回收 container 的資源。ContainersMonitor 雖然也支持 CPU 使用監(jiān)控,但是 CPU 資源不像內(nèi)存資源,其使用量的峰值是基本上可以確定的,在所有機(jī)器或者系統(tǒng)上都基本一致。CPU 受限于 CPU 硬件性能, 同一個(gè)任務(wù)在不同的機(jī)器上的 CPU 使用率可能差異巨大,所以不能發(fā)現(xiàn) container CPU 使用超過申請(qǐng)大小就 kill container 。同時(shí),由于 container 都是由子進(jìn)程的方式啟動(dòng)的, NM 也是很難通過直接控制 container 運(yùn)行和暫停來調(diào)整其 CPU 使用率。因此,在沒有 CGroup 功能的情況下, NM 是很難直接限制 container 的 CPU 使用的。
所以接下來我們主要介紹 Yarn 如何啟用 CGroup 來限制 containers CPU 資源占用。
啟用
NM 啟用 CGroup 功能主要需要在 yarn-site.xml 里設(shè)置以下配置:
1. 啟用 LCE :
在 Nodemanager 中, CGroup 功能集成在 LinuxContainerExecutor 中,所以要使用 CGroup 功能,必須設(shè)置 container-executor 為 LinuxContainerExecutor. 同時(shí)需要配置 NM 的 Unix Group,這個(gè)是可執(zhí)行的二進(jìn)制文件 container-executor 用來做安全驗(yàn)證的,需要與 container-executor.cfg 里面配置的一致。詳細(xì)配置可參見 Yarn ContainerExecutor 配置與使用。
yarn.nodemanager.container-executor.classorg.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutoryarn.nodemanager.linux-container-executor.grouphadoop
2. 啟用 CGroup :
LinuxContainerExecutor 并不會(huì)強(qiáng)制開啟 CGroup 功能, 如果想要開啟 CGroup 功能,必須設(shè)置 resource-handler-class 為 CGroupsLCEResourceHandler.
yarn.nodemanager.linux-container-executor.resources-handler.classorg.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler
3. 配置 Yarn CGroup 目錄:
NM 通過 yarn.nodemanager.linux-container-executor.cgroups.hierarchy 配置所有 Yarn Containers 進(jìn)程放置的 CGroup 目錄。
如果系統(tǒng)的 CGroup 未掛載和配置,可以在系統(tǒng)上手動(dòng)掛載和配置和啟用 CGroup 功能,也可以通過設(shè)置 yarn.nodemanager.linux-container-executor.cgroups.mount 為 true,同時(shí)設(shè)置 CGroup 掛載路徑 yarn.nodemanager.linux-container-executor.cgroups.mount-path 來實(shí)現(xiàn) NM 自動(dòng)掛載 CGroup (不建議這樣用,問題挺多)。
如果系統(tǒng)的 CGroup 已經(jīng)掛載且配置完成,而且 Yarn 用戶有 CGroup cpu 子目錄的寫入權(quán)限,NM 會(huì)在 cpu 目錄下創(chuàng)建 hadoop-yarn 目錄 ,如果該目錄已經(jīng)存在,保證 yarn 用戶有寫入權(quán)限即可。
yarn.nodemanager.linux-container-executor.cgroups.hierarchy/hadoop-yarnyarn.nodemanager.linux-container-executor.cgroups.mountfalseyarn.nodemanager.linux-container-executor.cgroups.mount-path/sys/fs/cgroup
4. CPU 資源限制:
NM 主要使用兩個(gè)參數(shù)來限制 containers CPU 資源使用。
首先,使用 yarn.nodemanager.resource.percentage-physical-cpu-limit 來設(shè)置所有 containers 的總的 CPU 使用率占用總的 CPU 資源的百分比。比如設(shè)置為 60,則所有的 containers 的 CPU 使用總和在任何情況下都不會(huì)超過機(jī)器總體 CPU 資源的 60 %。
然后,使用 yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage 設(shè)置是否對(duì) container 的 CPU 使用進(jìn)行嚴(yán)格限制。如果設(shè)置為 true ,即便 NM 的 CPU 資源比較空閑, containers CPU 使用率也不能超過限制,這種配置下,可以嚴(yán)格限制 CPU 使用,保證每個(gè) container 只能使用自己分配到的 CPU 資源。但是如果設(shè)置為 false ,container 可以在 NM 有空閑 CPU 資源時(shí),超額使用 CPU,這種模式下,可以保證 NM 總體 CPU 使用率比較高,提升集群的計(jì)算性能和吞吐量,所以建議使用非嚴(yán)格的限制方式(實(shí)際通過 CGroup 的 cpu share 功能實(shí)現(xiàn))。不論這個(gè)值怎么設(shè)置,所有 containers 總的 CPU 使用率都不會(huì)超過 cpu-limit 設(shè)置的值。
NM 會(huì)按照機(jī)器總的 CPU num* limit-percent 來計(jì)算 NM 總體可用的實(shí)際 CPU 資源,然后根據(jù) NM 配置的 Vcore 數(shù)量來計(jì)算每個(gè) Vcore 對(duì)應(yīng)的實(shí)際 CPU 資源,再乘以 container 申請(qǐng)的 Vcore 數(shù)量計(jì)算 container 的實(shí)際可用的 CPU 資源。這里需要注意的是,在計(jì)算總體可用的 CPU 核數(shù)時(shí),NM 默認(rèn)使用的實(shí)際的物理核數(shù),而一個(gè)物理核通常會(huì)對(duì)應(yīng)多個(gè)邏輯核(單核多線程),而且我們默認(rèn)的 CPU 核數(shù)通常都是邏輯核,所以我們需要設(shè)置 yarn.nodemanager.resource.count-logical-processors-as-cores 為 true 來指定使用邏輯核來計(jì)算 CPU 資源。
yarn.nodemanager.resource.percentage-physical-cpu-limit80yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usagefalseyarn.nodemanager.resource.count-logical-processors-as-corestrue
注意事項(xiàng)
Linux 內(nèi)核版本 3.10.0-327.el7.x86_64 上 Yarn 啟用 CGroup 功能后,會(huì)觸發(fā)內(nèi)核 BUG,導(dǎo)致內(nèi)核卡死,重啟,NM 掛掉,所有運(yùn)行的任務(wù)失敗。所以如果需要啟用 CGroup 功能,絕對(duì)不能使用 3.10.0-327.el7.x86_64 版本內(nèi)核。親測升級(jí)內(nèi)核版本可解決該問題。
本文轉(zhuǎn)自:https://smarthanwang.github.io/2019/10/20/yarn-cgroup-usage/
作者:smarthan
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結(jié)
以上是生活随笔為你收集整理的cgroup限制oracle,Yarn 使用 Cgroup 实现任务资源限制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle脱机备份文件拒绝访问,如何解
- 下一篇: oracle登陆无效参数是啥意思,关于参