欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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的密码,不过总算成功了 
    Linux.配置Hadoop环境的一些问题解决

问题与解决

$ 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