本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立引導動作,以使用 Amazon EMR 叢集安裝其他軟體
您可以使用引導操作安裝其他軟體,或自訂叢集執行個體的組態。引導操作是在 Amazon EMR 使用 Amazon Linux Amazon Machine Image (AMI) 啟動執行個體之後,於叢集上執行的指令碼。引導操作執行的時機是在 Amazon EMR 安裝您建立叢集時指定的應用程式之前,以及叢集節點開始處理資料之前。如果您將節點新增到執行中的叢集,引導操作也會以同樣的方式在這些節點上執行。您可以建立自訂引導操作,並且在建立叢集時指定它們。
Amazon EMR 4.x 版不支援大多數針對 Amazon EMR AMI 2.x 和 3.x 版預先定義的引導操作。例如,Amazon EMR 4.x 版不支援 configure-Hadoop
和 configure-daemons
。不過 Amazon EMR 4.x 版原本就支援此功能。如需有關如何將引導操作從 Amazon EMR AMI 2.x 和 3.x 版遷移至 Amazon EMR 4.x 版的詳細資訊,請移至《Amazon EMR 版本指南》中的使用較早 AMI 版本的 Amazon EMR 自訂叢集和應用程式組態。
引導操作基本概念
根據預設,引導操作會以 Hadoop 使用者身分執行。您可以使用 sudo
以根權限執行引導操作。
所有 Amazon EMR 管理介面都支援引導操作。您最多可以指定每個叢集 16 個引導動作 AWS CLI,方法是從主控台或 API 提供多個bootstrap-actions
參數。
在建立叢集時,您可以從 Amazon EMR 主控台選擇性地指定引導操作。
使用 CLI 時,您可以在使用 create-cluster
命令建立叢集時新增 --bootstrap-actions
參數,藉此將引導操作指令碼的參考傳遞至 Amazon EMR。
--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 EMR 4.0 版及更新版本,您必須在主節點上手動建立 /mnt/var/lib/instance-controller/public/shutdown-actions/
目錄。此目錄並非根據存在的目錄;不過,建立之後,此目錄中的指令碼無論如何都會在關機前執行。如需有關連接主節點以建立目錄的詳細資訊,請參閱 使用 SSH 連線至 Amazon EMR 叢集主節點。
使用自訂引導操作
您可以建立自訂指令碼來執行自訂的引導操作。任何 Amazon EMR 介面都可以參考自訂引導操作。
注意
為了獲得最佳效能,建議您將要與 Amazon EMR 搭配使用的自訂引導動作、指令碼和其他檔案,存放在 AWS 區域 與叢集相同的 Amazon S3 儲存貯體中。
新增自訂引導操作
使用自訂引導操作將物件從 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.6.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"