AWS EMR引导操作为sudo

时间:2018-08-29 19:05:25

标签: amazon-web-services hadoop sudo amazon-emr

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

整个脚本不过是:

#!/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脚本复制并修改上面的内容(不带'sudo'的'echo'语句),并使用调用1=1 sudo bash /home/hadoop/myDir/myScript.sh的run-if引导程序运行本地副本。
  • 将整个脚本作为一种代码硬编码为“如果运行时引导”操作

我始终如一:

  

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

如果我检查“ Setup 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

1 个答案:

答案 0 :(得分:3)

在作为EMR引导操作运行的shell脚本中使用sudo时,我没有遇到任何问题,因此它应该可以工作。您可以使用简单的脚本来测试它是否可以正常工作,该脚本只执行“ sudo ls / root”。

您的脚本正在尝试通过以下方式重定向stdout来附加到/ etc / hosts:

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

这里的问题是,当使用sudo运行回显时,重定向(>>)却没有。它由基础的hadoop用户运行,该用户无权写入/ etc / hosts。解决方法是:

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

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