跳至內容

如何在啟動程序動作之後更新所有 Amazon EMR 節點?

1 分的閱讀內容
0

我想在 BOOTSTRAPPING 狀態完成後更新 Amazon EMR 叢集上的所有節點。

解決方法

啟動程序動作發生在 Amazon EMR 安裝和設定 Apache Hadoop 和 Apache Spark 等應用程式之前。若要在 Amazon EMR 安裝和設定應用程式之後變更所有叢集節點,請附加啟動程式動作指令碼。

使用您要套用至節點的變更,更新下列 bash 指令碼:

#!/bin/bash
set -xe

EMR_SECONDARY_BA_SCRIPT=$(cat <<'EOF'
while true; do
NODEPROVISIONSTATE=` sed -n '/localInstance [{]/,/[}]/{
/nodeProvisionCheckinRecord [{]/,/[}]/ {
/status: / { p }
/[}]/a
}
/[}]/a
}' /emr/instance-controller/lib/info/job-flow-state.txt | awk ' { print $2 }'`

if [ "$NODEPROVISIONSTATE" == "SUCCESSFUL" ]; then
sleep 10;
echo "Running my post provision bootstrap"
NODETYPE=$(cat /mnt/var/lib/instance-controller/extraInstanceData.json | jq -r '.instanceRole' | awk '{print tolower($0)}')

if [  "$NODETYPE" == "master" ]
then
echo "In Master"
######ENTER YOUR CODE THAT SHOULD BE EXECUTED ON PRIMARY NODE######


elif [ "$NODETYPE" == "core"  ]
then
echo "In Core"
######ENTER YOUR CODE THAT SHOULD BE EXECUTED ON CORE NODE######


elif [ "$NODETYPE" == "task"  ]
then
echo "In Task"
######ENTER YOUR CODE THAT SHOULD BE EXECUTED ON TASK NODE######

fi

exit;
fi
sleep 10;
done
EOF
)

echo "${EMR_SECONDARY_BA_SCRIPT}" | tee -a /tmp/emr-secondary-ba.sh
chmod u+x /tmp/emr-secondary-ba.sh
/tmp/emr-secondary-ba.sh &> /tmp/emr-secondary-ba.log &
exit 0

**注意:**依預設,前面的指令碼會使用 hadoop 使用者。如果您的變更需要權限,請將使用者更新為 sudo

更新 bash 指令碼後,將指令碼作為啟動程式動作指令碼附加到叢集。

相關資訊

了解叢集生命週期

建立啟動程式動作,以便使用 Amazon EMR 叢集安裝其他軟體

AWS 官方已更新 1 年前