我想在 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 集群安装其他软件