如何执行从 s3 加载更多脚本的 EMR 步骤?
How to execute EMR step that loads more scripts from s3?
我想在 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
是 tarball 的一部分,还有许多其他包、脚本和配置文件。
如果我 运行 这个脚本作为主节点上的 Hadoop 用户,一切都会按预期进行。通过 command-runner.jar 作为一个步骤添加,无论我尝试什么,我都会出错。
到目前为止我尝试了什么(以及错误):
- 运行如上脚本(未找到文件"main_script.sh")
- 将路径硬编码为 Hadoop 用户主目录(权限在
main_script.sh
上被拒绝)
- 动态获取脚本所在的路径(使用 this)并将此路径作为
tar -C
选项的参数并从此路径显式调用 main_script.sh
(另一个权限被拒绝在 main_script.sh
)
将bash脚本加载到主节点并执行它的正确方法是什么?
作为奖励,我想知道为什么 command-runner.jar
与 spark 步骤的设置如此不同,后者 运行 作为 Hadoop 用户目录中的 Hadoop 用户。
您可以将脚本-runner.jar与区域
一起使用
JAR 位置:s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar
参数:s3://your_bucket/your_shell_script.sh
有关详细信息,请参阅下文 link
https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hadoop-script.html
我想在 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
是 tarball 的一部分,还有许多其他包、脚本和配置文件。
如果我 运行 这个脚本作为主节点上的 Hadoop 用户,一切都会按预期进行。通过 command-runner.jar 作为一个步骤添加,无论我尝试什么,我都会出错。
到目前为止我尝试了什么(以及错误):
- 运行如上脚本(未找到文件"main_script.sh")
- 将路径硬编码为 Hadoop 用户主目录(权限在
main_script.sh
上被拒绝) - 动态获取脚本所在的路径(使用 this)并将此路径作为
tar -C
选项的参数并从此路径显式调用main_script.sh
(另一个权限被拒绝在main_script.sh
)
将bash脚本加载到主节点并执行它的正确方法是什么?
作为奖励,我想知道为什么 command-runner.jar
与 spark 步骤的设置如此不同,后者 运行 作为 Hadoop 用户目录中的 Hadoop 用户。
您可以将脚本-runner.jar与区域
一起使用JAR 位置:s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar
参数:s3://your_bucket/your_shell_script.sh
有关详细信息,请参阅下文 link https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hadoop-script.html