本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
了解 Amazon EMR 節點配置策略和案例
本章節提供節點分配策略和常見擴展案例的概觀,可以與 Amazon EMR 受管擴展功能搭配使用。
節點配置策略
Amazon EMR 受管擴展功能可根據下列縱向擴展和縮減規模策略來分配核心節點和任務節點:
縱向擴展策略
-
對於 Amazon EMR 7.2 版和更新版本,受管擴展會先根據節點標籤和應用程式程序限制 YARN 屬性新增節點。
-
對於 Amazon EMR 7.2 版和更新版本,如果您啟用節點標籤,並將應用程式程序限制為
CORE
節點,Amazon EMR 受管擴展會在應用程式程序需求增加且執行器需求增加時擴展核心節點和任務節點。同樣地,如果您啟用節點標籤並將應用程式程序限制為ON_DEMAND
節點,則受管擴展會在應用程式程序需求增加時擴展隨需節點,並在執行器需求增加時擴展 Spot 節點。 -
如果未啟用節點標籤,應用程式程序放置不會限制在任何節點或市場類型。
-
透過使用節點標籤,受管擴展可以在相同的調整大小操作中擴展和縮減不同的執行個體群組和執行個體機群。例如,在
instance_group1
具有ON_DEMAND
節點和instance_group2
SPOT
節點的案例中,啟用節點標籤,且應用程式程序僅限於具有ON_DEMAND
標籤的節點。instance_group2
如果應用程式程序需求減少instance_group1
且執行器需求增加,受管擴展會縮減和擴展。 -
當 Amazon EMR 在與目前執行個體群組的縱向擴展中遇到延遲時,使用受管擴展功能的叢集可自動切換到不同的任務執行個體群組。
-
如果已設定
MaximumCoreCapacityUnits
參數,Amazon EMR 會擴展核心節點,直到核心單元達到允許的上限為止。所有剩餘容量都會新增至任務節點。 -
如果已設定
MaximumOnDemandCapacityUnits
參數,Amazon EMR 會使用隨需執行個體來擴展叢集,直到隨需單位達到允許的上限為止。使用 Spot 執行個體新增所有剩餘容量。 -
如果同時設定了
MaximumCoreCapacityUnits
和MaximumOnDemandCapacityUnits
參數,Amazon EMR 會在擴展期間考慮這兩個限制。例如,如果
MaximumCoreCapacityUnits
小於MaximumOnDemandCapacityUnits
,Amazon EMR 會先擴展核心節點,直到達到核心容量限制為止。對於剩餘容量,Amazon EMR 首先使用隨需執行個體來擴展任務節點,直到達到隨需限制為止,然後將 Spot 執行個體用於任務節點。
縮減規模策略
-
與擴展策略類似,Amazon EMR 會根據節點標籤移除節點。如需節點標籤的詳細資訊,請參閱了解節點類型:主要節點、核心節點和任務節點。
-
如果您尚未啟用節點標籤,受管擴展會移除任務節點,然後移除核心節點,直到達到所需的縮減目標容量為止。受管擴展絕不會將叢集縮減至低於受管擴展政策中指定的最低限制。
-
Amazon EMR 5.34.0 及更高版本以及 Amazon EMR 6.4.0 及更高版本支援受管擴展功能,它可感知 Spark 隨機資料 (Spark 會在分割區之間重新分配以執行特定操作的資料)。如需有關隨機排序操作的詳細資訊,請參閱《Spark 程式設計指南》
。受管擴展功能僅縮減使用率不足且不包含使用中隨機資料的執行個體。這種智慧型擴展可防止意外的隨機資料遺失,避免重新嘗試作業和重新計算中繼資料。 -
受管擴展會先移除任務節點,然後移除核心節點,直到達到所需的縮減目標容量為止。叢集的擴展永遠不會低於受管擴展政策中指定的最低限制。
-
對於使用 Amazon EMR 5.x 版本 5.34.0 及更高版本和 6.x 版本 6.4.0 及更高版本啟動的叢集,Amazon EMR 受管擴展功能不會縮減在其中執行
ApplicationMaster
for Apache Spark 的節點。這樣可以最大限度地減少作業失敗和重試,有助於提高作業績效並降低成本。若要確認叢集中的哪些節點正在執行ApplicationMaster
,請造訪 Spark 歷史記錄伺服器,並在 Spark 應用程式 ID 的執行程式索引標籤下篩選驅動程式。
如果叢集沒有任何負載,則 Amazon EMR 會取消先前評估中新增的執行個體,並執行縮減規模操作。如果叢集負載過重,則 Amazon EMR 會取消移除執行個體並執行縱向擴展操作。
節點分配考量
建議您針對核心節點使用隨需購買選項,避免在 Spot 回收時遺失 HDFS 資料。可以針對作業節點使用 Spot 購買選項來降低成本,並在將更多 Spot 執行個體新增至作業節點時獲得更快的作業執行速度。
節點配置案例
透過設定不同組合中的上限、下限、隨需限制以及核心節點參數上限,根據您的需求建立各種擴展案例。
案例 1:僅擴展核心節點
若僅擴展核心節點,受管擴展參數必須符合下列要求:
-
隨需限制等於最大邊界。
-
最大核心節點等於最大邊界。
如果未指定隨需限制和最大核心節點參數,則兩個參數都會預設為最大邊界。
如果您使用受管擴展搭配節點標籤,並將應用程式程序限制為僅在CORE
節點上執行,則此案例不適用,因為受管擴展會擴展任務節點以因應執行器需求。
下列範例僅示範擴展核心節點的案例。
叢集初始狀態 | 擴展參數 | 擴展行為 |
---|---|---|
執行個體群組 核心:1 個隨需 任務:1 個隨需與 1 個 Spot |
|
使用隨需類型,在核心節點上的 1 到 20 個執行個體或執行個體機群單元之間進行擴展。任務節點上沒有擴展。 當您使用受管擴展搭配節點標籤,並將應用程式程序限制為 |
執行個體機群 核心:1 個隨需 任務:1 個隨需與 1 個 Spot |
UnitType: InstanceFleetUnits
|
案例 2:僅擴展任務節點
若僅擴展任務節點,受管擴展參數必須符合下列要求:
-
最大核心節點必須等於最小邊界。
下列範例僅示範擴展任務節點的案例。
叢集初始狀態 | 擴展參數 | 擴展行為 |
---|---|---|
執行個體群組 核心:2 隨需 任務:1 Spot |
|
將核心節點穩定保持為 2,並且只在 0 到 18 個執行個體或執行個體機群單元之間擴展任務節點。最小與最大界限之間的容量只會新增至任務節點。 當您使用受管擴展搭配節點標籤,並將應用程式程序限制為 ON_DEMAND 節點時,叢集會將核心節點維持在 2 的穩定狀態,並且只會將任務節點擴展到 0 到 18 個使用 或 |
執行個體機群 核心:2 隨需 任務:1 Spot |
|
案例 3:僅叢集中的隨需執行個體
若要僅擁有隨需執行個體,叢集和受管擴展參數必須符合下列要求:
-
隨需限制等於最大邊界。
如果未指定隨需限制,參數值會預設為最大邊界。預設值表示 Amazon EMR 僅擴展隨需執行個體。
如果最大核心節點小於最大界限,則可以使用最大核心節點參數來分割核心節點和任務節點之間的容量配置。
若要在由執行個體群組構成的叢集中啟用此案例,叢集中的所有節點群組都必須在初始設定期間使用隨需市場類型。
如果您使用受管擴展搭配節點標籤,並將應用程式程序限制為僅在ON_DEMAND
節點上執行,則此案例不適用,因為受管擴展會擴展Spot
節點以因應執行器需求。
下列範例示範在整個叢集中擁有隨需執行個體的案例。
叢集初始狀態 | 擴展參數 | 擴展行為 |
---|---|---|
執行個體群組 核心:1 個隨需 任務:1 個隨需 |
|
使用隨需類型,在核心節點上的 1 到 12 個執行個體或執行個體機群單元之間進行擴展。使用任務節點上的隨需類型來擴展剩餘容量。不使用 Spot 執行個體進行擴展。 當您使用受管擴展搭配節點標籤,並將應用程式程序限制為 |
執行個體機群 核心:1 個隨需 任務:1 個隨需 |
|
案例 4:叢集中只有 Spot 執行個體
若要僅擁有 Spot 執行個體,受管擴展參數必須符合下列要求:
-
隨需限制設定為 0。
如果最大核心節點小於最大界限,則可以使用最大核心節點參數來分割核心節點和任務節點之間的容量配置。
若要在由執行個體群組構成的叢集中啟用此案例,核心執行個體群組必須在初始組態設定期間使用 Spot 購買選項。如果任務執行個體群組中沒有 Spot 執行個體,Amazon EMR 受管擴展功能可在需要時使用 Spot 執行個體建立任務群組。
如果您使用受管擴展搭配節點標籤,並將應用程式程序限制為僅在ON_DEMAND
節點上執行,則此案例不適用,因為受管擴展會擴展ON_DEMAND
節點以因應應用程式程序需求。
下列範例示範在整個叢集中擁有 Spot 執行個體的案例。
叢集初始狀態 | 擴展參數 | 擴展行為 |
---|---|---|
執行個體群組 核心:1 個 Spot 任務:1 Spot |
|
使用 Spot 在核心節點上的 1 到 20 個執行個體或執行個體機群單元之間進行擴展。不使用隨需類型進行擴展。 當您使用受管擴展搭配節點標籤,並將應用程式程序限制為 |
執行個體機群 核心:1 個 Spot 任務:1 Spot |
|
案例 5:擴展核心節點上的隨需執行個體和任務節點上的 Spot 執行個體
若要擴展核心節點上的隨需執行個體和任務節點上的 Spot 執行個體,受管擴展參數必須符合下列要求:
-
隨需限制必須等於最大核心節點。
-
隨需限制和最大核心節點都必須小於最大界限。
若要在由執行個體群組構成的叢集中啟用此案例,核心節點群組必須使用隨需購買選項。
如果您使用受管擴展搭配節點標籤,並將應用程式程序限制為僅在ON_DEMAND
節點上執行,則此案例不適用CORE
。
下列範例示範擴展核心節點上的隨需執行個體和任務節點上的 Spot 執行個體的案例。
叢集初始狀態 | 擴展參數 | 擴展行為 |
---|---|---|
執行個體群組 核心:1 個隨需 任務:1 個隨需與 1 個 Spot |
|
由於任務節點上已有 1 個隨需單元,而隨需的最大限制為 7,因此在核心節點上最多可擴展 6 個隨需單元。然後在任務節點上縱向擴展到 13 個 Spot 單位。 |
執行個體機群 核心:1 個隨需 任務:1 個隨需與 1 個 Spot |
|
案例 6:擴展應用程式程序需求的CORE
執行個體,以及執行器需求的TASK
執行個體。
只有在您使用受管擴展搭配節點標籤,並將應用程式程序限制為僅在CORE
節點上執行時,此案例才適用。
若要根據應用程式程序需求擴展CORE
節點,並根據執行器需求擴展TASK
節點,您必須在叢集啟動時設定下列組態:
-
yarn.node-labels.enabled:true
-
yarn.node-labels.am.default-node-label-expression: 'CORE'
如果您未指定ON_DEMAND
限制和最大CORE
節點參數,這兩個參數都會預設為最大界限。
如果最大ON_DEMAND
節點小於最大界限,受管擴展會使用最大ON_DEMAND
節點參數來分割 ON_DEMAND
和 SPOT
節點之間的容量分配。如果您將最大CORE
節點參數設定為小於或等於最小容量參數,CORE
則節點會保持靜態,處於最大核心容量。
下列範例示範根據應用程式程序需求擴展 CORE 執行個體,以及根據執行器需求擴展 TASK 執行個體的情況。
叢集初始狀態 | 擴展參數 | 擴展行為 |
---|---|---|
執行個體群組 核心:1 個隨需 任務:1 個隨需 |
|
使用隨需或 Spot 市場類型,根據叢集的應用程式程序需求,擴展 1 到 20 個節點 請求 |
執行個體機群 核心:1 個隨需 任務:1 個隨需 |
|
案例 7:擴展應用程式程序需求的ON_DEMAND
執行個體,以及執行器需求的SPOT
執行個體。
只有在您使用受管擴展搭配節點標籤,並將應用程式程序限制為僅在ON_DEMAND
節點上執行時,此案例才適用。
若要根據應用程式程序需求擴展ON_DEMAND
節點,並根據執行器需求擴展SPOT
節點,您必須在叢集啟動時設定下列組態:
-
yarn.node-labels.enabled:true
-
yarn.node-labels.am.default-node-label-expression: 'ON_DEMAND'
如果您未指定ON_DEMAND
限制和最大CORE
節點參數,這兩個參數都會預設為最大界限。
如果最大CORE
節點小於最大界限,受管擴展會使用最大CORE
節點參數來分割 CORE
和 TASK
節點之間的容量分配。如果您將最大CORE
節點參數設定為小於或等於最小容量參數,CORE
則節點會保持靜態,處於最大核心容量。
下列範例示範根據應用程式程序需求擴展隨需執行個體,以及根據執行器需求擴展 Spot 執行個體的案例。
叢集初始狀態 | 擴展參數 | 擴展行為 |
---|---|---|
執行個體群組 核心:1 個隨需 任務:1 個隨需 |
|
使用 請求 |
執行個體機群 核心:1 個隨需 任務:1 個隨需 |
|