我正在创建一个亚马逊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 file
,sed ... -f file
,psql ... -f file
等。
在我的工作目录中同时包含script.sh
和file
的笔记本电脑上,一切正常。但是,在我将所有内容上传到s3://bucket/scripts
后,群集创建失败并显示:
file: No such file or directory
Command exiting with ret '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
涉及......