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

标签 hadoop amazon-emr

我正在创建一个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 filesed ... -f filepsql ... -f file等。

在工作目录中同时包含script.shfile的笔记本电脑上,一切正常。但是,将所有内容上传到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/

    相关文章:

    hadoop - 如果创建一个包含 300 个列族的 hbase 表就可以了?

    具有 FileAlreadyExistsException 的 Reducer 中的 Hadoop MultipleOutputs

    hadoop - 从HDFS目录创建具有子目录的Impala表

    r - 如何从 R 更新 HIVE 中的环境变量?

    python - 将经过训练的 xgboost 分类器从 AWS s3 上传到 EMR

    hadoop - 将 hadoop fs 路径转换为 ​​hdfs ://paths on EMR

    java - Pig 将关系作为参数传递给 UDF

    hadoop - 是否可以在 hadoop 中禁用排序?

    java - 创建集群需要 InstanceProfile

    hadoop - 错误: Jobflow entered COMPLETED while waiting to ssh