aws emr引导动作sudo

unftdfkk  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(324)

我需要更新 /etc/hosts 对于我的emr集群(emr ami 4.3)中的所有示例。
整个剧本不过是:


# !/bin/bash

echo -e 'ip1 uri1' >> /etc/hosts
echo -e 'ip2 uri2' >> /etc/hosts
...

此脚本需要作为 sudo 否则就失败了。
从这里开始:https://docs.aws.amazon.com/emr/latest/managementguide/emr-plan-bootstrap.html#bootstrapuses
默认情况下,引导操作以hadoop用户的身份执行。您可以使用sudo以root权限执行引导操作。
好消息。。。但我不知道怎么做,也找不到一个例子。
我试过很多方法。。。包括。。。
作为hadoop运行并将“sudo”添加到脚本中的每个“echo”语句中
使用shell脚本复制并chmod上述('echo'语句,不带'sudo'),并使用run if bootstrap运行本地复制 1=1 sudo bash /home/hadoop/myDir/myScript.sh 将整个脚本作为一行代码硬编码到runif引导操作中
我总是得到:
在主示例(i-)上,引导操作2返回非零返回代码
如果我检查“setuphadoop调试”步骤的日志,那里什么都没有。
从这里开始:https://docs.aws.amazon.com/emr/latest/managementguide/emr-overview.html#emr-群集生命周期概述
摘要emr设置(按顺序):
条款ec2示例
运行引导操作
安装本机应用程序。。。比如hadoop,spark等等。
因此,似乎有一些风险,因为我在hadoop安装之前就在hadoop用户的身份上混日子,我可能会在那里搞砸一些东西,但我无法想象会发生什么。
我想一定是因为我的脚本没有像sudo那样运行,而且无法更新 /etc/hosts .
我的问题。。。如何使用emr上的引导操作(或其他操作)来运行sudo这样的简单shell脚本。。。专门更新 /etc/hosts ?

rqenqsqc

rqenqsqc1#

我在shell脚本中使用sudo作为emr引导操作时没有遇到问题,所以应该可以工作。您可以测试它是否与一个简单的脚本一起工作,该脚本只执行“sudols/root”。
您的脚本正试图通过重定向stdout将其附加到/etc/hosts:

sudo echo -e 'ip1 uri1' >> /etc/hosts

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

sudo sh -c 'echo -e "ip1 uri1" >> /etc/hosts'

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

相关问题