Hadoop 3.1.1 - Yarn - 使用 CGroups


在 Yarn 上使用 CGroups

CGroups 是一種將任務及其子任務聚集和划分進一個垂直的分組的策略,並提供在此結構上的特別的操作。CGroups 是 Linux 內核功能,自內核版本 2.6.24 被引入。從 Yarn 角度,該功能使得限額容器的資源使用成為可能。一個示例是 CPU 使用,如果沒有 CGroups,限制容器的 CPU 使用非常困難。

CGroups 配置

本節描述 CGroups 相關的配置參數。

以下參數和啟動 CGroups 有關。請在 yarn-site.xml 中設定:

參數 描述
yarn.nodemanager.container-executor.class 請設置為 org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor。CGroups 是 Linux 內核功能並通過 LinuxContainerExecutor 暴露出來。
yarn.nodemanager.linux-container-executor.resources-handler.class 請設置為 org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler。啟用 LinuxContainerExecutor 並不強制使用 CGroups。如果你想使用,resource-handler-class 必須設置為 CGroupsLCEResourceHandler。
yarn.nodemanager.linux-container-executor.cgroups.hierarchy 放置 Yarn 進程的 CGroups 目錄(不能有逗號)。如果 yarn.nodemanager.linux-container-executor.cgroups.mount 為 false(即必須預先配置 CGroups),且 Yarn 用戶對父目錄由寫權限,那么這個目錄將被創建。如果已經存在,管理員必須沿着 CGroups 目錄遞歸地授予 Yarn 寫權限。
yarn.nodemanager.linux-container-executor.cgroups.mount 如果沒有發現,LinuxContainerExecutor 是否嘗試掛載 CGroups。取值是 true 或 false。
yarn.nodemanager.linux-container-executor.cgroups.mount-path 可選參數,指明 CGroups 的目錄。如果 yarn.nodemanager.linux-container-executor.cgroups.mount 為 true,LinuxContainerExecutor 將嘗試掛載資源到這里;否則,LinuxContainerExecutor 會使用該目錄的 CGroups。如果該參數被配置,那么在 NodeManager 啟動前,給定的目錄及其子目錄(CGroups 垂直結構)必須存在,並且 Yarn 是有權讀寫的。更多細節請參閱 Cgroups 掛載選項
yarn.nodemanager.linux-container-executor.group NodeManager 的 Unix 用戶組,須與 container-executor.cfg 的設置保持一致。該參數對於驗證容器執行程序的安全訪問是必需的。

以下參數和 Yarn 容器的資源限額有關:

參數 描述
yarn.nodemanager.resource.percentage-physical-cpu-limit 該參數限額了所有 Yarn 容器的 CPU 使用。它對容器累計的 CPU 使用設定了硬性的上界。舉例來說,如果值為 60,那么所有 Yarn 容器的 CPU 使用率不會超過 60%。
yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage CGroups 支持硬性或軟性的 CPU 限額。如果該參數為 true,即使 CPU 仍然有富余,容器也無法使用更多的 CPU 資源,這確保了容器只能使用分配的資源量。如果該參數為 false,容器將可以使用空閑的 CPU 資源。需要注意的是,無論該參數是 true 還是 false,所有容器總的 CPU 使用率依然不能超過 yarn.nodemanager.resource.percentage-physical-cpu-limit 定義的值。

CGroups 掛載選項

Yarn 通過一個由內核掛載進文件系統的目錄使用 CGroups。以下是附加到 CGroups 的選項。

選項 描述
已經發現掛載的 CGroups 應該在更新的操作系統(如 RHEL7 和 Ubuntu16) 或者管理員在 Yarn 啟動前已經掛載了 CGroups的情況下,啟用該選項。設定 yarn.nodemanager.linux-container-executor.cgroups.mount 為 false 且其他參數采用默認值,Yarn 將會在在 /proc/mounts 目錄下尋找掛載點。常見的路徑包括 /sys/fs/cgroup 和 /cgroup。不同 Linux 發行版本的默認路徑可能大不相同。
由 Yarn 掛載 CGroups 警告:該選項因為安全原因已經被淘汰。默認情況下,container-executor.cfg 文件中設定了 feature.mount-cgroup.enabled=0。請在啟動 Yarn 前掛載 CGroups。
CGroups 已經掛載或者鏈接了但不在路徑 /proc/mounts 下 如果可以通過 lxcfs (或者由其他文件系統模擬出)訪問 Cgroups,請將 yarn.nodemanager.linux-container-executor.cgroups.mount-path 指向你的 CGroups 根目錄,並設定 yarn.nodemanager.linux-container-executor.cgroups.mount 為 false,Yarn 在發現其他 CGroup 掛載點前,將首先使用該路徑。該路徑下對於每一個 CGroup 都存在一個子目錄,名稱由 CGroup 子系統用逗號分隔,如 <path>/cpu,cpuacct。有效的子系統名稱由 cpu、cpuacct、cpuset、memory、net_cls、blkio、freezer和devices

CGroups 和安全

CGroups 本身並沒有和安全相關的配置,但 LinuxContainerExecutor 有需求。如果運行在非安全模式下(默認),LinuxContainerExecutor 會用 nobody 賬戶運行所有的作業。可以設定 yarn.nodemanager.linux-container-executor.nonsecure-mode.local-user 到期望的用戶名。除此之外,也可以配置為提交作業的用戶名,相應地要設置 yarn.nodemanager.linux-container-executor.nonsecure-mode.limit-users 為 false。

yarn.nodemanager.linux-container-executor.nonsecure-mode.local-user yarn.nodemanager.linux-container-executor.nonsecure-mode.limit-users 運行作業的賬戶名
(default) (default) nobody
yarn (default) yarn
yarn false (User submitting the job)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM