Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

创建引导操作以安装其他软件

您可以使用引导操作 安装其他软件或自定义集群实例的配置。引导操作是在 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 发布版的改变之处

引导操作基础

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

所有 Amazon EMR 管理界面都支持引导操作。您可以通过从控制台、AWS CLI 或 API 中提供多个 bootstrap-action 参数的方式,为每个集群指定最多 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 错误代码标识引导操作所导致的故障。

运行条件引导操作

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 文件中发现特定于实例的值时使用有条件地运行命令的引导操作来启动集群,请键入以下命令,并用您的 EC2 密钥对名称替换 myKey

    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 m4.large --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.amazonaws.cn/cli/latest/reference/emr

关闭操作

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

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

注意

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

使用自定义引导操作

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

使用 AWS CLI 或 Amazon EMR CLI 添加自定义引导操作

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

脚本范例类似如下所示:

#!/bin/bash set -e wget -S -T 10 -t 5 http://China (Beijing).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 指定为逗号分隔列表。以下示例未使用参数列表。

  • 要通过自定义引导操作启动集群,请键入以下命令,使用您的 EC2 密钥对的名称替换 myKey

    • Linux、UNIX 和 Mac OS X 用户:

      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 m4.large \ --bootstrap-actions Path="s3://elasticmapreduce/bootstrap-actions/download.sh"
    • Windows 用户:

      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 m4.large --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.amazonaws.cn/cli/latest/reference/emr

使用控制台添加自定义引导操作

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

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

  1. Open the Amazon EMR console at https://console.amazonaws.cn/elasticmapreduce/.

  2. 选择 Create cluster

  3. 单击 Go to advanced options

  4. 在“Create Cluster - Advanced Options, Steps 1 and 2”中,选择所需的选项,然后继续执行 Step 3: General Cluster Settings

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

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

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

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

相关主题

使用自定义引导操作将对象从 Amazon S3 复制到每个节点

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

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

aws s3 cp s3://mybucket/myfilefolder/myfile.jar /mnt1/myfolder

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

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