如何执行从S3加载更多脚本的EMR步骤?

时间:2018-06-19 12:51:31

标签: shell amazon-web-services amazon-s3 amazon-emr

我想在EMR上执行Shell脚本,以加载tarball,解压缩并在其中运行脚本。我选择此设置以保持与供应商无关。 我的脚本是

#!/bin/sh
aws s3 cp s3://path_to_my_bucket/name_of.tar.gz .
tar -xzf name_of.tar.gz
. main_script.sh

main_script.sh是压缩包的一部分,还有许多其他软件包,脚本和配置文件。

如果我以Hadoop用户在主节点上运行此脚本,那么一切都会按预期进行。通过command-runner.jar作为步骤添加,无论尝试如何,我都会遇到错误。

到目前为止我尝试过的事情(以及错误):

  • 按上述方式运行脚本(找不到文件“ main_script.sh”)
  • 将路径硬编码为Hadoop用户主目录(在main_script.sh上拒绝许可)
  • 动态获取脚本所在的路径(使用this),并将此路径作为tar -C选项的参数,并从该路径中显式调用main_script.sh(对{ {1}})

将bash脚本加载到主节点并执行该脚本的正确方法是什么?

作为奖励,我想知道为什么main_script.sh的设置与在Hadoop用户目录中以Hadoop用户身份运行的spark步骤如此不同。

1 个答案:

答案 0 :(得分:1)

您可以在区域中使用script-runner.jar

JAR位置:s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar

参数:s3://your_bucket/your_shell_script.sh

请参阅下面的链接以获取更多信息 https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hadoop-script.html