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 クラスターで追加のソフトウェアをインストールするブートストラップアクションを作成する