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 权限执行引导操作。
好消息......但我不知道如何做到这一点,我找不到一个例子。
我尝试了很多东西......包括......
1=1 sudo bash /home/hadoop/myDir/myScript.sh我一直得到:
在主实例 (i-xxx) 上,引导操作 2 返回非零返回代码
如果我检查“设置 hadoop 调试”步骤的日志,那里什么也没有。
从这里:https : //docs.aws.amazon.com/emr/latest/ManagementGuide/emr-overview.html#emr-overview-cluster-lifecycle
总结 emr 设置(按顺序):
因此,似乎存在一些风险,因为我在安装 hadoop 之前以用户 Hadoop 的身份四处游荡,我可能会在那里搞砸一些东西,但我无法想象是什么。
我认为一定是我的脚本没有以 'sudo' 运行,并且无法更新/etc/hosts。
我的问题...如何在 EMR 上使用引导操作(或其他操作)以 sudo 身份运行简单的 shell 脚本?...专门更新/etc/hosts?
我在作为 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 重定向。
| 归档时间: |
|
| 查看次数: |
4253 次 |
| 最近记录: |