重新設定執行中叢集中的執行個體群組 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

重新設定執行中叢集中的執行個體群組

使用 Amazon 5.21.0 版及更新EMR版本,您可以重新設定叢集應用程式,並為執行中的叢集中的每個執行個體群組指定其他組態分類。若要這麼做,您可以使用 Amazon EMR主控台、 AWS Command Line Interface (AWS CLI) AWS 或 SDK。

當您在新的 Amazon EMR主控台中更新執行個體群組的應用程式組態時,主控台會嘗試合併新組態與現有組態,以建立新的作用中組態。在 Amazon EMR無法合併組態的異常情況下,主控台會提醒您。

提交執行個體群組的重新組態請求後,Amazon 會為新的組態規格EMR指派版本編號。您可以透過檢視 CloudWatch 事件來追蹤組態的版本編號或執行個體群組的狀態。如需詳細資訊,請參閱監控 CloudWatch 事件

注意

您只能覆寫而不能刪除叢集建立期間指定的叢集組態。如果現有組態與您提供的檔案之間存在差異,Amazon 會將手動修改的組態EMR重設為指定執行個體群組的叢集預設值SSH,例如您在使用 連線至叢集時修改的組態。

重新設定執行個體群組時的考量

重新組態動作

當您使用 Amazon EMR主控台、 AWS Command Line Interface (AWS CLI) 或 提交重新組態請求時 AWS SDK,Amazon 會EMR檢查現有的叢集上組態檔案。如果現有組態與您提供的檔案之間存在差異,Amazon 會EMR啟動重新組態動作、重新啟動一些應用程式,並將任何手動修改的組態重設為指定執行個體群組的叢集預設值SSH,例如您使用 連線到叢集時已修改的組態。

注意

Amazon 會在每個執行個體群組重新設定期間EMR執行一些預設動作。這些預設動作可能會和您進行的叢集自訂衝突,並導致重新組態失敗。如需有關如何對重新組態失敗進行疑難排解的資訊,請參閱 對執行個體群組重新組態進行疑難排解

Amazon EMR也會針對您在請求中指定的組態分類啟動重新組態動作。如需這些動作的完整清單,請參閱EMR您使用的 Amazon 版本的組態分類區段。例如,6.2.0 組態分類

注意

Amazon EMR版本指南只會列出從 Amazon 5.32.0 版和 6.2.0 EMR版開始的重新設定動作。

服務中斷

Amazon EMR遵循滾動程序,在任務和核心執行個體群組中重新設定執行個體。一次只會修改和重新啟動執行個體群組中 10% 的執行個體。這個程序要花更長的時間才能完成,但降低執行中叢集中應用程式可能故障的機會。

若要在YARN重新啟動期間執行YARN任務,您可以建立具有多個主節點的 Amazon EMR叢集,或在yarn-site組態分類trueyarn.resourcemanager.recovery.enabled設定為 。如需使用多個主節點的詳細資訊,請參閱高可用性。 YARN ResourceManager

應用程式驗證

Amazon 會在重新設定重新啟動程序後EMR檢查叢集上的每個應用程式是否正在執行。如果有任何應用程式無法使用,則整體重新組態操作會失敗。如果重新組態操作失敗,Amazon 會將組態參數EMR還原為先前的工作版本。

注意

若要避免重新組態失敗,建議您僅在您計劃使用的叢集上安裝應用程式。我們也建議您在提交重新組態請求之前,先確保所有叢集應用程式都運作狀態良好且正常執行。

重新組態的類型

您可以透過以下兩種方式之一重新設定執行個體群組:

  • 覆寫。預設重新組態方法,以及 Amazon 5.35.0 和 6.6.0 之前EMR版本中唯一可用的方法。此重新組態方法會使用新提交的組態集不加區別地覆寫任何叢集上的檔案。此方法會清除在重新設定 之外對組態檔案所做的任何變更API。

  • 合併。Amazon 5.35.0 版和 6.6.0 版及更新EMR版本支援重新設定方法,但 Amazon EMR主控台不支援該方法。此重新組態方法會將新提交的組態與叢集上已存在的組態合併。此選項僅新增或修改您提交的新組態。它會保留現有組態。

注意

Amazon 會EMR繼續覆寫一些必要的 Hadoop 組態,以確保服務正確執行。

限制

在重新設定執行中叢集中的執行個體群組時,請考慮下列限制:

  • 非YARN應用程式可能會在重新啟動期間失敗,或導致叢集問題,特別是未正確設定應用程式時。接近最大記憶體和CPU用量的叢集可能會在重新啟動程序後遇到問題。主要執行個體群組尤其如此。

  • 在調整執行個體群組大小時,您無法提交重新組態請求。如果在調整執行個體群組大小時起啟重新組態,則直到執行個體群組完成大小調整後,才能開始重新設定,反之亦然。

  • 重新設定執行個體群組後,Amazon 會EMR重新啟動應用程式,讓新組態生效。如果應用程式在重新組態期間正在使用中,則可能會發生作業失敗或其他未預期的應用程式行為。

  • 如果執行個體群組的重新組態失敗,Amazon 會將組態參數EMR還原為先前的工作版本。如果還原程序也失敗,您必須提交新的 ModifyInstanceGroup 要求才能從 SUSPENDED 狀態復原執行個體群組。

  • Amazon 5.23.0 版及更新EMR版本僅支援 Phoenix 組態分類的重新組態請求,Amazon 5.21.0 版或 5.22.0 EMR版則不支援。

  • Amazon 5.30.0 版及更新EMR版本僅支援HBase組態分類的重新組態請求,Amazon 5.23.0 至 5.29.0 EMR版則不支援。

  • Amazon EMR僅支援 Amazon 5.27.0 版及更新EMR版本中具有多個主要節點的 Amazon EMR叢集上的應用程式重新組態請求。

  • 具有多個主要節點的 Amazon EMR叢集不支援重新設定hdfs-encryption-zones分類或任何 Hadoop KMS組態分類。

  • Amazon EMR目前不支援需要重新啟動 的容量排程器的某些重新設定請求YARN ResourceManager。例如,您無法完全移除佇列。

在主控台中重新設定執行個體群組

注意

Amazon EMR主控台不支援合併類型重新設定。

  1. https://console.aws.amazon.com/emr 開啟 Amazon EMR主控台

  2. 在叢集清單中的名稱下,選擇您要重新設定的作用中叢集。

  3. 開啟叢集的叢集詳細資訊頁面,然後移至組態標籤。

  4. Filter (篩選條件) 下拉式清單中,選取您想要重新設定的執行個體群組。

  5. 重新設定下拉式功能表中,選擇在資料表中編輯,或在JSON檔案 中編輯

    • 在資料表中編輯 – 在組態分類資料表中,編輯現有組態的屬性和值,或選擇新增組態以提供其他組態分類。

    • 在JSON檔案中編輯 - 直接在 中輸入組態JSON,或使用短語語法 (以影子文字顯示)。否則,請URI為具有 JSON Configurations 物件的檔案提供 Amazon S3。

    注意

    組態分類資料表的來源資料欄指示組態是在建立叢集時,還是在為此執行個體群組指定額外組態時提供。您可以從這兩個來源編輯執行個體群組的組態。您無法刪除初始叢集組態,但可以覆寫執行個體群組的這類組態。

    您也可以直接在表格中新增或編輯巢狀組態分類。例如,若要提供 hadoop-env 的額外 export 子分類,請在表格中新增 hadoop.export 組態分類。然後,為此分類提供特定屬性和值。

  6. (選用) 選取 Apply this configuration to all active instance groups (將此組態套用到所有作用中的執行個體群組)

  7. 儲存變更。

使用 重新設定執行個體群組 CLI

使用 modify-instance-groups 命令,為執行中叢集中的執行個體群組指定新組態。

注意

在下列範例中,取代 <j-2AL4XXXXXX5T9> 使用您的叢集 ID,並取代 <ig-1xxxxxxx9> 您的執行個體群組 ID。

範例 – 取代執行個體群組的組態

下列範例參考名為 的組態JSON檔案,instanceGroups.json以編輯執行個體群組的YARNNodeManager 磁碟運作狀態檢查器屬性。

  1. 準備您的組態分類,並將其儲存為 instanceGroups.json,儲存在您將執行此命令的相同目錄中。

    [ { "InstanceGroupId":"<ig-1xxxxxxx9>", "Configurations":[ { "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.disk-health-checker.enable":"true", "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"100.0" }, "Configurations":[] } ] } ]
  2. 執行下列命令。

    aws emr modify-instance-groups --cluster-id <j-2AL4XXXXXX5T9> \ --instance-groups file://instanceGroups.json
範例 – 將組態新增至執行個體群組

如果想要將組態新增至執行個體群組,您必須在新的 ModifyInstanceGroup 請求中包含先前為該執行個體群組指定的所有組態。否則,會移除先前指定的組態。

下列範例為YARN NodeManager 虛擬記憶體檢查器新增 屬性。組態也包含磁碟YARN NodeManager 運作狀態檢查器先前指定的值,因此不會覆寫這些值。

  1. instanceGroups.json 中準備下列內容,並將其儲存在將執行此命令的相同目錄中。

    [ { "InstanceGroupId":"<ig-1xxxxxxx9>", "Configurations":[ { "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.disk-health-checker.enable":"true", "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"100.0", "yarn.nodemanager.vmem-check-enabled":"true", "yarn.nodemanager.vmem-pmem-ratio":"3.0" }, "Configurations":[] } ] } ]
  2. 執行下列命令。

    aws emr modify-instance-groups --cluster-id <j-2AL4XXXXXX5T9> \ --instance-groups file://instanceGroups.json
範例 – 使用合併類型重新組態將組態新增至執行個體群組

在想要使用預設覆寫重新組態方法新增組態時,您必須在新的 ModifyInstanceGroup 請求中包含先前為該執行個體群組指定的所有組態。否則,覆寫會移除您先前指定的組態。您無需使用合併重新組態來執行此動作。相反,您必須確保您的請求僅包含新組態。

下列範例為YARN NodeManager 虛擬記憶體檢查器新增 屬性。由於這是合併類型重新組態,因此不會覆寫先前為YARNNodeManager 磁碟運作狀態檢查器指定的值。

  1. instanceGroups.json 中準備下列內容,並將其儲存在將執行此命令的相同目錄中。

    [ {"InstanceGroupId":"<ig-1xxxxxxx9>", "ReconfigurationType" :"MERGE", "Configurations":[ {"Classification":"yarn-site", "Properties":{ "yarn.nodemanager.vmem-check-enabled":"true", "yarn.nodemanager.vmem-pmem-ratio":"3.0" }, "Configurations":[] } ] } ]
  2. 執行下列命令。

    aws emr modify-instance-groups --cluster-id <j-2AL4XXXXXX5T9> \ --instance-groups file://instanceGroups.json
範例 – 刪除執行個體群組的組態

若要刪除執行個體群組的組態,請提交排除了先前組態的新重新組態請求。

注意

您只能覆寫初始叢集組態。無法將它刪除。

例如,若要從上一個範例中刪除YARN NodeManager 磁碟運作狀態檢查器的組態,請提交instanceGroups.json具有下列內容的新 。

[ { "InstanceGroupId":"<ig-1xxxxxxx9>", "Configurations":[ { "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.vmem-check-enabled":"true", "yarn.nodemanager.vmem-pmem-ratio":"3.0" }, "Configurations":[] } ] } ]
注意

若要刪除最後一個重新組態請求中的所有組態,請提交組態陣列空白的重新組態請求。例如

[ { "InstanceGroupId":"<ig-1xxxxxxx9>", "Configurations":[] } ]
範例 – 在一個請求中重新設定執行個體群組並調整其大小

下列範例JSON示範如何在相同的請求中重新設定和調整執行個體群組的大小。

[ { "InstanceGroupId":"<ig-1xxxxxxx9>", "InstanceCount":5, "EC2InstanceIdsToTerminate":["i-123"], "ForceShutdown":true, "ShrinkPolicy":{ "DecommissionTimeout":10, "InstanceResizePolicy":{ "InstancesToTerminate":["i-123"], "InstancesToProtect":["i-345"], "InstanceTerminationTimeout":20 } }, "Configurations":[ { "Classification":"yarn-site", "Configurations":[], "Properties":{ "yarn.nodemanager.disk-health-checker.enable":"true", "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"100.0" } } ] } ]

使用 Java 重新設定執行個體群組 SDK

注意

在下列範例中,取代 <j-2AL4XXXXXX5T9> 使用您的叢集 ID,並取代 <ig-1xxxxxxx9> 您的執行個體群組 ID。

下列程式碼片段使用 AWS SDK for Java為執行個體群組提供了新組態。

AWSCredentials credentials = new BasicAWSCredentials("access-key", "secret-key"); AmazonElasticMapReduce emr = new AmazonElasticMapReduceClient(credentials); Map<String,String> hiveProperties = new HashMap<String,String>(); hiveProperties.put("hive.join.emit.interval","1000"); hiveProperties.put("hive.merge.mapfiles","true"); Configuration configuration = new Configuration() .withClassification("hive-site") .withProperties(hiveProperties); InstanceGroupModifyConfig igConfig = new InstanceGroupModifyConfig() .withInstanceGroupId("<ig-1xxxxxxx9>") .withReconfigurationType("MERGE"); .withConfigurations(configuration); ModifyInstanceGroupsRequest migRequest = new ModifyInstanceGroupsRequest() .withClusterId("<j-2AL4XXXXXX5T9>") .withInstanceGroups(igConfig); emr.modifyInstanceGroups(migRequest);

下列程式碼片段透過提供空的組態陣列,來刪除先前為執行個體群組指定的組態。

List<Configuration> configurations = new ArrayList<Configuration>(); InstanceGroupModifyConfig igConfig = new InstanceGroupModifyConfig() .withInstanceGroupId("<ig-1xxxxxxx9>") .withConfigurations(configurations); ModifyInstanceGroupsRequest migRequest = new ModifyInstanceGroupsRequest() .withClusterId("<j-2AL4XXXXXX5T9>") .withInstanceGroups(igConfig); emr.modifyInstanceGroups(migRequest);

對執行個體群組重新組態進行疑難排解

如果執行個體群組的重新設定程序失敗,Amazon 會EMR還原重新設定,並使用 Amazon CloudWatch 事件記錄失敗訊息。此事件提供重新組態失敗的簡短摘要。它會列出重新組態失敗的執行個體,以及對應的失敗訊息。以下是失敗訊息範例。

The reconfiguration operation for instance group ig-1xxxxxxx9 in Amazon EMR cluster j-2AL4XXXXXX5T9 (ExampleClusterName) failed at 2021-01-01 00:00 UTC and took 2 minutes to fail. Failed configuration version is example12345. Failure message: Instance i-xxxxxxx1, i-xxxxxxx2, i-xxxxxxx3 failed with message "This is an example failure message".

若要收集有關重新組態失敗的更多資料,您可以檢查節點佈建日誌。當您收到類似如下訊息時,這樣做特別有用。

i-xxxxxxx1 failed with message “Unable to complete transaction and some changes were applied.”
On the node
透過連接至節點存取節點佈建日誌
  1. 使用 SSH 連線到重新設定失敗的節點。如需指示,請參閱 Amazon EC2 Linux 執行個體使用者指南 中的連線至您的 Linux 執行個體

  2. 導覽至下列目錄,其中包含節點佈建日誌檔案。

    /mnt/var/log/provision-node/
  3. 開啟 reports 子目錄,並搜尋節點佈建報告以進行重新組態。reports 目錄會依重新設定版本編號、全域唯一識別碼 (UUID)、Amazon EC2執行個體 IP 地址和時間戳記來組織日誌。每個報告都是壓縮YAML檔案,其中包含重新組態程序的詳細資訊。

    以下是報告檔案名稱和路徑的範例。

    /reports/2/ca598xxx-cxxx-4xxx-bxxx-6dbxxxxxxxxx/ip-10-73-xxx-xxx.ec2.internal/202104061715.yaml.gz
  4. 您可以使用檔案檢視器 (例如 zless) 檢查報告,如下列範例所示。

    zless 202104061715.yaml.gz
Amazon S3
使用 Amazon S3 存取節點佈建日誌
  1. 登入 AWS Management Console 並在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 當您設定叢集以封存日誌檔案時,開啟指定的 Amazon S3 儲存貯體。

  3. 導覽至下列資料夾,其中包含節點佈建日誌檔案:

    amzn-s3-demo-bucket/elasticmapreduce/<cluster id>/node/<instance id>/provision-node/
  4. 開啟 reports 資料夾,並搜尋節點佈建報告以進行重新組態。reports 資料夾會依重新設定版本編號、全域唯一識別碼 (UUID)、Amazon EC2執行個體 IP 地址和時間戳記來組織日誌。每個報告都是壓縮YAML檔案,其中包含重新組態程序的詳細資訊。

    以下是報告檔案名稱和路徑的範例。

    /reports/2/ca598xxx-cxxx-4xxx-bxxx-6dbxxxxxxxxx/ip-10-73-xxx-xxx.ec2.internal/202104061715.yaml.gz
  5. 若要檢視日誌檔案,您可以將其作為文字檔案從 Amazon S3 下載至本機電腦。如需指示,請參閱下載物件

每個日誌檔案都包含關聯重新組態的詳細佈建報告。若要尋找錯誤訊息資訊,您可以搜尋報告的 err 日誌層級。報告格式取決於叢集EMR上的 Amazon 版本。

下列範例顯示 Amazon 5.32.0 和 6.2.0 之前EMR版本的錯誤資訊。

- !ruby/object:Puppet::Util::Log level: !ruby/sym err tags: - err message: "Example detailed error message." source: Puppet time: 2021-01-01 00:00:00.000000 +00:00

Amazon EMR5.32.0 和 6.2.0 版及更新版本改用下列格式。

- level: err message: 'Example detailed error message.' source: Puppet tags: - err time: '2021-01-01 00:00:00.000000 +00:00' file: line: