CGroups 是一種將任務集合及其所有後續子集合彙總/分組到具有特殊行為的階層群組中的機制。CGroups 是 Linux 核心功能,已併入核心版本 2.6.24。從 YARN 的角度來看,這允許限制容器的資源使用。一個很好的例子是 CPU 使用率。沒有 CGroups,就難以限制容器 CPU 使用率。
本節說明使用 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。如果您想要使用 CGroups,則資源處理程式類別必須設定為 CGroupsLCEResourceHandler。DefaultLCEResourcesHandler 無法使用。 |
yarn.nodemanager.linux-container-executor.cgroups.hierarchy |
將 YARN 程序置於其下的 cgroups 階層(不可包含逗號)。如果 yarn.nodemanager.linux-container-executor.cgroups.mount 為 false(也就是說,如果 cgroups 已預先組態),且 YARN 使用者具有對父目錄的寫入權限,則會建立目錄。如果目錄已存在,則管理員必須遞迴地授予 YARN 寫入權限。 |
yarn.nodemanager.linux-container-executor.cgroups.mount |
LCE 是否應嘗試在找不到 cgroups 時掛載 cgroups - 可以為 true 或 false。 |
yarn.nodemanager.linux-container-executor.cgroups.mount-path |
選用。CGroups 的位置。如果 yarn.nodemanager.linux-container-executor.cgroups.mount 為 true,LCE 會嘗試在此處掛載它們。如果 yarn.nodemanager.linux-container-executor.cgroups.mount 為 false,LCE 會嘗試從此處使用 CGroups。如果指定,此路徑及其子目錄(CGroup 階層)必須存在,且在啟動 NodeManager 之前,YARN 必須具有其讀取和寫入權限。請參閱下方的 CGroups 掛載選項以取得詳細資料。 |
yarn.nodemanager.linux-container-executor.group |
NodeManager 的 Unix 群組。它應與「container-executor.cfg」中的設定相符。此組態是驗證容器執行器二進檔的安全存取所必需的。 |
啟用 CGroups 之後,下列與限制 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 使用率。這可確保容器只能使用已配置的 CPU。設定為 false 時,容器可使用閒置 CPU(如果有的話)。請注意,無論設定為 true 或 false,所有容器的總 CPU 使用率絕不會超過「yarn.nodemanager.resource.percentage-physical-cpu-limit」中指定的值。 |
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 之前掛載 cgroup。 |
已掛載或已連結但不在 /proc/mounts 中的 CGroups |
如果 cgroup 可透過 lxcfs 存取或由其他檔案系統模擬,請將 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 本身沒有與安全性相關的要求。然而,LinuxContainerExecutor 有一些要求。如果以非安全模式執行,預設情況下,LCE 會以「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 | 執行作業的使用者 |
---|---|---|
(預設) | (預設) | nobody |
yarn | (預設) | yarn |
yarn | false | (使用者提交工作) |