Bootstrap action

EMR的bootstrap action(引导操作)是在 EMR 集群启动时执行的自定义脚本或命令,它在集群开始处理数据之前执行。

bootstrap action的主要用途包括:

  1. 安装额外的软件或库 - 例如安装特定的Python包或其他工具
  2. 自定义配置 - 修改默认配置参数,如Java堆大小、内存设置等
  3. 下载数据或代码 - 从外部源获取数据或应用程序代码
  4. 系统设置 - 配置操作系统参数、挂载额外存储等
  5. 安全设置 - 配置安全参数、证书等

引导操作的特点:

• 在集群的所有节点上执行(主节点、核心节点和任务节点)

• 可以指定多个引导操作,它们会按照指定的顺序执行

• 如果任何引导操作失败(返回非零退出代码),整个集群创建过程将失败

• 只能在集群创建时配置,无法在集群运行后添加或修改

引导操作通常是Shell脚本,存储在S3上,在创建EMR集群时通过控制台、CLI或API指定。它们是自定义EMR集群环境的强大工具,可以帮助用户根据特定需求调整集群配置。

配置boostrap action脚本

创建一个 bootstrap 脚本,然后将其上传到 S3 存储桶,最后在创建 EMR 集群时引用这个脚本, 它实现的功能是更新task节点的hosts文件。以下是详细步骤:

步骤 1: 创建 bootstrap 脚本

创建一个名为 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

步骤 2: 将脚本上传到 S3

# 创建一个 S3 存储桶或使用现有的存储桶
aws s3 mb s3://my-emr-bootstrap-scripts

# 上传脚本到 S3
aws s3 cp update_hosts.sh s3://my-emr-bootstrap-scripts/

步骤 3: 创建 EMR 集群并配置 bootstrap action


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

注意事项

  1. 脚本会检查节点类型,只在 task 节点上执行更新操作
  2. 确保 S3 存储桶和 EMR 集群在同一区域,以避免跨区域访问问题
  3. 确保您有足够的权限创建和管理 EMR 集群以及访问 S3 存储桶
  4. 如果您需要更复杂的配置,可以扩展这个脚本

这样,当 EMR 集群启动时,bootstrap action 将在所有 task 节点上执行,并将 10.4.211.126 xxx.com 添加到它们的 hosts 文件中。