スキップしてコンテンツを表示

ブートストラップアクション後に、すべての 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年前
コメントはありません

関連するコンテンツ