Create Bootstrap Actions to Install Additional Software - Amazon EMR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Create Bootstrap Actions to Install Additional Software

您可以使用 bootstrap action 安装其他软件或自定义群集实例配置。引导操作是在 Amazon EMR 使用 Amazon Linux Amazon 系统映像 (AMI) 启动实例之后在集群上运行的脚本。引导操作在 Amazon EMR 安装您在创建集群时指定的应用程序之前和在集群节点开始处理数据之前运行。如果您向正在运行的集群添加节点,则引导操作也会以相同方式在这些节点上运行。您可以创建自定义引导操作并指定何时创建集群。

Amazon EMR 4.x 版本不支持适用于 Amazon EMR AMI 2.x 和 3.x 版本的大多数预定义引导操作。例如,Amazon EMR 4.x 版本不支持 configure-Hadoopconfigure-daemons。相反,Amazon EMR 4.x 版本自身就提供了此功能。有关将引导操作从 Amazon EMR AMI 2.x 和 3.x 版本迁移到 Amazon EMR 4.x 版本的更多信息,请参阅 Amazon EMR 版本指南中的 Amazon EMR 4.x 发行版的改变之处

Bootstrap Action Basics

默认以 Hadoop 用户的身份执行引导操作。您可以使用 sudo 以根特权执行引导操作。

所有 Amazon EMR 管理界面都支持引导操作。您可以通过从控制台、AWS CLI 或 API 中提供多个 bootstrap-actions 参数的方式,为每个集群指定最多 16 个引导操作。

在 Amazon EMR 控制台,您可以选择在创建集群时指定引导操作。

如果使用 CLI,通过在使用 create-cluster 命令创建集群时添加 --bootstrap-actions 参数,可将对引导操作脚本的引用传递给 Amazon EMR。--bootstrap-actions 参数的语法如下:

AWS CLI

--bootstrap-actions Path="s3://mybucket/filename",Args=[arg1,arg2]

如果引导操作返回非零错误代码, Amazon EMR 会将其当作故障处理,并终止实例。如果太多实例导致引导操作失败,Amazon EMR 就会终止集群。如果只有几个实例失败,Amazon EMR 会尝试重新分配失败的实例并继续执行。使用集群 lastStateChangeReason 错误代码标识引导操作所导致的故障。

Run If Bootstrap Action

Amazon EMR 提供此预定义引导操作,以便在 instance.jsonjob-flow.json 文件中发现特定于实例的值时有条件地运行命令。该命令可以引用 Amazon EMR 可以下载和执行的、Amazon S3 中的文件。

脚本的位置是 s3://elasticmapreduce/bootstrap-actions/run-if

在以下示例中,如果节点是主节点,则会回显字符串“running on master node”。

使用 AWS CLI 有条件地运行命令

使用 AWS CLI 包含引导操作时,请将 PathArgs 指定为逗号分隔列表。

  • 如何启动具有引导操作的群集,当实例特定值中找到某个实例特定值时 instance.jsonjob-flow.json 文件,键入以下命令并更换 myKey 您的ec2密钥对的名称。

    aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --use-default-roles --ec2-attributes KeyName=myKey --applications Name=Hive --instance-count 1 --instance-type m5.xlarge --bootstrap-actions Path="s3://elasticmapreduce/bootstrap-actions/run-if",Args=["instance.isMaster=true","echo running on master node"]

    如果不使用 --instance-groups 参数指定实例计数,则将启动单个主节点,其余实例将作为核心节点启动。所有节点都使用该命令中指定的实例类型。

    注意

    如果您之前未创建默认 Amazon EMR 服务角色和 EC2 实例配置文件,请先键入 aws emr create-default-roles 创建它们,然后再键入 create-cluster 子命令。

    有关如何在 AWS CLI 中使用 Amazon EMR 命令的更多信息,请参阅 https://docs.aws.amazon.com/cli/latest/reference/emr

Shutdown Actions

引导操作脚本可以通过向 /mnt/var/lib/instance-controller/public/shutdown-actions/ 目录编写的方式,创建一个或多个关闭操作。当集群终止时,此目录上的所有脚本会并行执行。每个脚本必须在 60 秒钟内运行和完成。

如果节点因为错误而终止,则不保证关闭操作脚本的运行。

注意

使用 Amazon EMR 版本 4.0 及更高版本时,必须在主节点上手动创建 /mnt/var/lib/instance-controller/public/shutdown-actions/ 目录。默认情况下,该目录不存在;但一经创建,该目录中的脚本可在关机前运行。有关连接主节点以创建目录的更多信息,请参阅使用 SSH 连接到主节点

Use Custom Bootstrap Actions

您可以创建自定义脚本以执行自定义引导操作。任何 Amazon EMR 界面都可以引用自定义引导操作。

Add Custom Bootstrap Actions Using the AWS CLI or the Amazon EMR CLI

以下示例使用引导操作脚本从 Amazon S3 下载和解压已压缩的 TAR 存档。该示例脚本存储在以下位置: https://elasticmapreduce.s3.amazonaws.com/bootstrap-actions/download.sh

脚本范例类似如下所示:

#!/bin/bash set -e wget -S -T 10 -t 5 http://elasticmapreduce.s3.amazonaws.com/bootstrap-actions/file.tar.gz mkdir -p /home/hadoop/contents tar -xzf file.tar.gz -C /home/hadoop/contents

使用 AWS CLI 通过自定义引导操作创建集群

使用 AWS CLI 包含引导操作时,请将 PathArgs 指定为逗号分隔列表。以下示例未使用参数列表。

  • 要使用自定义引导操作启动群集,请键入以下命令,然后更换 myKey 您的ec2密钥对的名称。

    • Linux, UNIX, and Mac OS X users:

      aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 \ --use-default-roles --ec2-attributes KeyName=myKey \ --applications Name=Hive Name=Pig \ --instance-count 3 --instance-type m5.xlarge \ --bootstrap-actions Path="s3://elasticmapreduce/bootstrap-actions/download.sh"
    • Windows users:

      aws emr create-cluster --name "Test cluster" --release-label emr-4.2.0 --use-default-roles --ec2-attributes KeyName=myKey --applications Name=Hive Name=Pig --instance-count 3 --instance-type m5.xlarge --bootstrap-actions Path="s3://elasticmapreduce/bootstrap-actions/download.sh"

    如果不使用 --instance-groups 参数指定实例计数,则将启动单个主节点,其余实例将作为核心节点启动。所有节点都使用该命令中指定的实例类型。

    注意

    如果您之前未创建默认 Amazon EMR 服务角色和 EC2 实例配置文件,请先键入 aws emr create-default-roles 创建它们,然后再键入 create-cluster 子命令。

    有关如何在 AWS CLI 中使用 Amazon EMR 命令的更多信息,请参阅 https://docs.aws.amazon.com/cli/latest/reference/emr

Add Custom Bootstrap Actions Using the Console

以下过程介绍如何使用您自己的自定义引导操作。

使用控制台通过自定义引导操作创建集群

  1. 通过以下网址打开 Amazon EMR 控制台:https://console.aws.amazon.com/elasticmapreduce/

  2. 选择 Create cluster

  3. 单击 Go to advanced options (转到高级选项)

  4. 在创建群集-高级选项中,步骤1和2选择需要的选项,然后继续进行 步骤3: 一般群集设置.

  5. Bootstrap Actions (引导操作) 下,选择 Configure and add (配置并添加) 来为您的引导操作指定名称、JAR 位置和参数。选择添加

  6. (可选) 根据需要添加更多引导操作。

  7. 继续创建集群。您的引导操作将在预置和初始化集群后执行。

当集群主节点正在运行时,您可以连接到主节点,查看引导操作脚本在 /mnt/var/log/bootstrap-actions/1 目录中生成的日志文件。

Related Topics

Use a Custom Bootstrap Action to Copy an Object from Amazon S3 to Each Node

安装应用程序前,您可以使用引导操作将对象从 Amazon S3 复制到集群中的每个节点。AWS CLI 安装在集群的每个节点上,因此您的引导操作可以调用 AWS CLI 命令。

下面的示例演示了一个简单的引导操作脚本,即将一个文件 myfile.jar 从 Amazon S3 复制到每个集群节点上的本地文件夹 /mnt1/myfolder 中。此脚本保存到 Amazon S3 上,使用的文件名为 copymyfile.sh,其中包含以下内容。

#!/bin/bash aws s3 cp s3://mybucket/myfilefolder/myfile.jar /mnt1/myfolder

在启动集群时,您可以指定脚本。以下 AWS CLI 示例展示了这一点:

aws emr create-cluster --name "Test cluster" --release-label emr-5.32.0 \ --use-default-roles --ec2-attributes KeyName=myKey \ --applications Name=Hive Name=Pig \ --instance-count 3 --instance-type m5.xlarge \ --bootstrap-actions Path="s3://mybucket/myscriptfolder/copymyfile.sh"