AWS EMR загрузочный экшн как sudo - PullRequest
0 голосов
/ 29 августа 2018

Мне нужно обновить /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 .

Отличные новости ... но я не могу понять, как это сделать, и я не могу найти пример.

Я пробовал кучу вещей ... включая ...

  • работает как Hadoop и добавляет 'sudo' к каждому из операторов 'echo' в скрипте
  • с использованием сценария оболочки для копирования и изменения вышеизложенного (операторы 'echo' без 'sudo') и запуск локальной копии с использованием начальной загрузки 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? ... специально для обновления /etc/hosts?

1 Ответ

0 голосов
/ 30 августа 2018

У меня не было проблем с использованием sudo из сценария оболочки, запускаемого как действие начальной загрузки EMR, поэтому оно должно работать. Вы можете проверить, работает ли он с помощью простого скрипта, который просто выполняет команду "sudo ls /root".

Ваш скрипт пытается добавить в / etc / hosts, перенаправив стандартный вывод с помощью:

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

Проблема в том, что пока эхо запускается с помощью sudo, перенаправление (>>) - нет. Он запускается основным пользователем hadoop, у которого нет прав на запись в / etc / hosts. Исправление:

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

Эта команда запускает всю команду, включая перенаправление stdout, в оболочке с sudo.

...