Постарайтесь не вводить пароль при запуске 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).

Это - боль. Существует ли способ иметь человечность, помнят, что пароль так, чтобы не вводил его вообще?

4
задан 23 December 2016 в 14:36

3 ответа

Решенный моя проблема с помощью шагов, описанных в этот ответ S.O. . В основном сделайте:

ssh-keygen -t rsa -P ""
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh localhost

затем

start-dfs.sh

не попросит пароли.

2
ответ дан 1 December 2019 в 09:45

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

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

Этот способ, которым Вы ввели бы пароль однажды, но последовательные вызовы должны кэшироваться.

2
ответ дан 1 December 2019 в 09:45

Одна идея состоит в том, чтобы запустить процесс в фоновом режиме, перенаправив его 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
ответ дан 1 December 2019 в 09:45

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

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