本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
叢集組態的最佳實務
您可以使用本節中的指導來協助您判斷EMR叢集中每個節點類型所要佈建的執行個體類型、購買選項和儲存容量。
您應使用哪一種執行個體類型?
有數種方法可將 Amazon EC2 執行個體新增至叢集。您應選擇的方法取決於您是使用執行個體群組組態還是叢集的執行個體機群組態。
計劃叢集執行個體的其中一種方法即是使用代表範例資料集來執行測試叢集並監控叢集中節點的使用率。如需詳細資訊,請參閱檢視和監控叢集。另一個方式是計算您考慮使用之執行個體的容量,並再將該值與您的資料大小進行比對。
一般而言,指派任務的主節點類型不需要具有較大處理能力的EC2執行個EC2體;處理任務和存放資料的核心節點類型的 Amazon 執行個體需要處理能力和儲存容量;不存放資料的任務節點類型的 Amazon EC2 執行個體只需要處理能力。HDFS如需有關可用 Amazon EC2 執行個體及其組態的指導方針,請參閱配置 Amazon EC2 實例。
下列準則適用於大多數 Amazon EMR 叢集。
-
您在每個 AWS 帳戶上執行的隨需 Amazon EC2 執行個體總數有 v CPU 限制 AWS 區域。有關 v CPU 限制以及如何為您的帳戶請求提高限制的詳細資訊,請參閱 Amazon Linux 執行個體EC2使用者指南中的隨需執行個體。
-
主節點通常不會有大量的運算需求。對於具有大量節點的叢集,或具有特別部署在主要節點上的應用程式 (JupyterHub、Hue 等) 的叢集,可能需要較大的主要節點,並有助於改善叢集效能。例如,請考慮將 m5.xlarge 執行個體用於小型叢集 (50 個或更少節點),並針對較大的叢集增加到較大的執行個體類型。
-
核心和任務節點的運算需求取決於的應用程式所執行的處理類型。許多工作都可以在一般用途執行個體類型上執行,這些執行個體類型在磁碟空間和輸入/輸出方面提供平衡的CPU效能。運算密集型叢集可能會受益於在高執行個體上執行,而高CPU執行個體的執行個體的比例大於。CPU RAM資料庫和記憶體快取應用程式可能受益於在記憶體密集型執行個體上執行。在叢集運算執行個體上執行,可提供比例較高的CPU資源並提升網路效能NLP,例如剖析和機器學習等網路密集CPU型應用程式和機器學習,這些應用程式可以受益於執行
-
如果叢集的不同階段有不同的容量需求,您可以先從小量的核心節點開始,然後增加或降低任務節點數以滿足任務流程的各種容量需求。
-
您可以處理的資料量取決於核心節點的容量與處理期間做為輸入和輸出之資料的大小。中繼的輸入和輸出資料集在處理期間皆位於叢集上。
您應何時使用 Spot 執行個體?
在 Amazon 中啟動叢集時EMR,您可以選擇在 Spot 執行個體上啟動主要、核心或任務執行個體。由於每種執行個體群組在叢集中扮演不同的角色,因此會在 Spot 執行個體上啟動每個節點類型。叢集執行時,您無法變更執行個體的購買選項。若要將隨需執行個體變更為 Spot 執行個體 (或反之亦然),對於主節點和核心節點,您必須終止叢集並啟動新的叢集。對於任務節點,您可以啟動新的任務執行個體群組或執行個體機群,並移除舊的任務執行個體群組或執行個體機群。
Amazon EMR 設定可防止因任務節點 Spot 執行個體終止而導致任務失敗
由於競價型執行個體通常用於執行任務節點,因此 Amazon EMR 具有排程任YARN務的預設功能,因此當 Spot 執行個體上執行的任務節點終止時,執行任務不會失敗。Amazon EMR 透過允許應用程式主程序僅在核心節點上執行來達成此目的。應用程式主程序會控制執行中的作業,而且需要在作業生命週期內保持活動狀態。
Amazon 5.19.0 及更高EMR版本使用內建的YARN節點標籤yarn-site
和capacity-scheduler
組態分類中的屬性,以便YARN容量排程器和公平排程器利用節點標籤。Amazon EMR 會自動為核心節點加上CORE
標籤,並設定屬性,以便只在具有CORE標籤的節點上排程應用程式主節點。手動修改紗線網站和容量排程器組態分類中的相關內容,或直接在關聯XML檔案中修改相關內容,可能會中斷此功能或修改此功能。
Amazon EMR 預設會設定下列屬性和值。設定這些屬性時請務必小心。
注意
從 Amazon EMR 6.x 發行系列開始,YARN節點標籤功能預設為停用。依預設,應用程式主程序可以在核心和任務節點上執行。您可以透過設定下列屬性來啟用YARN節點標籤功能:
-
yarn.node-labels.enabled: true
-
yarn.node-labels.am.default-node-label-expression: 'CORE'
-
所有節點上的 yarn-site (yarn-site.xml)
-
yarn.node-labels.enabled: true
-
yarn.node-labels.am.default-node-label-expression: 'CORE'
-
yarn.node-labels.fs-store.root-dir: '/apps/yarn/nodelabels'
-
yarn.node-labels.configuration-type: 'distributed'
-
-
主節點和核心節點上的 yarn-site (yarn-site.xml)
-
yarn.nodemanager.node-labels.provider: 'config'
-
yarn.nodemanager.node-labels.provider.configured-node-partition: 'CORE'
-
-
所有節點上的 capacity-scheduler (capacity-scheduler.xml)
-
yarn.scheduler.capacity.root.accessible-node-labels: '*'
-
yarn.scheduler.capacity.root.accessible-node-labels.CORE.capacity: 100
-
yarn.scheduler.capacity.root.default.accessible-node-labels: '*'
-
yarn.scheduler.capacity.root.default.accessible-node-labels.CORE.capacity: 100
-
Spot 執行個體上的主節點
主節點會控制和引導叢集。主節點終止時,叢集便會結束,因此如果您執行的叢集可接受突然的終止時,您應僅以 Spot 執行個體的形式啟動主節點。如果您測試的是新應用程式就可能適用此狀況,讓叢集定期將資料保存在外部存放區 (例如 Amazon S3) 或執行的是成本較確保叢集完成還重要的叢集。
當您以 Spot 執行個體啟動主要執行個體群組,叢集在 Spot 執行個體要求履行前都不會啟動。這是在選取 Spot 價格上限時需考量的因素。
您只能在啟動叢集時新增 Spot 執行個體主節點。您無法從執行中叢集新增或移除主節點。
一般而言,如果您以 Spot 執行個體的形式執行整個叢集 (所有執行個體群組),您只會以 Spot 執行個體的形式執行主節點。
Spot 執行個體上的核心節點
核心節點處理數據和存儲信息使用HDFS. 終止核心執行個體會導致資料遺失的風險。基於這個原因,您應該只在可以容忍部分HDFS資料遺失的情況下在 Spot 執行個體上執行核心節點。
當您將核心執行個體群組啟動為 Spot 執行個體時,Amazon 會EMR等待它佈建所有請求的核心執行個體,然後再啟動執行個體群組。換句話說,如果您請求六個 Amazon EC2 執行個體,而且只有五個可用於或低於最高 Spot 價格的執行個體,則執行個體群組將不會啟動。Amazon 會EMR繼續等待,直到六個 Amazon EC2 執行個體都可用,或直到您終止叢集為止。您可以變更核心執行個體群組中的 Spot 執行個體數量,以便增加執行中叢集的容量。如需使用執行個體群組以及 Spot 執行個體如何使用執行個體機群的詳細資訊,請參閱使用執行個體機群或統一執行個體群組建立叢集。
Spot 執行個體上的任務節點
任務節點會處理資料,但不會在中保存持續性資料HDFS。如果因為 Spot 價格已超出您的 Spot 價格上限,而導致任務節點終止,則資料不會遺失,且對您叢集的影響可降到最低。
當您以 Spot 執行個體的形式啟動一或多個任務執行個體群組時,Amazon 會使用最高 Spot 價格EMR佈建盡可能多的任務節點。這表示,如果您請求具有六個節點的任務執行個體群組,且只有五個 Spot 執行個體可用於或低於最高 Spot 價格,Amazon 會EMR啟動具有五個節點的執行個體群組,如果可能的話,稍後再新增第六個節點。
以 Spot 執行個體的形式啟動任務執行個體群組是一種策略,可讓您擴展叢集容量,並同時將成本降到最低。如果您以隨需執行個體的形式啟動主節點和核心執行個體群組,即可保證其容量足以執行叢集。您可以視需要將任務執行個體新增到您的任務執行個體群組,來處理尖峰流量或加快資料處理的速度。
您可以使用控制台、 AWS CLI或來新增或移除任務節點API。您也可以新增額外的任務群組,但您無法在建立任務群組之後將其移除。
應用程式案例的執行個體組態
下表是節點類型購買選項和設定的快速參考,這些選項和設定通常適用於各種應用程式案例。選擇連結檢視有關每個案例類型的詳細資訊。
應用程式案例 | 主節點購買選項 | 核心節點購買選項 | 任務節點購買選項 |
---|---|---|---|
長時間執行的叢集和資料倉儲 | On-Demand | 隨需執行個體或執行個體機群的混合 | Spot 或執行個體機群的混合 |
成本導向工作負載 | Spot | Spot | Spot |
資料關鍵工作負載 | On-Demand | On-Demand | Spot 或執行個體機群的混合 |
應用程式測試 | Spot | Spot | Spot |
在數種情況下,Spot 執行個體對於執行 Amazon EMR 叢集很有用。
長時間執行的叢集和資料倉儲
如果您執行的持續性 Amazon EMR 叢集具有可預測的運算容量變化 (例如資料倉儲),則可以使用 Spot 執行個體以較低的成本處理尖峰需求。您可以隨需執行個體的形式啟動主要和核心執行個體群組來處理正常的容量,並以 Spot 執行個體的形式啟動任務執行個體群組來處理您的最高負載需求。
成本導向工作負載
如果您執行的是暫時性叢集,其中降低成本較完成時間更為重要,以及遺失部分工作是可接受的,您可以 Spot 執行個體的形式執行整個叢集 (主要、核心和任務執行個體群組),來獲得節省最多成本的好處。
資料關鍵工作負載
如果您執行的是叢集,其中降低成本較完成時間更為重要,但不可遺失部分工作時,以隨需執行個體方式來執行主要和核心執行個體群組,並透過 Spot 執行個體的一或多個任務執行個體群組補充。將主要執行個體和核心執行個體群組做為隨需執行個體執行個體,可確保您的資料保存在中,而HDFS且叢集不會因競價型市場波動而終止,同時提供將任務執行個體群組作為 Spot 執行個體執行所產生的成本節省。
應用程式測試
當您測試新的應用程式,以便準備讓其在生產環境中啟動,您可透過 Spot 執行個體的形式執行整個叢集 (主要、核心和任務執行個體群組) 來降低測試成本。
計算叢集所需的HDFS容量
叢集可用的HDFS儲存容量取決於下列因素:
-
用於核心節點的 Amazon EC2 執行個體數量。
-
所使用執行個體類型的 Amazon EC2 執行個體存放區容量。如需執行個體存放區磁碟區的詳細資訊,請參閱 Amazon EC2使用者指南中的 Amazon Amazon EC2 執行個體存放區。
-
附加至核心節點的 Amazon EBS 磁碟區數量和大小。
-
複寫因素,說明每個資料區塊如何儲存在RAID類似HDFS的備援中。根據預設,對 10 個或多個核心節點的叢集複寫係數是三,對於 4-9 個核心節點的叢集是二,以及三個或較少的節點的叢集是一。
若要計算叢集的HDFS容量,請為每個核心節點新增執行個體存放磁碟區容量至 Amazon EBS 儲存容量 (如果已使用)。將結果乘以核心節點數,然後根據核心節點數將總數除以複寫係數。例如,具有 10 個核心節點類型為 i2.xlarge 的叢集,其中有 800 GB 的執行個體儲存體,沒有任何連接的 Amazon EBS 磁碟區,總共有約 2,666 GB 的可用空間 HDFS (10 個節點 x 800 GB ÷ 3 個複寫因素)。
如果計算的HDFS容量值小於您的資料,您可以透過下列方式增加HDFS儲存空間:
-
使用其他 Amazon EBS 磁碟區建立叢集,或將具有連接 Amazon 磁EBS碟區的執行個體群組新增至現有叢集
-
新增更多核心節點
-
選擇具有更大儲存容量的 Amazon EC2 執行個體類型
-
使用資料壓縮
-
變更 Hadoop 組態設定以減少複寫係數
降低複寫因素應謹慎使用,因為這會降低HDFS資料備援,以及叢集從遺失或損毀的HDFS區塊復原的能力。