Linux.配置Hadoop环境的一些问题解决

几篇教程


问题与解决

问:伪分布环境配置的时候,启动Hadoop时提示输入root的密码,但是无论如何也无法输入正确。(本人参考很良心的中文版教程进行的配置)

$ sudo /usr/local/hadoop/sbin/start-dfs.sh
Starting namenodes on [localhost]
root@localhost's password: 
root@localhost'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密码已经的确修改成我设置的密码了,但是对于root@localhost’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.
root@localhost'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
root@localhost'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]
root@localhost's password: 
localhost: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-niugenen.out
root@localhost's password: 
localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-niugenen.out
Starting secondary namenodes [0.0.0.0]
root@0.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

展开阅读全文

没有更多推荐了,返回首页