本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 EC2 7.0 版的 Amazon EMR 開始,您可以利用進階擴展來控制叢集的資源使用率。進階擴展引入了使用效能擴展,以根據您的業務需求調整資源使用率和效能等級。您設定的值會決定叢集的權重是否增加資源保護,或擴展以處理service-level-agreement(SLA) 敏感工作負載,其中快速完成至關重要。調整擴展值時,受管擴展會解譯您的意圖,並智慧擴展以最佳化資源。如需受管擴展的詳細資訊,請參閱設定 Amazon EMR 的受管擴展。
進階擴展設定
您為進階擴展設定的值會根據您的需求最佳化叢集。值範圍為 1-100。可能的值為 1、25、50、75 和 100。如果您將索引設定為這些值以外的值,則會導致驗證錯誤。
擴展值對應至資源利用策略。下列清單定義了其中幾個項目:
使用率最佳化 【1】 – 此設定可防止資源過度佈建。當您想要保持低成本並優先考慮有效率的資源使用率時,請使用低值。它會導致叢集的擴展較不積極。當工作負載經常激增,而且您不希望資源太快增加時,這對於使用案例非常有效。
平衡 【50】 – 這可平衡資源使用率和任務效能。此設定適用於大多數階段具有穩定執行時間的穩定工作負載。它也適用於短期和長期執行階段的工作負載。如果您不確定要選擇哪個設定,建議您從此設定開始。
效能最佳化 【100】 – 此策略會優先考慮效能。叢集會積極擴展,以確保任務快速完成並符合效能目標。效能最佳化適用於service-level-agreement(SLA) 敏感的工作負載,因為這些工作負載的執行時間非常快。
注意
可用的中繼值提供策略之間的中間基礎,以微調叢集的進階擴展行為。
進階擴展的優點
由於您的環境和需求各有不同,例如變更資料磁碟區、成本目標調整和 SLA 實作,叢集擴展可協助您調整叢集組態以達成目標。主要優點包括:
增強精細控制 – 使用效能設定的推出可讓您根據需求輕鬆調整叢集的擴展行為。您可以擴展以滿足運算資源的需求,或根據您的使用模式縮減以節省資源。
改善了成本最佳化 – 您可以選擇低使用率值,因為需求需要更輕鬆地滿足成本目標。
最佳化入門
設定和組態
使用這些步驟來設定效能索引並最佳化您的擴展策略。
下列命令會使用使用率最佳化
[1]
擴展策略更新現有叢集:aws emr put-managed-scaling-policy --cluster-id '
cluster-id
' \ --managed-scaling-policy '{ "ComputeLimits": { "UnitType": "Instances", "MinimumCapacityUnits": 1, "MaximumCapacityUnits": 2, "MaximumOnDemandCapacityUnits": 2, "MaximumCoreCapacityUnits": 2 }, "ScalingStrategy": "ADVANCED", "UtilizationPerformanceIndex": "1" }' \ --region "region-name
"屬性
ScalingStrategy
和UtilizationPerformanceIndex
是新的,且與擴展最佳化相關。您可以在 受管擴展政策中為UtilizationPerformanceIndex
屬性設定對應的值 (1、25、50、75 和 100),以選取不同的擴展策略。若要還原至預設受管擴展策略,請執行
put-managed-scaling-policy
命令,而不包含ScalingStrategy
和UtilizationPerformanceIndex
屬性。(這是選用項目。) 此範例示範如何執行此操作:aws emr put-managed-scaling-policy \ --cluster-id '
cluster-id
' \ --managed-scaling-policy '{"ComputeLimits":{"UnitType":"Instances","MinimumCapacityUnits":1,"MaximumCapacityUnits":2,"MaximumOnDemandCapacityUnits":2,"MaximumCoreCapacityUnits":2}}' \ --region "region-name
"
使用監控指標追蹤叢集使用率
從 EMR 7.3.0 版開始,Amazon EMR 發佈了四個與記憶體和虛擬 CPU 相關的新指標。您可以使用這些來測量跨擴展策略的叢集使用率。這些指標可用於任何使用案例,但您可以使用此處提供的詳細資訊來監控進階擴展。
可用的實用指標包括下列項目:
YarnContainersUsedMemoryGBSeconds – YARN 管理的應用程式所耗用的記憶體量。
YarnContainersTotalMemoryGBSeconds – 在叢集中配置給 YARN 的總記憶體容量。
YarnNodesUsedVCPUSeconds – YARN 管理的每個應用程式的總 VCPU 秒數。
YarnNodesTotalVCPUSeconds – 所耗用記憶體的彙總總 VCPU 秒數,包括尚未準備好紗線的時段。
您可以使用 Amazon CloudWatch Logs Insights 分析資源指標。功能包括專用查詢語言,可協助您擷取資源使用和擴展的特定指標。
下列查詢可在 Amazon CloudWatch 主控台中執行,使用指標數學計算平均記憶體使用率 (e1),方法是將耗用記憶體 (e2) 的執行中總和除以總記憶體 (e3) 的執行中總和:
{
"metrics": [
[ { "expression": "e2/e3", "label": "Average Mem Utilization", "id": "e1", "yAxis": "right" } ],
[ { "expression": "RUNNING_SUM(m1)", "label": "RunningTotal-YarnContainersUsedMemoryGBSeconds", "id": "e2", "visible": false } ],
[ { "expression": "RUNNING_SUM(m2)", "label": "RunningTotal-YarnContainersTotalMemoryGBSeconds", "id": "e3", "visible": false } ],
[ "AWS_EMR_ManagedResize", "YarnContainersUsedMemoryGBSeconds", "ACCOUNT_ID", "793684541905", "COMPONENT", "ManagerService", "JOB_FLOW_ID", "cluster-id", { "id": "m1", "label": "YarnContainersUsedMemoryGBSeconds" } ],
[ ".", "YarnContainersTotalMemoryGBSeconds", ".", ".", ".", ".", ".", ".", { "id": "m2", "label": "YarnContainersTotalMemoryGBSeconds" } ]
],
"view": "timeSeries",
"stacked": false,
"region": "region",
"period": 60,
"stat": "Sum",
"title": "Memory Utilization"
}
若要查詢日誌,您可以在 AWS 主控台中選取 CloudWatch。如需撰寫 CloudWatch 查詢的詳細資訊,請參閱《Amazon CloudWatch Logs 使用者指南》中的使用 CloudWatch Logs Insights 分析日誌資料。 Amazon CloudWatch
下圖顯示範例叢集的這些指標:

考量與限制
擴展策略的有效性可能會有所不同,這取決於您唯一的工作負載特性和叢集組態。建議您嘗試擴展設定,以判斷使用案例的最佳索引值。
Amazon EMR Advanced Scaling 特別適合批次工作負載。對於 SQL/資料倉儲和串流工作負載,我們建議您使用預設的受管擴展策略,以獲得最佳效能。
效能最佳化的擴展策略透過將高運算資源維持比預設受管擴展策略更長的期間,來實現更快速的任務執行。此模式會排定快速擴展的優先順序,以符合資源需求,進而更快完成任務。相較於預設策略,這可能會導致成本增加。
在叢集已最佳化且充分利用的情況下,啟用進階擴展可能不會提供額外的優勢。在某些情況下,啟用進階擴展可能會導致成本增加,因為工作負載可能會執行更久。在這些情況下,我們建議您使用預設的受管擴展策略,以確保最佳的資源配置和成本效益。
在受管擴展的背景下,重點會隨著設定從效能最佳化 【100】 調整為使用最佳化 【1】,而隨著執行時間而轉移到資源使用率。不過,請務必注意,結果可能會根據工作負載的性質和叢集的拓撲而有所不同。為了確保您的使用案例獲得最佳結果,強烈建議使用工作負載測試擴展策略,以判斷最適合的設定。
PerformanceUtilizationIndex 僅接受下列值:
1
25
50
75
100
提交的任何其他值都會導致驗證錯誤。