为了实现三台主机(master slave1 slave2)间的免密码登录,分别将slave1和slave2的公钥发送给 master ,然后再将master复制到slave1和slave2
ssh-copy-id master
验证master里面的authorized_keys
cat .ssh/authorized_keys
这里出现了问题,只有master和slave2的公钥,没有slave1,最后发现是slave1主机的etc/hosts文件下没有配置这三个主机的IP地址。出现slave1和slave2的公钥就说明配置成功了。
将master的authorized_keys文件复制给slave1和slave2
scp ~/.ssh/authorized_keys hdp@slave1:~/.ssh
验证三个主机之间可以免密登录后,就直接格式化了,这个操作是错误的,结果就是格式化失败
必须将hadoop目录的所有者设置为启动hadoop的用户,查看hadoop的所有者,发现与启动hadoop的用户(hdp)不同
转换成root,才有权限修改目录的所有者,这里让我比较纠结的一点是路径问题,不确定是在root目录下的 usr 还是 / ,看了一些blog介绍说在root目录下的 / ,相当于普通用户下面的 ~ ,我的hadoop位于hdp用户下的 usr/local,因此用 / 。如果不确定,可以在终端查看一下。
su root \\转换成root修改hadoop的所有者,普通用户(hdp)没有权限修改
chown mail:mail file \\改变拥有者和群组
建议关闭防火墙后,再格式化
service iptables stop
chkconfig iptables off
hdfs namenode -format
格式化成功截图
启动hadoop集群,执行
start-dfs.sh \\启动namenode,必须在该节点主机上运行命令
出现错误
可以看到slave1主机和slave2主机没有权限和无法访问文件,主要原因是只在master修改了文件(hadoop-2.7.0)的拥有者(hdp),未在slave1和slave2中修改他们的的文件拥有者。全部修改完毕以后,用jps命令查看主机中的进程,一切正常。
继续执行启动集群命令。注意,执行以下命令时,在slave2主机上执行,不在master。
start-yarn.sh \\启动resourcemanager,必须在该节点主机上运行命令,出现问题。 master和slave1都能正常启动,唯独slave2报 Host key verification failed. 错误。
看其他的文章说与known_hosts文件有关,分别查看了一下master和slave2的known_hosts文件,发现master的文件中有master,slave1和slave2的公钥,而slave2中只有master和slave1。
vi ~/.ssh/known_hosts
我将master主机的slave2公钥复制到slave2主机的known_hosts。问题解决成功。
再次查看各个主机的进程。
运行share中的wordcount实例,统计文件中单词出现的次数。
yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar wordcount /aa/ /bb
出现的具体问题如下:一直连接不上服务器。
解决方法:
关闭各个主机的防火墙!
service iptables stop
chkconfig iptables off
这里转换为root,普通用户没有权限关闭防火墙。
结果展示。