在安装核心服务(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
在安装核心服务(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