创建引导操作以安装其它软件 - Amazon EMR

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

您可以使用引导操作安装其它软件或自定义集群实例的配置。引导操作是在 Amazon EMR 使用 Amazon Linux Amazon Machine Image(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 的早期 AMI 版本自定义集群和应用程序配置

引导操作基础

默认以 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 错误代码标识引导操作所导致的故障。

带条件运行引导操作

如需仅在主节点上运行引导操作,您可以使用带有某种逻辑的自定义引导操作来确定该节点是否为主节点。

#!/bin/bash if grep isMaster /mnt/var/lib/info/instance.json | grep false; then echo "This is not master node, do nothing,exiting" exit 0 fi echo "This is master, continuing to execute script" # continue with code logic for master node below

以下输出将来自核心节点。

This is not master node, do nothing, exiting

以下输出将来自主节点。

This is master, continuing to execute script

要使用此逻辑,请将您的引导操作(包括上述代码)上载到 Amazon S3 存储桶。在 AWS CLI 上,将 --bootstrap-actions 参数添加到 aws emr create-cluster API 调用并将引导脚本位置指定为 Path

关闭操作

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

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

注意

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

使用自定义引导操作

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

注意

为了获得最佳性能,我们建议您将要与 Amazon EMR 配合使用的自定义引导操作、脚本和其他文件存储在 Amazon S3 存储桶中,该存储桶与您的集群位于相同的 AWS 区域 中。

使用 AWS CLI 或 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 指定为逗号分隔列表。以下示例未使用参数列表。

  • 要通过自定义引导操作启动集群,请键入以下命令,并使用您的 EC2 密钥对的名称替换 myKey。包含 --bootstrap-actions 参数并将引导脚本位置指定为 Path

    • 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 m5.xlarge \ --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 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

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

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

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

  1. 打开 Amazon EMR 控制台:https://console.aws.amazon.com/emr

  2. 选择创建集群

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

  4. 在“Create Cluster - Advanced Options, Steps 1 and 2 (创建集群 - 高级选项、步骤 1 和 2)”中,选择所需的选项,然后继续执行 Step 3: General Cluster Settings (步骤 3:常规集群设置)

  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,其中包含以下内容。

#!/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.36.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"