EMR的bootstrap action(引导操作)是在 EMR 集群启动时执行的自定义脚本或命令,它在集群开始处理数据之前执行。
bootstrap action的主要用途包括:
引导操作的特点:
• 在集群的所有节点上执行(主节点、核心节点和任务节点)
• 可以指定多个引导操作,它们会按照指定的顺序执行
• 如果任何引导操作失败(返回非零退出代码),整个集群创建过程将失败
• 只能在集群创建时配置,无法在集群运行后添加或修改
引导操作通常是Shell脚本,存储在S3上,在创建EMR集群时通过控制台、CLI或API指定。它们是自定义EMR集群环境的强大工具,可以帮助用户根据特定需求调整集群配置。
创建一个 bootstrap 脚本,然后将其上传到 S3 存储桶,最后在创建 EMR 集群时引用这个脚本, 它实现的功能是更新task节点的hosts文件。以下是详细步骤:
创建一个名为 update_hosts.sh 的脚本文件,内容如下:
#!/bin/bash
# 检查是否为 task 节点
IS_TASK=$(grep -q "\"isMaster\": false" /mnt/var/lib/info/instance.json && echo "true" || echo "false")
if [ "$IS_TASK" == "true" ]; then
# 在 task 节点上更新 hosts 文件
echo "10.4.211.126 xxx.com" | sudo tee -a /etc/hosts
echo "已更新 task 节点的 hosts 文件,添加了 10.4.211.126 xxx.com"
else
echo "这不是 task 节点,跳过 hosts 文件更新"
fi
exit 0
# 创建一个 S3 存储桶或使用现有的存储桶
aws s3 mb s3://my-emr-bootstrap-scripts
# 上传脚本到 S3
aws s3 cp update_hosts.sh s3://my-emr-bootstrap-scripts/
aws emr create-cluster \
--name "EMR集群-更新hosts文件" \
--release-label emr-6.10.0 \
--applications Name=Hadoop Name=Spark \
--ec2-attributes KeyName=your-key-pair \
--instance-type m5.xlarge \
--instance-count 3 \
--bootstrap-actions Path=s3://my-emr-bootstrap-scripts/update_hosts.sh,Name="更新task节点hosts文件" \
--use-default-roles
这样,当 EMR 集群启动时,bootstrap action 将在所有 task 节点上执行,并将 10.4.211.126 xxx.com 添加到它们的 hosts 文件中。