從EMR-3.49.0及之后版本,EMR-5.15.0及之后版本開始,EMR會根據集群初始化的機型和服務選擇情況,在創建集群過程中動態調整組件的默認內存設置,而不是使用之前版本中的默認配置。本文為您介紹YARN組件堆內存大小配置以及YARN資源配置的使用。
集群初始化后,如果YARN組件所分配到的內存過小,首先考慮是否勾選了過多的服務。由于EMR管控服務會根據勾選的服務進行整體資源分配,因此,如果勾選的服務數量過多,可能會導致在分配邏輯下,分給YARN的內存資源相應減少。另外,還需考慮ECS節點組配置的規格是否過低,以致無法有效支撐當前安裝的所有EMR服務組件所需的內存需求。
YARN組件的資源配置參數均可在集群創建后在EMR控制臺上進行手動調整。
YARN組件堆內存大小配置
在EMR控制臺YARN服務的配置頁面,調整以下參數。
組件名 | 配置文件 | 配置項 | 生效范圍 | 備注 |
ResourceManager | yarn-env.sh | YARN_RESOURCEMANAGER_HEAPSIZE | 集群 | 最小1024,如果小作業較多則需要繼續調大該參數值,調整后需要重啟ResourceManager組件生效。 |
NodeManager | yarn-env.sh | YARN_NODEMANAGER_HEAPSIZE | 集群 | 如果Shuffle Service使用Node Manager內存較多導致FULL GC,則需要繼續調大該參數值,調整后需要重啟NodeManager組件生效。 |
WebAppProxyServer | yarn-env.sh | YARN_PROXYSERVER_HEAPSIZE | 集群 | 調整參數值后需要重啟WebAppProxyServer組件生效。 |
TimelineServer | yarn-env.sh | YARN_TIMELINESERVER_HEAPSIZE | 集群 | 調整參數值后需要重啟TimelineServer組件生效。 |
TimelineServer | yarn-env.sh | YARN_TIMELINESERVER_OPTS中 | 集群 | TimelineServer直接內存最大限制,最小512m。調整參數值后需要重啟TimelineServer組件生效。 |
MRHistoryServer | mapred-env.sh | HADOOP_JOB_HISTORYSERVER_HEAPSIZE | 集群 | 調整參數值后需要重啟MRHistoryServer組件生效。 |
YARN使用集群資源配置
在EMR控制臺YARN服務的配置頁面,調整以下參數。
配置項 | 描述 | 配置文件 | 生效范圍 | 備注 |
yarn.scheduler.maximum-allocation-mb | 調度器中單個容器最大可請求的內存資源數。 | yarn-site.xml | 集群 | 如果集群確實需要提交單個容器比較大的作業時需要提高避免調度器限制,過高的配置容易導致資源碎片。調整參數值后需要重啟ResourceManager組件生效。 |
yarn.scheduler.minimum-allocation-mb | 調度器中單個容器最小可請求的內存資源數。 | yarn-site.xml | 集群 | 通常不需要調整,調整后需要重啟ResourceManager組件生效。 |
yarn.scheduler.maximum-allocation-vcores | 調度器中單個容器最大可請求的虛擬核數。 | yarn-site.xml | 集群 | 默認為32,如果集群確實需要提交單個容器比較大的作業時需要提高避免調度器限制,過高的配置容易導致資源碎片,調整后需要重啟ResourceManager組件生效。 |
yarn.scheduler.minimum-allocation-vcores | 調度器中單個容器最小可請求的虛擬核數。 | yarn-site.xml | 集群 | 默認為1,通常不需要調整,調整后需要重啟ResourceManager組件生效。 |
yarn.nodemanager.resource.memory-mb | NodeManager聲明調度器可使用的內存資源數。 | yarn-site.xml | 節點組 | 需要根據集群部署情況進行增減。調整后需要重啟NodeManager組件才能生效。 重要 必須選中對應節點組進行配置。 |
yarn.nodemanager.resource.cpu-vcores | NodeManager聲明調度器可使用的虛擬核數。 | yarn-site.xml | 節點組 | 默認為節點組實例規格vCPU數量,大內存規格實例默認使用實例規格vCPU數量的兩倍,需要根據集群部署情況進行增減。調整后需要重啟NodeManager組件才能生效。 重要 必須選中對應節點組進行配置。 |
修改yarn.nodemanager.resource.memory-mb和yarn.nodemanager.resource.cpu-vcores參數時,必須選擇節點組配置才能生效,因為EMR允許一個集群中通過節點組的方式運行不同規格的ECS實例,一個節點組內的ECS規格是一致的,所以按照節點組進行配置NodeManager資源數能夠在調度上保證小規格節點不會水位過高或者大規格節點不會利用率過低,同時不用修改每個ECS節點的NodeManager資源數配置。
EMR會在創建集群和新增節點組第一次擴容時會配置一次yarn.scheduler.maximum-allocation-mb,保證該值大于創建集群時所有節點和新增節點組擴容時擴容節點的yarn.nodemanager.resource.memory-mb,避免作業無法調度。
節點組升配或者手動修改yarn.nodemanager.resource.memory-mb時不會觸發yarn.scheduler.maximum-allocation-mb的自動更新,如果需要調整可以手動配置一次yarn.scheduler.maximum-allocation-mb。
為避免影響您的作業,新增節點組第一次擴容配置yarn.scheduler.maximum-allocation-mb時不會觸發ResourceManager重啟,如果需要配置生效,則需要手動重啟一次ResourceManager。
說明建議業務低峰期時重啟ResourceManager,組件重啟過程中可能會有作業失敗的情況發生。