在安装核心服务(Spark 等)后,是否有办法在 EMR 上设置 bootstrap 到 运行 的操作?

Is there a way to setup bootstrap actions to run on EMR after core services are installed (Spark etc)?

在安装核心服务(Spark 等)后,是否有办法在 EMR 上设置 bootstrap 到 运行 的操作?我正在使用 emr-5.27.0.

您可以提交一些脚本作为 step,而不是 bootstrap。比如我做了一个SSL证书更新脚本,一步步应用到EMR上。这是我使用 Python 语言编写的 lambda 函数的一部分。但是你可以在控制台手动添加这一步,或者其他语言。

Steps=[{
    'Name': 'PrestoCertificate',
    'ActionOnFailure': 'CONTINUE',
    'HadoopJarStep': {
        'Jar': 's3://ap-northeast-2.elasticmapreduce/libs/script-runner/script-runner.jar',
        'Args': ['s3://myS3/PrestoSteps_InstallCertificate.sh']
    }
}]

关键是 script-runner.jar 由亚马逊预先构建,您可以通过更改区域前缀将其用于每个区域。它接收一个 .sh 文件并 运行s 它。

你应该知道的一件事是,脚本将 运行 在所有节点上,如果你只想在主实例上执行它,那么你必须使用 if-else 语句。

#!/bin/bash
BOOL=`cat /emr/instance-controller/lib/info/instance.json | jq .isMaster`

if [ $BOOL == "true" ]
then
    <your code>
fi