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

Posted

技术标签:

【中文标题】如何执行从 s3 加载更多脚本的 EMR 步骤?【英文标题】:How to execute EMR step that loads more scripts from s3? 【发布时间】:2018-06-19 12:51:30 【问题描述】:

我想在 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.shmain_script.sh 上的另一个权限被拒绝)

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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何执行从 s3 加载更多脚本的 EMR 步骤?的主要内容,如果未能解决你的问题,请参考以下文章

如何手动使 AWS EMR 步骤失败

使用 AWS EMR 的 ETL

从 S3 加载 AWS EMR

如何从 Lambda 函数在亚马逊 EMR 上执行 spark 提交?

无法从 S3 存储桶(镶木地板文件)将数据加载到 EMR 上的猪中

无法在正在运行的 EMR 上执行步骤