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