hdfs无法从hadoop3.2开始:需要bashv3.2+

kqhtkvqz  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(804)

我正在构建一个由2个节点组成的小型hadoop集群:1个主节点+1个工作节点。我使用的是最新版本的hadoop(3.2),所有操作都由root用户执行。在安装过程中,我能够 hdfs namenode -format . 下一步是用 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

当我使用zsh(噢,我的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
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
hgncfbus

hgncfbus1#

热释光;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 在使用Java11时。切换到Java8解决了我的问题(不要忘记更新所有 $JAVA_HOME 变量,都在 /etc/environment 以及 hadoop-env.sh ).
成功\o/。但是,我很高兴理解为什么root用户不能这样做。我知道使用root是个坏习惯,但在实验环境中,拥有一个干净的“接近”生产环境并不符合我们的兴趣。任何有关这方面的信息将不胜感激:)。

相关问题