在EMR完成引导之后,我正在尝试运行bash脚本。以下是我的Terraform代码:
step { action_on_failure = "CONTINUE"
name = "Setup Hadoop configuration"
hadoop_jar_step {
jar = "command-runner.jar"
args = ["bash,-c,'cd /mnt; chmod +x ./userdata.sh; ./userdata.sh'"]
}}
这是行不通的,并且继续失败,提示未找到文件。 是否正确提供了args?那script-runner.jar呢? 非常感谢您的帮助。 :(
答案 0 :(得分:2)
使用UIColor.system*
,您可以执行许多程序,例如bash脚本,
而且您不必像command-runner.jar
那样了解其完整路径。建议使用script-runner.jar
。
EMR处于集群模式,您不知道哪个节点执行shell脚本,因此将其推送到S3:
command-runner.jar
答案 1 :(得分:1)
command-runner.jar
无法在 s3 上执行远程文件。我们必须使用 script-runner.jar
来执行远程 jar。这就是我通过亚马逊用户界面所做的。
答案 2 :(得分:0)
AWS文档的片段。
以下是使用AWS的command-runner.jar的示例用法 命令行:
aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Name="Command
Runner”,Jar =“ command-runner.jar”,Args = [“ spark-submit”,“ Args ...”]
参考
答案 3 :(得分:0)
创建 step-defn.json:(在 S3 存储桶中或本地在 EMR 中)
[{
"Name": "shell_script_that_needs_to_be_executed_as_emr_step",
"ActionOnFailure": "CONTINUE",
"Type":"CUSTOM_JAR",
"Jar":"command-runner.jar",
"Args":["bash","-c","mkdir -p /tmp/script-for-s3-copy/; aws s3 cp s3://<bucket-name>/some-blah-blah-shell-script.sh /tmp/script-for-s3-copy/;chmod -R 777 /tmp/script-for-s3-copy/*.sh;cd /tmp/script-for-s3-copy;sh some-blah-blah-shell-script.sh.sh"]
}]
使用引导脚本下载 EMR 本地文件夹中的 Step 定义(如果 step-defn.json 存储在 S3 中)
aws emr add-steps --cluster-id j-xxxxxxxxxxxx --steps file:///<folder_where_the_json_is_downloaded>/step-defn.json
可在此处找到详细文档:https://docs.aws.amazon.com/cli/latest/reference/emr/add-steps.html