本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建引导操作以安装其它软件
您可以使用引导操作安装其它软件或自定义集群实例的配置。引导操作是在亚马逊使用亚马逊 Linux 亚马逊系统映像 (AMI) EMR 启动实例后在集群上运行的脚本。Bootstrap 操作在 Amazon EMR 安装您在创建集群时指定的应用程序之前和集群节点开始处理数据之前运行。如果您向正在运行的集群添加节点,则引导操作也会以相同方式在这些节点上运行。您可以创建自定义引导操作并指定何时创建集群。
亚马逊 4.x 版本不支持亚马逊 2.x 和 3.x EMR AMI 版本的大多数预定义引导操作。EMR例如configure-Hadoop
,configure-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-cluster
API调用中,并将您的引导脚本位置指定为的值。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 存储桶中。
添加自定义引导操作
使用自定义引导操作将对象从 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"