hadoop HA配置与安装

在这次安装linux是的过程中出现很多错误:比如刚开始的时候建立四个虚拟机的时候,配置时把名字写成node 01中间写了空格,导致配置时名字读不完,导致全都是node,所以千万不要留空格,前面的步骤都比较简单,都是些小错误,稍微改一下就行,安装linux时也要注意一些小问题,我刚开始就是把ip设置成一样了,导致四台机子的ip都一样,配置文件完成之后也改不过来,所以这时可以打开机子的属性,自行手动改一下机子的ip还有要注意的就是在发送文件的过程中千万不要按control+c让他停下来,不论代码冒出来的多少,时间长或短,都要慢慢等待,否则就会导致文件传输不完,后面出错要回来慢慢找(我就是这样的,当时还找了一半天错误,没想到的是这末基础的小错误)这些都可能会影响到ha的配置,这些小问题之前没注意,结果都在HA配置这里出问题了,在HA的时候, 在后面配置nmenode等信息时我就是一直错了,走一步错一步,几乎天天都在改错,(所以细心很重要)我会把我的错误都在下面成列出来(缺少namenode,datanode,journal,出现两台standby,缺少zkfc我都出现过,包括jps后之前有的,第二次打开电脑却不见了,免**功能自动失效而(手动配置就好,看清楚机子编号)文章简单清晰,且都配有图片,可能出现的问题和解决方法我都一一例出

Hadoop HA安装(适用新手)
说明:(让操作简单方便一点)
按ESC,:wq为保存退出 ,:q!为不保存退出,复制,粘贴时不能用control+c,+v了,直接右键复制,粘贴就好,vi是打开文件并可以修改文件,进入文件后修改文件时要输入时按i即可在原文件里改动了。table键可以自动填充路径等。
安装vmware虚拟机

三.hadoop高可用的安装

1.分发jdk到node03、04、02
-scp jdk-7u67-linux-x64.rpm node02:pwd
-scp jdk-7u67-linux-x64.rpm node03:pwd
-scp jdk-7u67-linux-x64.rpm node04:pwd
并在Xshell的全部会话栏里一起ll,看jdk是否发送成功。
注意:` 这一符号是数字1左边这个键
在这里插入图片描述在这里插入图片描述

2.分别在node02、03、04上执行rpm安装命令
-rpm -i jdk-7u67-linux-x64.rpm
在node01上 注意cd /etc(此路径下),在此目录下把profile文件分发到
node03、04、02上。
scp profile node02:pwd
scp profile node03:pwd
scp profile node04:pwd
3.利用Xshell全部会话栏,source /etc/profile
利用Xshell全部会话栏,jps,看02、03、04这三台机子
的jdk是否装好。
在这里插入图片描述
4.
在这里插入图片描述

就可以在里面输入命令,然后同步到四个机子
在这里插入图片描述
5.第一步调时间:
6.在全部对话框中输入date查看一下四个机子是否同时,(以下在全部对话框中输入)
第一步:yum -y install ntp
第二步:ntpdate time1.aliyun.com
7.cat /etc/sysconfig/network查看HOSTNAME是否正确
8.cat /etc/hosts查看IP映射是否正确
若不正确,可以改文件,也可以把node03上的用scp分发过去。
9.cat /etc/sysconfig/network
10.cat /etc/sysconfig/selinux (防火墙是否关闭)
service iptables status

在这里插入图片描述在这里插入图片描述

11.接下来检查一下有没有 .ssh(全部对话框中)
在这里插入图片描述
某台机子若没有则输入 :ssh localhost(记得exit退出)看截图
进如。Ssh文件查看一下,
12.进入ss.h目录文件夹下: cd .ssh
ll 查看公钥
13.将公钥发送到其他三个机子;如我的:
scp id_dsa.pub node02:pwd/node01.pub (将node01的公钥发送到node02)
依次发送到机子三和机子四:
scp id_dsa.pub node03:pwd/node01.pub
scp id_dsa.pub node04:pwd/node01.pub
在这里插入图片描述
14.再全部回话下查看一下是否都有公钥:而且都是(4台机子)这样的:
在这里插入图片描述
15.若不是则做以下修改;(没有id_dsa的)自己手动来免**:
ssh-****** -t dsa -P ‘’ -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
ssh localhost
ssh node02(哪台机子没有的ssh一下)
exit(别忘记)
cd .ssh(进入.ssh检查是否有了文件)
ll -a
一般都出来了
16.接下来:(为其他三台机子面**)
cat node01.pub >> authorized_keys(我的公钥在node01上) (exit哦)
在node02的.ssh(cd .ssh)目录下看是否有node01
如果有追加authorizes_keys
cat node01.pub >> authorized_keys
并在node01上 ssh node02看是否免**了(exit不要忘)
给node02,03,04都追加下node01.pub,也就是在node05 ,06的.ssh目录下执行cat node01.pub >> authorized_keys
17.修改namenode的一些配置信息
vi hdfs-site.xml
两个Configration中间
去掉snn的配置

dfs.replication
3

dfs.nameservices mycluster dfs.ha.namenodes.mycluster nn1,nn2 dfs.namenode.rpc-address.mycluster.nn1 node01:8020 dfs.namenode.rpc-address.mycluster.nn2 node02:8020 dfs.namenode.http-address.mycluster.nn1 node01:50070 dfs.namenode.http-address.mycluster.nn2 node02:50070 dfs.namenode.shared.edits.dir qjournal://node01:8485;node02:8485;node03:8485/mycluster dfs.journalnode.edits.dir /var/yss/hadoop/ha/jn dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.fencing.methods sshfence dfs.ha.fencing.ssh.private-key-files /root/.ssh/id_dsa dfs.ha.automatic-failover.enabled true 18.vi core-site.xml fs.defaultFS hdfs://mycluster ha.zookeeper.quorum node02:2181,node03:2181,node04:2181 19.修改nodename的配置 第一步 1.cd /opt/yss/hadoop-2.6.5/etc/hadoop/ 2. vi slaves

在这里插入图片描述

  1. cd /opt/ yss(ll一下可以看到有haddop)
    .在这里插入图片描述

20.安装hadoop:分别将这个文件发到node02,node03,04上,
scp -r yss/ node02:pwd
scp -r yss/ node03:pwd
scp -r yss/ node04:pwd
出来是这样的不要质疑(千万不要ctrol+c)
在这里插入图片描述
21.然后到node02,03,04的cd /opt/yss目录下ll查看一下
在这里插入图片描述
22.将hdfs-site.xml和core-site.xml分发到node02、03、04
-scp hdfs-site.xml core-site.xml node02:pwd
-scp hdfs-site.xml core-site.xml node03:pwd
-scp hdfs-site.xml core-site.xml node04:pwd
23.开始装zoomkeeper了(在node02中)
24.在家目录下创建software文件
(mkdir software)

在这里插入图片描述在这里插入图片描述
25.将zookeeper-3.4.6.tar.gz通过xf4放到software文件夹下
在这里插入图片描述
查看一下:ll
在这里插入图片描述
26.tar xf zookeeper-3.4.6.tar.gz -C /opt/yss(将其解压到同自己名字首写的文件夹下)
ll看是否解压:在(cd /opt/yss目录下)
27.到此目录下:
cd /opt/yss/zookeeper-3.4.6/
能看到confs文件并进入: cd conf
cp zoo_sample.cfg
cp zoo_sample.cfg zoo.cfg(修改名字并复制一份 以防万一ll查看一下)
28.vi zoo.cfg (修改如下)
改dataDir=/var/yss/zk
并在末尾追加
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888
在这里插入图片描述
29.cd /opt/yss/(此目录下)
scp -r zookeeper-3.4.6/ node03:pwd(将其发送到node03,node04)
scp -r zookeeper-3.4.6/ node04:pwd

在这里插入图片描述
mkdir -p /var/yss/zk
echo 1 > /var/yss/zk/myid
cat /var/yss/zk/myid

分别在node03,04上也执行一样的创建,echo
不一样的是Node03 :echo 2 > /var/yss/zk/myid
Node04 :echo 3 > /var/yss/zk/myid
如图:

在这里插入图片描述在这里插入图片描述

30.cd /opt/yss/zookeeper-3.4.6/
31.vi /etc/profile(在/etc/profile里面配置)

6.然后在把/etc/profile分发到其他node03、node04
scp /etc/profile node03:/etc
scp /etc/profile node04:/etc

在这里插入图片描述

source /etc/profie,这步千万别忘
验证source这句是否完成,输入zkCli.s,按Tab可以把名字补全zkCli.sh
32.启动zookeeper
全部会话:zkServer.sh start
接着用zkServer.sh status查看每个zookeeper节点的状态(两个foller一个leader)
在这里插入图片描述
33.
34.为了使两台namenode间完成数据同步
在02、03、04三台机子上分别把journalnode启动起来
hadoop-daemon.sh start journalnode
在这里插入图片描述
35.随意挑一台namenode上执行hdfs namenode –format
另一台namenode不用执行,否则clusterID变了,找不到
集群了。(我的是2)
在这里插入图片描述
36.然后,启动刚刚格式化的那台namenode
hadoop-daemon.sh start namenode
37.在另一台namenode ,我们要给另一台namenode同步一下数据,用以下命令(我的是node02)
hdfs zkfc -formatZK
在node02上执行zkCli.sh打开zookeeper客户端看
hadoop-ha是否打开
在这里插入图片描述在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/20200618013044826.png在这里插入图片描述

注意我在这里就开始一直出错了,上面步骤要确定对不对
38.在node01上启动hdfs集群:
start-dfs.sh
注意:如果那个节点没起来到hadoop目录下去看那个
node的日志文件log
我的错误有先后缺少namenode,datanode,出现两个standby,zkfc,奇怪吧,我所有错误都出现过而且在不同的时间
Node01
在这里插入图片描述
Node02:
在这里插入图片描述
Node03
在这里插入图片描述
Node04
在这里插入图片描述
这里出错的同学也会有很多:
我问题一般有:
问题1:就是之前发送文件到node03,04,02的时候按暂停了,所以文件夹下没有相应的文件
解决:重新发一下就行,会覆盖掉前面错误的文件,检查一下相应的配置(小心为妙)
问题2:突然不知道咋回事我的node01不能免密码访问2,3,4了,之前都好好的,我觉得应该是配置哪里把他给重复了,格式化了,忘记更新了都有可能whatever,只要按步骤解决就行
解决:我重新设置免**,发送公钥,追加公钥,(说实话弄了几次,差点崩溃,结果都是忘了exit)别急慢慢来,慢慢试
问题3:先是node02或node01没有namenode(我是忘了前面的namenode standby同步的那一步,而且)
解决:hdfs namenode –bootstrapStandby
把namenode的数据同步到node02上
hadoop-daemon.sh start namenode
启动node02上的namenode作为standby
问题4:没有datanode(之前是有的,第二次打开就没有了)
解决:这是因为我在同一个机子上格式了多次导致clusterid变了,到打开datanode时旁边提示的日志文件里,查看错误
cd /opt/yss/hadoop-2.6.5/logs
cat hadoop-root-datanode-node01.log(查看日志)

在这里插入图片描述在这里插入图片描述在这里插入图片描述

在at前面的都是错误(但其实看这里没有什么用,响上找,找可用信息)
我的图没了,当时没有截图,大概意思就是我的datanode的clusterid不一致,照着错误信息提示将正确的id改过来就行
node02,node03,node04
cd /tmp/hadoop-root/dfs/data/current/
vi VERSION
要保证node02,node03,node04的VERSION文件中的clusterID一样
到我划圈的类似路径中的路径中去看看datanode,他会标出错误id和正确id
cd /var/yss/hadoop/ha/ jin /jn /current (下的clusterid)
vi VERSION(如果路径不对你就ll,查一下文件夹下有什么文件,直到最后可以找到那个目录下的version文件)
在这里插入图片描述
cd /tmp/hadoop-root/dfs/data/current/下的id
在这里插入图片描述
对照使下面的id和上面的相等即可(node02,node03,node04都要改成一样)
问题5:没有zkfc
解决:这个不是什么大事,重新格式话一下zkfc就行了
问题6:就是缺少的有东西(忘了是啥了)
解决:前面设置namenode信息那里,core-site,yern,那里文件出错了,去检查一下(我的错误是少了最后的)
检查看看相应的机子名是否正确。
39.用浏览器访问node01:50070和node02:50070

在这里插入图片描述在这里插入图片描述
这里我也出现了问题
就是出现了两个standby(由于将两个机子都执行了hdfs namenode –bootstrapStandby)
如果出现这样的错误有两个可能
1.打开集群的方式不对,先打开了集群,而不是zkserver
解决:关闭集群,重新打开:步骤为
zkServer.sh start
start-dfs.sh
2.需要从前面重新格式化named,standby, zkCli.sh执行一遍,其中一个standby就会变为active了(参考前面),这是因为多执行了同步standby在两台机子上。
40.关闭集群命令:stop-dfs.sh
关闭zookeeper命令:zkServer.sh stop
Jps检查一下看看是否只有jps,若是则全部关完了(关了在打开,继续下几步)
为MapReduce做准备
41.把mapred-site.xml.template留个备份,并且改下名字
cp mapred-site.xml.template mapred-site.xml
在mapred-site.xml里添加如下property

mapreduce.framework.name
yarn

42.在yarn-site.xml里添加如下property

yarn.nodemanager.aux-services
mapreduce_shuffle


yarn.resourcemanager.ha.enabled
true


yarn.resourcemanager.cluster-id
cluster1


yarn.resourcemanager.ha.rm-ids
rm1,rm2


yarn.resourcemanager.hostname.rm1
node03


yarn.resourcemanager.hostname.rm2
node04


yarn.resourcemanager.zk-address
node02:2181,node03:2181,node04:2181

43.把mapred-site.xml和yarn-site.xml 分发到node03、04、02
scp mapred-site.xml yarn-site.xml node03:pwd
scp mapred-site.xml yarn-site.xml node04:pwd
scp mapred-site.xml yarn-site.xml node02:pwd
(需要注意的时分发的时候可能电脑出现很多信息,但是,千万不要去按control+c来结束)
44.由于node03和node04都是resourcemanager,所以它俩应该相互免**
node03上免**登录node04:
在node03的.ssh目录下生成**
ssh-****** -t dsa -P ‘’ -f ./id_dsa
并追加到自己authorized_keys
cat id_dsa.pub >> authorized_keys
用ssh localhost验证看是否需要密码,别忘了exit
将node03 的公钥分发到node04
scp id_dsa.pub node04:pwd/node03.pub
在node04的.ssh目录下,追加node03.pub
cat node03.pub >> authorized_keys
在node03上ssh node04,看是否免**
node04上免**登录node03:
在node04的.ssh目录下生成**
ssh-****** -t dsa -P ‘’ -f ./id_dsa
并追加到自己authorized_keys
cat id_dsa.pub >> authorized_keys
用ssh localhost验证看是否需要密码,别忘了exit
将node04的公钥分发到node03
scp id_dsa.pub node03:pwd/node04.pub
在node03的.ssh目录下,追加node04.pub
cat node04.pub >> authorized_keys
在node04上ssh node03,看是否免**
45…启动zookeeper,全部会话zkServer.sh start
2.在node01上启动hdfs,start-dfs.sh
3.在node01上启动yarn,start-yarn.sh
4.在node03、04上分别启动resourcemanager,
yarn-daemon.sh start resourcemanager
5.全部会话jps,看进程全不全
Node01
在这里插入图片描述
Node02:
在这里插入图片描述
Node03:
在这里插入图片描述
Node04:

在这里插入图片描述
46.在浏览器访问node04:8088,查看resourcemanager管理的内容在这里插入图片描述在这里插入图片描述

跑一个wordcount试试
1.cd /opt/yss/hadoop-2.6.5/share/hadoop/mapreduce
2.在hdfs里建立输入目录和输出目录
hdfs dfs -mkdir -p /data/in
hdfs dfs -mkdir -p /data/out
3.将要统计数据的文件上传到输入目录并查看
hdfs dfs -put ~/500miles.txt /data/in
hdfs dfs -ls /data/in
4. 运行wordcount(注意:此时的/data/out必须是空目录
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/in /data/out/result
在这里我又出现了一个傻问题
我之前运行过wordcount,居然在相同的文件下跑(不是空的),所以出现了错误,还有一个就是我的时间不同步

解决:换个文件名,或删除原来的文件,让其变为空的,将时间调成一样。
错误如图:
在这里插入图片描述在这里插入图片描述这是我第三次运行的图:
在这里插入图片描述
at上面显示的错误很明显是时间不一致,根据上面步骤调一下就行

在这里插入图片描述查看运行结果
hdfs dfs -ls /data/out/result
hdfs dfs -cat /data/out/result/part-r-00000
在这里插入图片描述

关闭集群:
node01: stop-dfs.sh
node01: stop-yarn.sh (停止nodemanager)
node03,node04: yarn-daemon.sh stop resourcemanager
Node03、02、04:zkServer.sh stop

47.下载需要的东西在这个文件里:https://pan.baidu.com/s/1ssILTA78ZL9pATNC7fVOlQ