HDFS не запускается с Hadoop 3.2: требуется bash v3.2+

Я создаю небольшой кластер Hadoop, состоящий из 2 узлов: 1 главный + 1 рабочий. Я использую последнюю версию Hadoop (3.2), и все выполняется пользователем root. В процессе установки мне удалось hdfs namenode -format. Следующим шагом будет запуск демона HDFS с start-dfs.sh.

$ start-dfs.sh                  
Starting namenodes on [master]
bash v3.2+ is required. Sorry.
Starting datanodes
bash v3.2+ is required. Sorry.
Starting secondary namenodes [master]
bash v3.2+ is required. Sorry.

Вот сгенерированные журналы в журнале:

$ journalctl --since "1 min ago"
-- Logs begin at Thu 2019-08-29 11:12:27 CEST, end at Thu 2019-08-29 11:46:40 CEST. --
Aug 29 11:46:40 master su[3329]: (to root) root on pts/0
Aug 29 11:46:40 master su[3329]: pam_unix(su-l:session): session opened for user root by root(uid=0)
Aug 29 11:46:40 master su[3329]: pam_unix(su-l:session): session closed for user root
Aug 29 11:46:40 master su[3334]: (to root) root on pts/0
Aug 29 11:46:40 master su[3334]: pam_unix(su-l:session): session opened for user root by root(uid=0)
Aug 29 11:46:40 master su[3334]: pam_unix(su-l:session): session closed for user root
Aug 29 11:46:40 master su[3389]: (to root) root on pts/0
Aug 29 11:46:40 master su[3389]: pam_unix(su-l:session): session opened for user root by root(uid=0)
Aug 29 11:46:40 master su[3389]: pam_unix(su-l:session): session closed for user root

Поскольку я использую ZshOh-my-Zsh), я вошел в консоль bash, чтобы попробовать. К сожалению, я получаю тот же результат. На самом деле эта ошибка возникает для всех sbin/start-*.sh скриптов. Однако команды hadoop и yarn прекрасно работают.

Поскольку я не нашел много информации об этой ошибке в Интернете, я здесь. Буду рад любому совету!


Другие технические детали

Информация об операционной системе:

$ lsb_release -d
Description:    Debian GNU/Linux 10 (buster)

$ uname -srm       
Linux 4.19.0-5-amd64 x86_64

Доступные версии Java (пробовал обе):

$ update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                                Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java          1111      auto mode
* 1            /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java   1081      manual mode
  2            /usr/lib/jvm/java-11-openjdk-amd64/bin/java          1111      manual mode

Некоторые переменные ENV, которые могут вас заинтересовать:

$ env
USER=root
LOGNAME=root
HOME=/root
PATH=/root/bin:/usr/local/bin:/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/usr/bin/zsh
TERM=rxvt-unicode
JAVA_HOME=/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64
HADOOP_HOME=/usr/local/hadoop
HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
ZSH=/root/.oh-my-zsh

Вывод исполняемого файла Hadoop:

$ hadoop version
Hadoop 3.2.0
Source code repository https://github.com/apache/hadoop.git -r e97acb3bd8f3befd27418996fa5d4b50bf2e17bf
Compiled by sunilg on 2019-01-08T06:08Z
Compiled with protoc 2.5.0
From source with checksum d3f0795ed0d9dc378e2c785d3668f39
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.2.0.jar

Моя установка Zsh и Bash:

$ zsh --version
zsh 5.7.1 (x86_64-debian-linux-gnu)

$ bash --version
GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu)

# only available in a console using *bash*
$ echo ${BASH_VERSINFO[@]}
5 0 3 1 release x86_64-pc-linux-gnu

person David Guyon    schedule 28.08.2019    source источник
comment
Какой дистрибутив Linux вы используете?   -  person Alexandre Juma    schedule 29.08.2019
comment
Это Debian 10 и ядро ​​4.19. Я обновил свой пост соответственно ;)   -  person David Guyon    schedule 29.08.2019
comment
Я только что добавил вывод journalctl   -  person David Guyon    schedule 29.08.2019
comment
Не могли бы вы опубликовать вывод echo ${BASH_VERSINFO}   -  person Alexandre Juma    schedule 29.08.2019
comment
Я вставил вывод этой команды в сообщение. Отвечу на ваш ответ ниже.   -  person David Guyon    schedule 29.08.2019


Ответы (2)


TL;DR: используйте другого пользователя (например, hadoop) вместо root.


Я нашел решение, но не глубокое понимание того, что происходит. Несмотря на то, как мне грустно, вот решение, которое я нашел:

Запуск с пользователем root:

$ start-dfs.sh 
Starting namenodes on [master]
bash v3.2+ is required. Sorry.
Starting datanodes
bash v3.2+ is required. Sorry.
Starting secondary namenodes [master_bis]
bash v3.2+ is required. Sorry

Затем я создал пользователя hadoop и предоставил этому пользователю права на установку Hadoop (доступ R/W). После входа в систему с этим новым пользователем у меня есть следующий вывод для команды, которая вызвала у меня некоторые проблемы:

$ start-dfs.sh 
Starting namenodes on [master]
Starting datanodes
Starting secondary namenodes [master_bis]

Кроме того, я заметил, что процессы, созданные start-yarn.sh, не были перечислены в выводе jps при использовании Java 11. Переход на Java 8 решил мою проблему (не забудьте обновить все переменные $JAVA_HOME, как в /etc/environment, так и в hadoop-env.sh).

Успех \о/. Однако я был бы рад понять, почему пользователь root не может этого сделать. Я знаю, что использовать root — дурная привычка, но в экспериментальной среде нас не интересует чистая «близкая к» производственная среда. Любая информация об этом будет любезно оценена :).

person David Guyon    schedule 29.08.2019

пытаться

chsh -s /bin/bash

чтобы изменить оболочку по умолчанию обратно на bash

person Json Bourne    schedule 22.05.2021