從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,組件重啟過程中可能會有作業失敗的情況發生。