在EMR中运行bash脚本的正确语法是什么?

时间:2018-08-11 21:42:46

标签: bash amazon-emr

在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呢? 非常感谢您的帮助。 :(

4 个答案:

答案 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。这就是我通过亚马逊用户界面所做的。

Screenshot

答案 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