Linux.配置Hadoop环境的一些问题解决
程序员文章站
2022-03-26 10:41:28
...
几篇教程
问题与解决
问:伪分布环境配置的时候,启动Hadoop时提示输入root的密码,但是无论如何也无法输入正确。(本人参考很良心的中文版教程进行的配置)
$ sudo /usr/local/hadoop/sbin/start-dfs.sh
Starting namenodes on [localhost]
root@localhost's password:
aaa@qq.com's password: localhost: Permission denied, please try again.
- 1
- 2
- 3
- 4
答:首先发现我用了sudo,所以提示需要输入的密码是root的
1.Ubuntu默认的root密码似乎是随机的,如果没有更改过那么无论你怎么输入也不对。故需要修改root密码。
$sudo passwd root
- 1
2.但是改了之后,原本无法su root成功,修改后可以成功su root,证明我的root密码已经的确修改成我设置的密码了,但是对于aaa@qq.com’s password:还是没办法怎么办:修改ssh的配置文件
$sudo gedit /etc/ssh/sshd_config
- 1
1) PasswordAuthentication yes
2) PermitRootLogin yes
3) RSAAuthentication yes
4) PubkeyAuthentication yes
5) AuthorizedKeysFile %h/.ssh/authorized_keys
- 尤其是(2)的PermitRootLogin,在我找遍了谷歌百度也无解的时候,我确信问题出在ssh身上,于是查看了ssh的日志记录
$ cat /var/log/auth.log | grep ssh
- 1
- 注意,文件名不一定是auth.log,路径也不一定百分百匹配,因为我看一篇文章上是ta的日志在别处叫别的名字,总之实在/var/log这里面,找一找就能找到
Feb 23 23:07:33 niugenen sshd[6429]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=127.0.0.1 user=root
Feb 23 23:07:40 niugenen sshd[6429]: Failed password for root from 127.0.0.1 port 43132 ssh2
Feb 23 23:07:45 niugenen sshd[6429]: Failed password for root from 127.0.0.1 port 43132 ssh2
Feb 23 23:07:46 niugenen sshd[6429]: Failed password for root from 127.0.0.1 port 43132 ssh2
Feb 23 23:07:46 niugenen sshd[6429]: Connection closed by 127.0.0.1 port 43132 [preauth]
- 1
- 2
- 3
- 4
- 5
- 错误记录全是Failed password for root from 127.0.0.1,也就是我启动hadoop的时候采用的sudo模式,即以本机root用户来ssh连接到本机,所以一定是用root身份来ssh连接到localhost的问题。
- 于是我试着用root身份来直接ssh到localhost
$ su root
密码:
# ssh localhost
root@localhost's password:
Permission denied, please try again.
aaa@qq.com's password:
- 1
- 2
- 3
- 4
- 5
- 6
- 果然和启动hadoop的时候一样的问题
- 但一定是密码错误吗?一开始我也以为是密码错误,但我又确信root密码的确被我修改了,于是直到我看到了ssh配置文件中的(2)PermitRootLogin
- 未修改前的配置文件如下
#PermitRootLogin prohibit-password
- 1
- 噗(吐血),竟然设置的是根本不检查密码直接拒绝,立马改成了yes
#PermitRootLogin prohibit-password
PermitRootLogin yes
- 1
- 2
- 设置完才反应过来,原本的设置其实被注释掉了啊,也就是说原本的配置文件里并没有配置PermitRootLogin这一项,那默认存在的这一行是不是意味着默认的设置就是prohibit-password呢?
- 重启ssh服务
$service sshd restart
- 1
- 尝试用root连接localhost
$ su root
密码:
# ssh localhost
aaa@qq.com's password:
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-64-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
271 个可升级软件包。
4 个安全更新。
Last login: Thu Feb 23 23:37:48 2017 from 127.0.0.1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 连接成功
- 启动hadoop
$ sudo /usr/local/hadoop/sbin/start-dfs.sh
Starting namenodes on [localhost]
aaa@qq.com's password:
localhost: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-niugenen.out
aaa@qq.com's password:
localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-niugenen.out
Starting secondary namenodes [0.0.0.0]
aaa@qq.com0.0.0.0's password:
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-niugenen.out
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 启动成功,虽然多次输入了root的密码,不过总算成功了
问题与解决
$ ssh localhost
sign_and_send_pubkey: signing failed: agent refused operation
- 1
- 2
- 解决办法来自一个神奇的地方
- 即执行如下两行命令
$ eval "$(ssh-agent -s)"
$ ssh-add
- 1
- 2
- 查到这样一篇文章,有如下解释
ssh-agent是用于管理**,ssh-add用于将**加入到ssh-agent中,SSH可以和ssh-agent通信获取**,这样就不需要用户手工输入密码了
- 我试着在root模式下(su root)也执行了这两行命令,企图把root用户实现免密登录,但是并不能…故最后还有问题未解决,如下
问题未解决
- 上文中使用sudo来启动hadoop,所以才需要输入root的密码,关于ssh如何配置root用户的免密登录,我就不懂了…
- 但是如果不用sudo,就权限不够,虽然可以直接开放/usr/local/hadoop的权限(尽管没试过,不过既然开放了权限,那即使是用普通用户ssh登录也是可以启动hadoop的吧),但是这种简单粗暴的方法…(难道真的没有其他方法了吗)
- 总归是能启动了吧
$ /usr/local/hadoop/sbin/start-dfs.sh
17/02/24 00:00:41 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Starting namenodes on [localhost]
localhost: chown: 正在更改'/usr/local/hadoop/logs' 的所有者: 不允许的操作
localhost: starting namenode, logging to /usr/local/hadoop/logs/hadoop-niugen-namenode-niugenen.out
localhost: /usr/local/hadoop/sbin/hadoop-daemon.sh: 行 159: /usr/local/hadoop/logs/hadoop-niugen-namenode-niugenen.out: 权限不够
localhost: head: 无法打开'/usr/local/hadoop/logs/hadoop-niugen-namenode-niugenen.out' 读取数据: 没有那个文件或目录
localhost: /usr/local/hadoop/sbin/hadoop-daemon.sh: 行 177: /usr/local/hadoop/logs/hadoop-niugen-namenode-niugenen.out: 权限不够
localhost: /usr/local/hadoop/sbin/hadoop-daemon.sh: 行 178: /usr/local/hadoop/logs/hadoop-niugen-namenode-niugenen.out: 权限不够
localhost: chown: 正在更改'/usr/local/hadoop/logs' 的所有者: 不允许的操作
localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-niugen-datanode-niugenen.out
localhost: /usr/local/hadoop/sbin/hadoop-daemon.sh: 行 159: /usr/local/hadoop/logs/hadoop-niugen-datanode-niugenen.out: 权限不够
localhost: head: 无法打开'/usr/local/hadoop/logs/hadoop-niugen-datanode-niugenen.out' 读取数据: 没有那个文件或目录
localhost: /usr/local/hadoop/sbin/hadoop-daemon.sh: 行 177: /usr/local/hadoop/logs/hadoop-niugen-datanode-niugenen.out: 权限不够
localhost: /usr/local/hadoop/sbin/hadoop-daemon.sh: 行 178: /usr/local/hadoop/logs/hadoop-niugen-datanode-niugenen.out: 权限不够
Starting secondary namenodes [0.0.0.0]
0.0.0.0: chown: 正在更改'/usr/local/hadoop/logs' 的所有者: 不允许的操作
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-niugen-secondarynamenode-niugenen.out
0.0.0.0: /usr/local/hadoop/sbin/hadoop-daemon.sh: 行 159: /usr/local/hadoop/logs/hadoop-niugen-secondarynamenode-niugenen.out: 权限不够
0.0.0.0: head: 无法打开'/usr/local/hadoop/logs/hadoop-niugen-secondarynamenode-niugenen.out' 读取数据: 没有那个文件或目录
0.0.0.0: /usr/local/hadoop/sbin/hadoop-daemon.sh: 行 177: /usr/local/hadoop/logs/hadoop-niugen-secondarynamenode-niugenen.out: 权限不够
0.0.0.0: /usr/local/hadoop/sbin/hadoop-daemon.sh: 行 178: /usr/local/hadoop/logs/hadoop-niugen-secondarynamenode-niugenen.out: 权限不够
17/02/24 00:01:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 很是忧伤
上述问题的解决
- 根本原因在于/usr/local/hadoop这个文件夹以及其内容,其拥有者为root,普通用户根本没有写权限
- 尽管用sudo可以行使root权限,但毕竟不是长久之计
- 所以
- 其实
- 一切都很简单
$ sudo chown -R niugen /usr/local/hadoop
- 1
- 将/usr/local/hadoop及其所有内容的拥有者改为普通用户niugen即可
- 然后关闭hadoop,重置namenode,重启hadoop
- 一路顺畅
转载地址:http://blog.csdn.net/stringnewname/article/details/56688083
推荐阅读
-
配置hadoop环境变量的参数(linux配置hadoop环境变量)
-
hadoop伪分布模式的配置和一些常用命令
-
Ubuntu16.04下伪分布式环境搭建之hadoop、jdk、Hbase、phoenix的安装与配置
-
hadoop配置中的一些问题总结
-
3、环境搭建-Linux上hadoop的全分布配置
-
正式生产环境下hadoop集群的DNS+NFS+ssh免密码登陆配置
-
关于使用Django连接MySQL进行环境配置的一些问题
-
在Hadoop集群环境中为MySQL安装配置Sqoop的教程_MySQL
-
Hadoop配置环境变量Program~2的用法
-
在Hadoop集群环境中为MySQL安装配置Sqoop的教程_MySQL