Мне нужно обновить /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 (по порядку):
- положения ec2 экземпляры
- запускает загрузочные действия
- устанавливает нативные приложения ... как hadoop , spark и т. Д.
Так что, похоже, есть некоторый риск, что, поскольку я бреду как пользователь Hadoop до того, как будет установлен hadoop, я могу что-то там испортить, но я не могу себе представить, что.
Я думаю, это должно быть из-за того, что мой скрипт не работает как sudo и не может обновить /etc/hosts
.
Мой вопрос ... как я могу использовать действия начальной загрузки (или что-то еще) в EMR для запуска простого сценария оболочки как sudo? ... специально для обновления /etc/hosts
?