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

Posted

技术标签:

【中文标题】无法在正在运行的 EMR 上执行步骤【英文标题】:Unable to execute a step on a running EMR 【发布时间】:2020-01-15 02:50:43 【问题描述】:

我有一个在 AWS 中运行的 EMR 集群 5.28.1,但作为引导操作的一部分,我忘记从 python 库进行安装。现在集群正在运行,我只是尝试通过 EMR 控制台添加一个步骤。这是我的设置

JAR: s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar
Main class: None
Arguments: s3://xxxx/install_python_libraries.sh

很遗憾,我收到以下错误。

Cannot run program "s3://xxxxx/install_python_libraries.sh" (in directory "."): error=2, No such file or directory

我不确定我做错了什么。 shell 脚本如下所示。

#!/bin/bash -xe

# Non-standard and non-Amazon Machine Image Python modules:
sudo pip-3.6 install boto3
sudo pip-3.6 install xmltodict

我也尝试过简单地使用“command-runner.jar”,但我得到了同样的错误。你能帮我找出问题,所以我可以通过控制台来解决这个问题吗?我想在所有节点上安装库 - 主节点和核心节点。

谢谢

【问题讨论】:

这看起来像是权限问题。您确定用于 EMR 的角色具有访问脚本的适当 s3 权限吗? @bdcloud。我想你可能有一点。从来没有想过这个错误会意味着权限问题。会试试看。 您能否确认 IAM 政策是否存在问题? 修复了这个角色,我想我已经通过了那个消息。现在,我得到 java.io.IOException: Cannot run program "/mnt/var/lib/hadoop/steps/s-36C0OJUGLXXXX/./install_python_libraries.sh" (in directory "."): error=2, No such文件或目录。当我转到该目录时,shell 文件已成功传输,但请注意上面路径中的句点 (.),我仍在添加步骤,如上面的原始问题所示。所以,不知道如何解决这个问题。而且shell文件确实有自动执行权限。 【参考方案1】:

问题在于 xxx.sh 文件 EOL/回车类型。

换句话说,如果是 Windows ("\r\n") 那么它将不起作用并返回 ./ file not found 错误。

使用notepad++之类的东西将其转换为unix类型(“\n”),它会运行良好。

(在notepad++编辑>EOL转换>Unix(LF)点击保存再试)

【讨论】:

以上是关于无法在正在运行的 EMR 上执行步骤的主要内容,如果未能解决你的问题,请参考以下文章

气流 DAG EMR EmrCreateJobFlowOperator 不执行任何操作

正在寻找将 aws pig 步骤注入已经运行的 emr 的 boto3 python 示例?

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

在 AWS EMR 上运行 Spark 应用程序

Yarn 显示作业已成功,但 EMR 显示该步骤仍在运行

无法在 Amazon EMR 集群上使用 PIG 0.12.0 和 Hadoop 2.4.0 找到 MySql 驱动程序