HDFS无法从Hadoop 3.2:bash v3.2+;是必需的

HDFS无法从Hadoop 3.2:bash v3.2+;是必需的,hadoop,hdfs,hadoop3,Hadoop,Hdfs,Hadoop3,我正在构建一个由2个节点组成的小型Hadoop集群:1个主节点+1个工作节点。我使用的是最新版本的Hadoop(3.2),所有操作都由root用户执行。在安装过程中,我能够hdfs namenode-format。下一步是使用start dfs.sh启动HDFS守护进程 $ start-dfs.sh Starting namenodes on [master] bash v3.2+ is required. Sorry. Starting datanodes

我正在构建一个由2个节点组成的小型Hadoop集群:1个主节点+1个工作节点。我使用的是最新版本的Hadoop(3.2),所有操作都由root用户执行。在安装过程中,我能够
hdfs namenode-format
。下一步是使用
start dfs.sh
启动HDFS守护进程

$ 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
当我使用Zsh(带着我的Zsh)时,我登录到bash控制台进行尝试。不幸的是,我得到了同样的结果。事实上,所有
sbin/start-*.sh
脚本都会发生此错误。但是,
hadoop
warn
命令工作起来很有魅力

因为我在网上没有找到关于这个错误的很多信息,所以我来了。如果您有任何建议,我将非常高兴


其他技术细节 操作系统信息:

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

$ uname -srm       
Linux 4.19.0-5-amd64 x86_64
可用的Java版本(两种版本都试用过):

您可能感兴趣的一些环境变量:

$ 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

TL;DR:使用其他用户(例如hadoop)而不是root用户


我找到了解决办法,但对正在发生的事情没有深入的了解。尽管我很难过,但我还是找到了解决办法:

使用root用户运行:

然后我创建了一个hadoop用户,并授予该用户hadoop安装权限(R/W访问权限)。在使用此新用户登录后,我对导致我出现一些问题的命令有以下输出:

$ start-dfs.sh 
Starting namenodes on [master]
Starting datanodes
Starting secondary namenodes [master_bis]
此外,我注意到,在使用Java11时,
start warn.sh
创建的进程没有列在
jps
的输出中。切换到Java 8解决了我的问题(不要忘记更新
/etc/environment
hadoop env.sh
中的所有
$Java\u HOME
变量)

成功\o/。但是,我很高兴理解为什么root用户不能这样做。我知道使用root是一个坏习惯,但在实验环境中,拥有一个干净的“接近”生产环境并不符合我们的兴趣。请提供有关此信息:)。

请尝试

chsh -s /bin/bash

要将默认shell改回bash

您使用的是哪个Linux发行版?它是Debian 10和内核4.19。我已经相应地更新了我的帖子;)我刚刚添加了
journalctl
的输出,你能发布
echo${BASH_VERSINFO}
echo${BASH_VERSINFO[@]}
$ start-dfs.sh 
Starting namenodes on [master]
Starting datanodes
Starting secondary namenodes [master_bis]
chsh -s /bin/bash