引用由script-runner.jar运行的aws emr脚本中的文件

时间:2018-06-13 13:21:38

标签: hadoop amazon-emr

我正在创建一个亚马逊emr集群,其中一个步骤是由script-runner.jar运行的bash脚本:

aws emr create cluster ... --steps '[ ... {
 "Args":["s3://bucket/scripts/script.sh"],
 "Type":"CUSTOM_JAR",
 "ActionOnFailure":"TERMINATE_CLUSTER",
 "Jar":"s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar",
}, ... ]'...

https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hadoop-script.html

中所述

script.sh需要在其命令中包含其他文件:思考awk ... -f filesed ... -f filepsql ... -f file等。

在我的工作目录中同时包含script.shfile的笔记本电脑上,一切正常。但是,在我将所有内容上传到s3://bucket/scripts后,群集创建失败并显示:

 file: No such file or directory
 Command exiting with ret '1'

我找到了下面发布的解决方法,但由于指定的原因我不喜欢它。如果您有更好的解决方案,请发布,以便我接受。

1 个答案:

答案 0 :(得分:0)

我在script.sh中使用了以下方法:

# Download the SQL file to a tmp directory.
tmpdir=$(mktemp -d "${TMPDIR:-/tmp/}$(basename $0).XXXXXXXXXXXX")
aws s3 cp s3://bucket/scripts/file ${tmpdir}

# Run my command
xxx -f ${tmpdir}/file

# Clean up
rm -r ${tmpdir}

这种方法有效但是:

  • 在本地运行script.sh意味着我必须首先将file上传到s3,这会让开发变得更难。
  • 实际上有一些files涉及......