本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以使用引導操作安裝其他軟體,或自訂叢集執行個體的組態。引導動作是 Amazon 使用 Amazon Linux Amazon Machine Image () EMR啟動執行個體後,在叢集上執行的指令碼AMI。引導操作會在 Amazon EMR 安裝您在建立叢集時指定的應用程式之前,以及叢集節點開始處理資料之前執行。如果您將節點新增到執行中的叢集,引導操作也會以同樣的方式在這些節點上執行。您可以建立自訂引導操作,並且在建立叢集時指定它們。
Amazon 4.x EMRAMI版不支援 Amazon 2.x 版和 3.x EMR版的大多數預先定義引導動作。例如,Amazon 4.x EMR版configure-daemons
不支援 configure-Hadoop
和 。反之,Amazon 4.x EMR版原生提供此功能。如需如何將引導動作從 Amazon 2.x 和 3.x EMRAMI版遷移至 Amazon 4.x EMR版的詳細資訊,請參閱《Amazon EMR版本指南》中的使用舊版 AMI Amazon 自訂叢集和應用程式組態EMR。
引導操作基本概念
根據預設,引導操作會以 Hadoop 使用者身分執行。您可以使用 sudo
以根權限執行引導操作。
所有 Amazon EMR管理介面都支援引導動作。您最多可以指定每個叢集 16 個引導動作,方法是從 主控台提供多個bootstrap-actions
參數 AWS CLI,或 API。
從 Amazon EMR主控台,您可以在建立叢集時選擇性地指定引導動作。
使用 時CLI,您可以在使用 create-cluster
命令建立叢集時新增 --bootstrap-actions
參數,EMR將引導動作指令碼的參考傳遞給 Amazon。
--bootstrap-actions Path="s3://
amzn-s3-demo-bucket
/filename
",Args=[arg1
,arg2
]
如果引導動作傳回非零錯誤碼,Amazon 會將其EMR視為失敗,並終止執行個體。如果太多執行個體的引導動作失敗,則 Amazon 會EMR終止叢集。如果只有幾個執行個體失敗,Amazon 會EMR嘗試重新配置失敗的執行個體並繼續。使用叢集 lastStateChangeReason
錯誤代碼來識別引導操作造成的失敗。
有條件地執行引導操作
為了僅在主節點上執行引導操作,您可以使用具有某些邏輯的自訂引導操作來判斷節點是否為主節點。
#!/bin/bash
if grep isMaster /mnt/var/lib/info/instance.json | grep false;
then
echo "This is not master node, do nothing,exiting"
exit 0
fi
echo "This is master, continuing to execute script"
# continue with code logic for master node below
下列輸出將從核心節點列印。
This is not master node, do nothing, exiting
下列輸出將從主節點列印。
This is master, continuing to execute script
若要使用此邏輯,請將您的引導操作 (包括上述程式碼) 上傳至 Amazon S3 儲存貯體。在 上 AWS CLI,將 --bootstrap-actions
參數新增至 aws emr create-cluster
API 呼叫,並將您的引導指令碼位置指定為 的值Path
。
關閉動作
引導操作指令碼可藉由將指令碼寫入 /mnt/var/lib/instance-controller/public/shutdown-actions/
目錄的方式,建立一個或多個關機動作。當叢集終止時,此目錄中的所有指令碼就會平行執行。每個指令碼都必須執行並在 60 秒內完成。
如果節點終止時發生錯誤,則不保證關機動作指令碼會執行。
注意
使用 Amazon 4EMR.0 版及更新版本時,您必須在主節點上手動建立/mnt/var/lib/instance-controller/public/shutdown-actions/
目錄。此目錄並非根據存在的目錄;不過,建立之後,此目錄中的指令碼無論如何都會在關機前執行。如需有關連接主節點以建立目錄的詳細資訊,請參閱 使用 連線至 Amazon EMR叢集主節點 SSH。
使用自訂引導操作
您可以建立自訂指令碼來執行自訂的引導操作。任何 Amazon EMR 介面都可以參考自訂引導動作。
注意
為了獲得最佳效能,建議您EMR將自訂引導動作、指令碼和其他要與 Amazon 搭配使用的檔案存放在與 AWS 區域 叢集相同的 Amazon S3 儲存貯體中。
新增自訂引導操作
使用主控台建立具有引導動作的叢集
-
登入 AWS Management Console,並在 https://console.aws.amazon.com/emr
開啟 Amazon EMR主控台。 -
在左側導覽窗格中的 EMR EC2下,選擇叢集,然後選擇建立叢集。
-
在引導操作下,選擇新增以指定動作的名稱、指令碼位置和選用引數。選取新增引導操作。
-
您也可以選擇新增更多引導操作。
-
選擇適用於您的叢集的任何其他選項。
-
若要啟動您的叢集,請選擇建立叢集。
使用自訂引導操作將物件從 Amazon S3 複製到每個節點
您可以使用引導操作,在應用程式安裝之前將物件從 Amazon S3 複製到叢集中的每個節點。 AWS CLI 安裝在叢集的每個節點上,因此您的引導動作可以呼叫 AWS CLI 命令。
下列範例示範簡單的引導操作指令碼,這會將檔案 myfile.jar
從 Amazon S3 複製到每個叢集節點上的本機資料夾 /mnt1/myfolder
中。指令碼會儲存至 Amazon S3,其檔案名稱為 copymyfile.sh
且包含下列內容。
#!/bin/bash
aws s3 cp s3://amzn-s3-demo-bucket/myfilefolder/myfile.jar /mnt1/myfolder
當您啟動叢集時,您會指定指令碼。下列 AWS CLI 範例示範了這一點:
aws emr create-cluster --name "Test cluster" --release-label
emr-7.5.0
\ --use-default-roles --ec2-attributes KeyName=myKey \ --applications Name=Hive Name=Pig \ --instance-count 3 --instance-type m5.xlarge \ --bootstrap-actions Path="s3://amzn-s3-demo-bucket/myscriptfolder/copymyfile.sh"