Избегайте ввода пароля при запуске Hadoop в псевдораспределенном режиме

Итак, я запускаю Hadoop в псевдораспределенном режиме на моем ноутбуке, чтобы узнать об этих вещах.

Я настраиваю это, как описано в руководстве.

Я могу запустить hadoop, без проблем, но процесс запуска неудобен. Смотрите, чтобы запустить эту вещь:

start-dfs.sh

Затем один раз запрашивается пароль 3 раза (в моем случае все три одинаковы):

Starting namenodes on [localhost]
me@localhost's password: 
localhost: starting namenode, logging to /home/me/hadoop-2.7.3/logs/hadoop-me-namenode-me-HP-ENVY-15-Notebook-PC.out
me@localhost's password: 
localhost: starting datanode, logging to /home/me/hadoop-2.7.3/logs/hadoop-me-datanode-me-HP-ENVY-15-Notebook-PC.out
Starting secondary namenodes [0.0.0.0]
me@0.0.0.0's password: 
0.0.0.0: starting secondarynamenode, logging to /home/me/hadoop-2.7.3/logs/hadoop-me-secondarynamenode-me-HP-ENVY-15-Notebook-PC.out

(и то же самое, когда вы делаете stop-dfs.sh).

Это боль. Есть ли способ, чтобы ubuntu помнил этот пароль, чтобы его не нужно было вводить вообще?

1
задан 23 December 2016 в 15:36

2 ответа

Я бы также попробовал следующее (если у вас есть пользователь hdfs):

sudo -u hdfs start-dfs.sh  service-name

Таким образом, вы вводите пароль один раз, но последующие вызовы должны быть кэшированы.

1
ответ дан 23 May 2018 в 03:11

Одна идея состоит в том, чтобы запустить процесс в фоновом режиме, перенаправляя его stdout (stderr?) в файл, а ваш сценарий должен ждать и контролировать этот файл в цикле. Всякий раз, когда процесс печатает приглашение пароля, скрипт передает пароль в процесс через его stdin.

Достижение этого на самом деле сложно. Вы можете использовать два сценария, один для мониторинга вывода и подачи паролей, а другой для их запуска сначала, применяя необходимые переадресации.

Таким образом, сценарий запуска:

#!/bin/bash
TEMP_FILE=/tmp/hapboon.stdout
start-dfs.sh  <(./feed-passwords.py "$TEMP_FILE")  > "$TEMP_FILE"

По какой-то причине я буду использовать Python для другого:

#!/usr/bin/python3
PASSWORD="""TYPE_YOUR_PASSWORD_HERE"""

from sys import argv
temp_file = argv[1]  # Raises exception if argument is missing

counter = 0
maximum = 3
previous_length = 0

while True:
    with open(temp_file) as f:
        output = f.read()
    if len(output) == previous_length:
        continue
    previous_length = len(output)
    last_line = output.strip().split('\n')[-1]
    if last_line.endswith(' password:'):
        print(PASSWORD)  # Our stdout goes to `start-dfs.sh`
        counter += 1
    if counter == maximum:
        break

Я ничего не тестировал. Одно из предположений, на которое основан этот подход, заключается в том, что тот, кто получает пароль через свой stdin, сам start-dfs.sh, который имеет довольно хорошую возможность быть неверным. Стартовые скрипты часто просто вызывают другие процессы, поэтому пароль, вероятно, нужно отправить в stdin других процессов.

Возможно, вам придется поработать с самим скриптом start-dfs.sh и перенаправить его на stdin процессы, которые получат пароль. Это также означает, что наш скрипт feed-passwords.py должен каждый раз печатать пароли в соответствующий файл, что, вероятно, означает, что архитектура всего подхода изменится.

Кроме того, пока мы еще не находимся, еще одна вещь об этом скрипте, который является негибким; он работает только с заданным количеством паролей (определяется переменной maximum). Возможно, было бы желательно изменить его таким образом, чтобы он продолжал следить за запросами пароля до тех пор, пока не пройдет определенный тайм-аут (скажем, 15 секунд), поэтому он вмещает любое количество приглашений пароля без необходимости менять номер каждый раз. (Я могу помочь вам в этом, если это необходимо.)

Другое примечание. Если вы не хотите хранить свой пароль, просто замените строку PASSWORD=... на: PASSWORD=input("Type your password: "). Это позволит вам вводить пароль только один раз при каждом запуске скрипта и не будет хранить ваш пароль нигде.

0
ответ дан 23 May 2018 в 03:11
  • 1
    Я должен идти сейчас, но проверю это как можно скорее! Спасибо, извините, сезонные приветствия! – user2413 23 December 2016 в 16:41

Другие вопросы по тегам:

Похожие вопросы: