Ссылка на файл в сценарии aws emr, выполняемом script-runner.jar - PullRequest
0 голосов
/ 13 июня 2018

Я создаю кластер amazon emr, где одним из шагов является сценарий bash, выполняемый script-runner.jar:

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 s в моем рабочем каталоге все работает просто отлично.Однако после того, как я загрузил все в s3://bucket/scripts, создание кластера завершилось неудачно с помощью:

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

Я нашел решение, опубликованное ниже, но мне это не нравится по указанным причинам.Если у вас есть лучшее решение, пожалуйста, опубликуйте его, чтобы я мог принять его.

1 Ответ

0 голосов
/ 13 июня 2018

Я использую следующую работу в 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 локально означает, что я должен загрузить *Сначала от 1009 * до s3, что усложняет разработку.
  • На самом деле участвуют несколько files ...
...