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

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

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

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

亚马逊 4.x 版本不支持亚马逊 2.x 和 3.x EMR AMI 版本的大多数预定义引导操作。EMR例如configure-Hadoopconfigure-daemons亚马逊 4.x EMR 版本不支持和。相反,Amazon 4.x EMR 版本本身就提供了此功能。有关如何将引导操作从 Amazon 2.x 和 3.x EMR AMI 版本迁移到亚马逊 4.x 版本的更多信息,请转到《亚马逊EMR发行指南》中的EMR使用早期版本AMI的亚马逊自定义集群和应用程序配置。EMR

引导操作基础

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

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

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

使用时CLI,您可以在使用create-cluster命令创建集群时添加--bootstrap-actions参数,从而将对引导操作脚本的引用传递给 Amazon EMR。

--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-clusterAPI调用中,并将您的引导脚本位置指定为的值。Path

关闭操作

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

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

注意

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

使用自定义引导操作

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

注意

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

添加自定义引导操作

Console
使用控制台创建带有引导操作的集群
  1. 登录 AWS Management Console,然后通过 https://console.aws.amazon.com/em r 打开亚马逊EMR控制台。

  2. EC2在左侧导航窗格的开下EMR,选择集群,然后选择创建集群

  3. Bootstrap actions(引导操作)下,选择 Add(添加),为操作指定名称、脚本位置和可选参数。选择 Add bootstrap action(添加引导操作)。

  4. (可选)添加更多引导操作。

  5. 选择适用于集群的任何其他选项。

  6. 要启动集群,选择 Create cluster(创建集群)。

CLI
要使用自定义引导操作创建集群,请使用 AWS CLI

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

  • 要使用自定义引导操作启动集群,请键入以下命令,替换 myKey 用你的 EC2 key pair 的名字。包含 --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-rolescreate-cluster子命令之前键入创建它们。

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

使用自定义引导操作将对象从 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-7.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://mybucket/myscriptfolder/copymyfile.sh"