當您的業務量需求不斷波動時,建議您開啟Auto Scaling功能並配置相應的伸縮規則,以便於E-MapReduce(簡稱EMR)可以按業務量波動增加或減少Task節點。確保作業完成的同時,可以節省成本。本文為您介紹如何在EMR控制台配置Auto Scaling。
前提條件
已建立Hadoop叢集,建立詳情請參見建立叢集。
注意事項
Auto Scaling配置可以指定伸縮的節點的硬體規格。您可以在Auto Scaling功能未開啟的情況下配置具體執行個體規格。如果特殊情況確實需要修改,可以關閉Auto Scaling功能後,再次開啟。
系統會根據您選擇的vCPU和記憶體規格,自動匹配出滿足條件的執行個體,並顯示在備選執行個體列表中。您需要選中備選的執行個體,以便叢集按照已選的執行個體規格進行伸縮。
為避免由於ECS庫存不足造成的Auto Scaling失敗,您最多可以選擇3種ECS執行個體。
無論是選擇高效雲端硬碟還是SSD雲端硬碟,資料盤最小設定為40 GB。
按負載伸縮是雲端式監控服務(CMS)產品功能提供的一種動態管理伸縮組的方式。在您成功配置Auto Scaling規則後,系統將自動在CloudMonitor服務體系內構建相應的警示規則。為確保EMRAuto Scaling活動的平穩運行,請勿對系統自動產生的警示規則進行修改、刪除或禁用等操作。
操作步驟
進入Auto Scaling頁面。
在頂部功能表列處,根據實際情況選擇地區和資源群組。
在EMR on ECS頁面,單擊目的地組群的叢集ID。
單擊上方的Auto Scaling頁簽。
建立Auto Scaling組。
在伸縮配置頁簽,單擊建立Auto Scaling機器組。
說明Auto Scaling組只能在Auto Scaling模組下進行管理和配置,無法在節點管理模組下進行操作。
在新增Auto Scaling機器組對話方塊中,輸入機器組名稱,單擊確定。
在伸縮配置頁簽,單擊目標機器組操作列的配置規則。
在Auto Scaling配置面板的基礎資訊地區,配置相關參數。
參數
描述
最大執行個體數
Auto Scaling組的Task節點上限。一旦達到上限,即使滿足Auto Scaling的規則,也不會繼續執行Auto Scaling。最大執行個體數的上限為1000。
最小執行個體數
Auto Scaling的Task節點下限。如果Auto Scaling規則中設定的增加或減少Task節點數小於此處設定的最小執行個體數,則在首次執行時,叢集會以最小節點數為準進行伸縮。
例如,您設定彈性擴容規則為每天零點動態添加1個節點,最小節點數為3,則系統在第一天的零點時會添加3個節點,以滿足最小節點數的要求。
優雅下線
您可以設定逾時時間,下線YARN上作業所在的Task節點。如果Task節點沒有運行YARN上的作業或者作業運行超出您設定的逾時時間,則下線Task節點。逾時時間最大值為3600秒。
重要開啟優雅下線時,請先將YARN配置項yarn.resourcemanager.nodes.exclude-path的值修改為/etc/ecm/hadoop-conf/yarn-exclude.xml。
修改逾時時間後,請在業務低峰期重啟YARN ResourceManager,以使修改後的逾時時間生效。
在Auto Scaling配置面板的執行個體地區,選擇執行個體方式、計費類型和執行個體規格。
單一計費模式
系統會根據您選擇的vCPU和記憶體規格,自動匹配出滿足條件的執行個體,並顯示在執行個體規格地區。您需要選中執行個體規格地區的執行個體,以便叢集按照已選的執行個體規格進行伸縮。單一計費模式支援以下兩種計費類型:
隨用隨付
勾選執行個體的順序決定顯示節點的優先順序,勾選執行個體後下方地區會顯示每一個執行個體每小時的價格(包含EMR執行個體價格和ECS執行個體價格)。
搶佔式執行個體
重要當您的作業對SLA(Service Level Agreement)要求較高時,請慎用該執行個體。因為競價失敗等原因會導致搶佔式執行個體被釋放,所以請謹慎使用搶佔式執行個體。
勾選執行個體的順序決定顯示節點的優先順序,每一個執行個體後會顯示該執行個體在隨用隨付時每小時的價格。您還可以設定每台執行個體的上限價格,當滿足規則時顯示該類執行個體。搶佔式執行個體詳情,請參見什麼是搶佔式執行個體。
成本最佳化模式
該模式下,您可以制定更詳細的成本控制策略,在成本和穩定性之間進行調整和權衡。
參數
描述
組內最小按量節點數量
Auto Scaling組需要的按量執行個體的最小個數,當伸縮組中按量執行個體個數小於該值時,將優先建立按量執行個體。
按量節點所佔比例
Auto Scaling組內最小按量節點數量滿足之後,建立執行個體中按量執行個體所佔的比例。
最低價的多個執行個體規格
指定最低價的多個執行個體規格種類數。當建立搶佔執行個體時,將在這些規格種類中進行均衡分布。最大值為3。
搶佔執行個體補償
是否開啟競價執行個體的補償機制。開啟搶佔執行個體補償後,在競價執行個體被回收前5分鐘左右,將主動替換掉當前競價執行個體。
當您不指定組內最小按量節點數量、按量節點所佔比例和最低價的多個執行個體規格參數時,您建立的是普通成本最佳化伸縮組。否則,您建立的是成本最佳化混合執行個體伸縮組。成本最佳化混合執行個體伸縮組與普通成本最佳化伸縮組在介面和功能方面是完全相容的。
對於成本最佳化混合執行個體伸縮組,您可以通過合理制定混合執行個體策略,以實現與普通成本最佳化伸縮組完全相同的行為。例如:
普通成本最佳化伸縮組建立的全為按量執行個體
指定組內最小按量節點數量=0,按量節點所佔比例=100,最低價的多個執行個體規格=1。
普通成本最佳化伸縮組優先建立競價執行個體
指定組內最小按量節點數量=0,按量節點所佔比例=0,最低價的多個執行個體規格=1。
在Auto Scaling配置面板的觸發方式地區,選擇觸發方式和規則。
規定時間伸縮:如果Hadoop叢集計算量在一定的周期記憶體在明顯的波峰和波穀,則您可以設定在每天、每周或每月的固定時間段擴充一定量的Task節點來補充計算能力,這樣在保證作業完成的同時,也可以節省成本。
伸縮規則分為擴容規則和縮容規則,本樣本以擴容規則為例介紹。叢集關閉Auto Scaling功能後,所有規則會被清空,再次開啟Auto Scaling功能時,需要重新設定伸縮規則。
參數
描述
規則名稱
在同一個叢集中,伸縮規則名稱(包括擴容規則和縮容規則)不允許重複。
時間執行規則
重複執行:您可以選擇每天、每周或每月的某一特定時間點執行一次Auto Scaling動作。
只執行一次:叢集在指定的時間點執行一次Auto Scaling動作。
執行時間
選擇規則執行的時間。
規則有效期間
選擇規則的有效期間。
重試到期時間(秒)
Auto Scaling在到達指定時間時可能由於各種原因不能執行,通過設定重試到期時間,系統會在該時間範圍內每隔30秒嘗試執行一次,直到在滿足條件時執行伸縮。設定範圍為0~21600秒。
假設在指定時間段需要進行Auto Scaling動作A,如果有其他Auto Scaling動作B正在執行或正處在冷卻期,則動作A無法執行。在您設定的重試到期時間內,每隔30秒會重試一次,嘗試執行A,一旦條件滿足,叢集會立刻執行Auto Scaling。
調整台數
規則被觸發時,叢集每次增加Task節點數量。
冷卻時間(秒)
每次Auto Scaling動作執行完成,到可以再次進行Auto Scaling的時間間隔。在冷卻時間內,不會發生Auto Scaling動作。
規定負載伸縮:如果您無法準確的預估巨量資料計算的波峰和波穀,則可以使用按負載伸縮配置的策略。
伸縮規則分為擴容規則和縮容規則,本樣本以擴容規則為例介紹。叢集關閉Auto Scaling功能後,所有規則會被清空,再次開啟Auto Scaling功能時,需要重新設定伸縮規則。切換伸縮策略時(例如,從按負載伸縮切換到按時間伸縮),原策略下的伸縮規則處於失效狀態,不會被觸發,但已經擴容的節點會繼續保留,不會被釋放。
參數
描述
規則名稱
在同一個叢集中,伸縮規則名稱(包括擴容規則和縮容規則)不允許重複。
叢集負載指標
在YARN的負載指標中擷取,詳細資料請參見Hadoop官方文檔。
E-MapReduceAuto Scaling指標與YARN負載指標的對應關係,請參見E-MapReduceAuto Scaling指標與YARN所屬服務的對應關係。
統計周期
您選定的叢集負載指標在一個統計周期內,按照選定的彙總維度(平均值、最大值和最小值),達到觸發閾值為一次觸發。
統計規則
重複幾次後擴容
負載指標彙總後達到閾值觸發的次數,達到該次數後觸發叢集Auto Scaling的動作。
擴容(台)
規則被觸發時,叢集每次執行增加的Task節點數量。
冷卻時間(秒)
每次Auto Scaling動作執行完成,到可以再次進行Auto Scaling的時間間隔。在冷卻時間內,即使滿足Auto Scaling條件也不會發生Auto Scaling動作。即忽略本次在冷卻時間內觸發的Auto Scaling動作,直到下一次滿足伸縮條件且不在冷卻時間內再執行。
單擊儲存。
您可以根據實際情況,開啟Auto Scaling。開啟Auto Scaling詳情,請參見開啟或關閉Auto Scaling(僅Hadoop叢集類型)。
E-MapReduceAuto Scaling指標與YARN所屬服務的對應關係
E-MapReduceAuto Scaling指標 | 所屬服務 | 說明 |
YARN.AvailableVCores | YARN | 可供分配的虛擬核心數。 |
YARN.PendingVCores | YARN | 待分配的虛擬核心數。 |
YARN.AllocatedVCores | YARN | 已指派的虛擬核心數。 |
YARN.ReservedVCores | YARN | 預留的虛擬核心數。 |
YARN.AvailableMemory | YARN | 可供分配的記憶體量。單位:MB。 |
YARN.PendingMemory | YARN | 待分配的記憶體量。單位:MB。 |
YARN.AllocatedMemory | YARN | 已指派的記憶體量。單位:MB。 |
YARN.ReservedMemory | YARN | 預留的記憶體量。單位:MB。 |
YARN.AppsRunning | YARN | 運行中的任務數。 |
YARN.AppsPending | YARN | 掛起的任務數。 |
YARN.AppsKilled | YARN | 終止的任務數。 |
YARN.AppsFailed | YARN | 失敗的任務數。 |
YARN.AppsCompleted | YARN | 完成的任務數。 |
YARN.AppsSubmitted | YARN | 提交的任務數。 |
YARN.AllocatedContainers | YARN | 已指派的容器數。 |
YARN.PendingContainers | YARN | 待分配的容器數。 |
YARN.ReservedContainers | YARN | 預留的容器數。 |
YARN.MemoryAvailablePrecentage | YARN | 剩餘記憶體的百分比 |
YARN.ContainerPendingRatio | YARN | 待分配的容器數與已指派的容器數的比率 |