hadoop学习 3 实体机 HDFS 部署

总体规划:
共4台服务器,ip末尾分别是139,138,137,136.
NameNode、ResourceManager:139 master
SecondaryNameNode:138: slave1
DataNode、NodeManager:137,136 slave2-3

首先安装hadoop和JAVA

具体步骤参考(关闭防火墙和selinux是****的操作,后面的操作大致按照博客进行,有些地方和博客不同,还是按照本文档操作):
https://www.cnblogs.com/dxxblog/p/8126211.html

查看防火墙状态,如果开着,那就关掉:
hadoop学习 3 实体机 HDFS 部署

关闭防火墙,并设置开启不启动:
hadoop学习 3 实体机 HDFS 部署

关闭selinux:
hadoop学习 3 实体机 HDFS 部署
hadoop学习 3 实体机 HDFS 部署

设置ip与主机名的映射关系(设置完最好重启一下):
hadoop学习 3 实体机 HDFS 部署
hadoop学习 3 实体机 HDFS 部署
hadoop学习 3 实体机 HDFS 部署

把ip主机名映射文件scp到其他服务器中(3台):

hadoop学习 3 实体机 HDFS 部署

所有主机安装openssh-server:

hadoop学习 3 实体机 HDFS 部署

master生成**对:
hadoop学习 3 实体机 HDFS 部署

生成成功:
hadoop学习 3 实体机 HDFS 部署

将id_rsa.pub加到授权中:
hadoop学习 3 实体机 HDFS 部署

尝试本地ssh免密登录,成功:

hadoop学习 3 实体机 HDFS 部署

将ssh配置复制到其他服务器上(这里产生**等的具体知识还不明白,以后再回来学习
这一步其实没有完全执行,也许后面的2个“解决方法”和此操作等价):
hadoop学习 3 实体机 HDFS 部署

遇到了问题1:
ssh ip 已经可以免密登录(任何两个节点之间都可以)
但是ssh slave2-3 会报错

尝试解决:
已经重启slave2-3
还是不行
slave2 ssh 登录 slave3报错截图:
hadoop学习 3 实体机 HDFS 部署

解决方法:
在master运行ssh-****** -R +ip,这里的ip必须是和ip对应的主机别名(第一次写了192.168.1.137,但是之后在ssh登录时,会出现ssh ip地址 可以登录,但是ssh slave2-3 就无法登录,最终发现问题在这里,这里的最后需要改为主机别名)
hadoop学习 3 实体机 HDFS 部署
hadoop学习 3 实体机 HDFS 部署

遇到了问题2:
slave结点无法ssh slave2-3(直接输入ip地址是可以的)
解决方法:
在进行了上边的“解决方法”操作后,还要执行一步操作:
hadoop学习 3 实体机 HDFS 部署

参考博客:https://www.cnblogs.com/dxxblog/p/8028117.html
博客截图:

hadoop学习 3 实体机 HDFS 部署

最终测试:ssh免密登录是否成功:
master结点正常:
hadoop学习 3 实体机 HDFS 部署

slave1结点正常:
hadoop学习 3 实体机 HDFS 部署

slave2结点正常:
hadoop学习 3 实体机 HDFS 部署

slave3结点正常:
hadoop学习 3 实体机 HDFS 部署

至此,ssh免密登录配置成功。

更改配置文件(注意,之间不能有空格):
配置文件所在路径:
hadoop学习 3 实体机 HDFS 部署

core-site.xml:
hadoop学习 3 实体机 HDFS 部署

hdfs-site.xml
hadoop学习 3 实体机 HDFS 部署

mapred-site.xml可能只有.template文件,可以复制一个.template,然后改名为mapred-site.xml即可。

hadoop学习 3 实体机 HDFS 部署
hadoop学习 3 实体机 HDFS 部署

yarn-site.xml
hadoop学习 3 实体机 HDFS 部署

salves:(只写DataNode守护进程所在的主机名,确定)
hadoop学习 3 实体机 HDFS 部署

yarn-env.sh,把注释掉的一句话修改一下,配置JAVA_HOME
hadoop学习 3 实体机 HDFS 部署

把改好之后的配置文件scp到其他salve上去:
hadoop学习 3 实体机 HDFS 部署
hadoop学习 3 实体机 HDFS 部署

格式化master(格式化 一般在配置NTP时间同步(见文档4)后进行):
hadoop学习 3 实体机 HDFS 部署

执行start-all.sh,发现报错,JAVA_HOME没有设定
原因:/etc/hadoop/hadoop-env.sh中JAVA_HOME没有设置

hadoop学习 3 实体机 HDFS 部署

设置/etc/hadoop/hadoop-env.sh中JAVA_HOME:
hadoop学习 3 实体机 HDFS 部署

再通过scp把配置文件分发到各slave结点上:
hadoop学习 3 实体机 HDFS 部署

master重新格式化一遍(格式化 一般在配置NTP时间同步(见文档4)后进行):
hadoop学习 3 实体机 HDFS 部署

master执行start-all.sh:
master中运行的守护进程:

hadoop学习 3 实体机 HDFS 部署

slave1中运行的守护进程:

hadoop学习 3 实体机 HDFS 部署

slave2中运行的守护进程:
hadoop学习 3 实体机 HDFS 部署

slave3中运行的守护进程:

hadoop学习 3 实体机 HDFS 部署

至此,集群启动成功!

附:

集群格式化解读(部分):
可以看到我们设置了默认的副本数为3:
hadoop学习 3 实体机 HDFS 部署

文件系统所属者为root:
hadoop学习 3 实体机 HDFS 部署

高可用HA未开启:
hadoop学习 3 实体机 HDFS 部署

可以追加写内容:
hadoop学习 3 实体机 HDFS 部署

块池ID:
hadoop学习 3 实体机 HDFS 部署

存储路径(NameNode的数据存储的路径)已经被成功创建(formatted意为格式化):
hadoop学习 3 实体机 HDFS 部署

镜像文件存储:
hadoop学习 3 实体机 HDFS 部署

启动脚本、关闭脚本的命令:
hadoop学习 3 实体机 HDFS 部署

试验:若使用start-dfs.sh和start-yarn.sh指令来启动集群(之前用的是start-all.sh):
先执行start-dfs.sh:
hadoop学习 3 实体机 HDFS 部署
hadoop学习 3 实体机 HDFS 部署
hadoop学习 3 实体机 HDFS 部署
hadoop学习 3 实体机 HDFS 部署
hadoop学习 3 实体机 HDFS 部署

再执行start-yarn.sh:

hadoop学习 3 实体机 HDFS 部署
hadoop学习 3 实体机 HDFS 部署

hadoop学习 3 实体机 HDFS 部署

stop-dfs.sh和stop-yarn.sh两个相继执行,也是分别终止不同的守护进程,这里不再截图。

logs文件在/opt/apps/hadoop/logs中。
hadoop学习 3 实体机 HDFS 部署

问题:如果出现多次hadoop namenode -format之后,DataNode无法启动的情况(命令行也不报错、log里面也没看到问题),那么解决方法如下:
将所有机器(master和所有salve)的/opt/apps下面的tmp目录删掉(rm -rf tmp),然后再在master上面hadoop namenode -format,就可以了。