我正在创建一个Amazon 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'
我发现下面发布了解决方法,但是由于指定的原因,我不喜欢它。如果您有更好的解决方案,请发布它,以便我接受。
最佳答案
我在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
... 关于hadoop - 在由script-runner.jar运行的aws emr脚本中引用文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50838364/