AWS EMR 引导操作作为 sudo

kmh*_*kmh 3 sudo hadoop amazon-web-services amazon-emr

我需要更新/etc/hosts我的 EMR 集群 (EMR AMI 4.3) 中的所有实例。

整个脚本无非是:

#!/bin/bash
echo -e 'ip1 uri1' >> /etc/hosts
echo -e 'ip2 uri2' >> /etc/hosts
...
Run Code Online (Sandbox Code Playgroud)

此脚本需要按原样运行,sudo否则将失败。

从这里:https : //docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-bootstrap.html#bootstrapUses

默认情况下,引导操作以 Hadoop 用户身份执行。您可以使用sudo以 root 权限执行引导操作。

好消息......但我不知道如何做到这一点,我找不到一个例子。

我尝试了很多东西......包括......

  • 作为 Hadoop 运行并在脚本中的每个“echo”语句中添加“sudo”
  • 使用 shell 脚本复制和修改上述内容(没有 'sudo' 的 'echo' 语句)并使用调用的 run-if 引导程序运行本地副本 1=1 sudo bash /home/hadoop/myDir/myScript.sh
  • 将整个脚本作为单行硬编码到 run-if 引导操作中

我一直得到:

在主实例 (i-xxx) 上,引导操作 2 返回非零返回代码

如果我检查“设置 hadoop 调试”步骤的日志,那里什么也没有。

从这里:https : //docs.aws.amazon.com/emr/latest/ManagementGuide/emr-overview.html#emr-overview-cluster-lifecycle

总结 emr 设置(按顺序):

  1. 规定ec2实例
  2. 运行引导操作
  3. 安装本机应用程序……例如hadoop、 spark 等。

因此,似乎存在一些风险,因为我在安装 hadoop 之前以用户 Hadoop 的身份四处游荡,我可能会在那里搞砸一些东西,但我无法想象是什么。

我认为一定是我的脚本没有以 'sudo' 运行,并且无法更新/etc/hosts

我的问题...如何在 EMR 上使用引导操作(或其他操作)以 sudo 身份运行简单的 shell 脚本?...专门更新/etc/hosts

jar*_*mod 9

我在作为 EMR 引导操作运行的 shell 脚本中使用 sudo 没有问题,所以它应该可以工作。您可以使用一个简单的脚本来测试它是否可以运行“sudo ls /root”。

您的脚本试图通过重定向标准输出来附加到 /etc/hosts:

sudo echo -e 'ip1 uri1' >> /etc/hosts
Run Code Online (Sandbox Code Playgroud)

这里的问题是,虽然 echo 是用 sudo 运行的,但重定向 (>>) 不是。它由底层 hadoop 用户运行,该用户无权写入 /etc/hosts。修复方法是:

sudo sh -c 'echo -e "ip1 uri1" >> /etc/hosts'
Run Code Online (Sandbox Code Playgroud)

这将在带有 sudo 的 shell 中运行整个命令,包括 stdout 重定向。