超详细大数据学习之Hadoop HA 高可用安装(二)

上一阶段的学习
超详细大数据学习之Hadoop HA 高可用安装(一)
https://blog.csdn.net/qq_44500635/article/details/106796553

六、安装zookeeper

这里我们需要先下载好zookeeper在自己的电脑里,在node02,03,04家目录下创建software文件夹

mkdir software

用Xftp把zookeeper放在node02的software目录下

[root@node02 software]# ll
total 17288
-rw-r--r-- 1 root root 17699306 Jun 17 18:55 zookeeper-3.4.6.tar.gz

这里可以看到我们已经传输好了

1、解压安装zookeeper

tar xf zookeeper-3.4.6.tar.gz -C /opt/ll

解压完成

[root@node02 software]# tar xf zookeeper-3.4.6.tar.gz -C /opt/ll
[root@node02 ~]# cd /opt/ll
[root@node02 ll]# ll
total 179300
drwxr-xr-x 10 root root      4096 Jun 17 17:18 hadoop-2.6.5
-rw-r--r--  1 root root 183594876 Jun 17 17:19 hadoop-2.6.5.tar.gz
drwxr-xr-x 10 1000 1000      4096 Feb 20  2014 zookeeper-3.4.6

2、修改zookeeper的配置文件

cd /opt/ldy/zookeeper-3.4.6/conf
给zoo_sample.cfg改名
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
改dataDir=/var/ll/zk
并在末尾追加
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888
其中2888主从通信端口,3888是当主挂断后进行选举机制的端口

cd /opt/ll/zookeeper-3.4.6/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg

修改的地方

dataDir=/var/ll/zk
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888

修改完成后的截图
在这里插入图片描述

3、把zookeeper分发node03、node04

cd /opt/ll
scp -r zookeeper-3.4.6/ node03:`pwd`
scp -r zookeeper-3.4.6/ node04:`pwd`

这里会要求输入密码,分发结束后
并用cd /opt/ll检查下看分发成功没

[root@node03 ~]# cd /opt/ll
[root@node03 ll]# ll
total 179300
drwxr-xr-x 10 root root      4096 Jun 17 17:22 hadoop-2.6.5
-rw-r--r--  1 root root 183594876 Jun 17 17:22 hadoop-2.6.5.tar.gz
drwxr-xr-x 10 root root      4096 Jun 17 19:06 zookeeper-3.4.6

4、给node02、node03、node04创建刚配置文件里的路径

mkdir -p /var/ll/zk

对node02来说:

echo 1 > /var/ll/zk/myid
cat /var/ll/zk/myid
[root@node02 ~]# mkdir -p /var/ll/zk
[root@node02 ~]# echo 1 > /var/ll/zk/myid
[root@node02 ~]# cat /var/ll/zk/myid
1

对node03来说:

echo 2 > /var/ll/zk/myid
cat /var/ll/zk/myid
[root@node03 ~]# mkdir -p /var/ll/zk
[root@node03 ~]# echo 2 > /var/ll/zk/myid
[root@node03 ~]# cat /var/ll/zk/myid
2

对node04来说:

echo 3 > /var/ll/zk/myid
cat /var/ll/zk/myid
[root@node04 ~]# mkdir -p /var/ll/zk
[root@node04 ~]# echo 3 > /var/ll/zk/myid
[root@node04 ~]# cat /var/ll/zk/myid
3

给每台机子配置其编号(必须是阿拉伯数字)

5、在/etc/profile里面配置

[root@node02 ~]# cd /opt/ll
[root@node02 ll]# vi /etc/profile

添加路径和环境变量

export ZOOKEEPER_HOME=/opt/ll/zookeeper-3.4.6
export PATH=$PATH:/usr/java/jdk1.7.0_67/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin

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

scp /etc/profile node03:/etc
scp /etc/profile node04:/etc

这里后要求输入密码

[root@node02 ll]# scp /etc/profile node03:/etc
root@node03's password: 
profile                                                100% 2020     2.0KB/s   00:00    
[root@node02 ll]# scp /etc/profile node04:/etc
root@node04's password: 
profile                                                100% 2020     2.0KB/s   00:00  

分发完成后
在node02、03、04里source /etc/profile,这步千万别忘
验证source这句是否完成,输入zkCli.s,按Tab可以把名字补全zkCli.sh

source /etc/profile

7、启动zookeeper

全部会话:zkServer.sh start

zkServer.sh start

接着用zkServer.sh status查看每个zookeeper节点的状态

[root@node02 ll]# cd
[root@node02 ~]# zkServer.sh start
JMX enabled by default
Using config: /opt/ll/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

注意:如果启动不起来,请把/etc/profile里的JAVA_HOME改
成绝对路径

vi /etc/profile

在这里插入图片描述

七、启动journalnode

Why启动journalnode?
为了使两台namenode间完成数据同步

在01、02、03三台机子上分别把journalnode启动起来

hadoop-daemon.sh start journalnode

用jps检查下进程启起来了没
node01

[root@node01 ~]# hadoop-daemon.sh start journalnode
starting journalnode, logging to /opt/ll/hadoop-2.6.5/logs/hadoop-root-journalnode-node01
.out[root@node01 ~]# jps
2391 JournalNode
2437 Jps

node02

[root@node02 ~]# hadoop-daemon.sh start journalnode
starting journalnode, logging to /opt/ll/hadoop-2.6.5/logs/hadoop-root-journalnode-node02
.out[root@node02 ~]# jps
1668 JournalNode
1701 Jps
1629 QuorumPeerMain

node03

[root@node03 ~]# hadoop-daemon.sh start journalnode
starting journalnode, logging to /opt/ll/hadoop-2.6.5/logs/hadoop-root-journalnode-node03
.out[root@node03 ~]# jps
1525 QuorumPeerMain
1596 Jps
1563 JournalNode

八、namenode的格式化及启动配置

1、格式化node01的namenode

在node01上执行hdfs namenode –format
另一台namenode不用执行,否则clusterID变了,找不到集群了。

hdfs namenode –format

部分截图
在这里插入图片描述

2、启动node01的namenode

hadoop-daemon.sh start namenode
[root@node01 ~]# hadoop-daemon.sh start namenode
starting namenode, logging to /opt/ll/hadoop-2.6.5/logs/hadoop-root-namenode-node01.out

3、在没有格式化的node02上进行数据同步

hdfs namenode -bootstrapStandby

部分截图
在这里插入图片描述

4、格式化zkfc

回到node01,执行命令hdfs zkfc -formatZK

hdfs zkfc -formatZK

在node02上用zkCli.sh打开zookeeper客户端,并在zookeeper客户端执行命令ls /,看其中是否有hadoop-ha这一项。
(双击红色地方,弹出node02的副客户机)
在这里插入图片描述

[root@node02 ~]# zkCli.sh

部分显示

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] ls /
[hadoop-ha, zookeeper]
[zk: localhost:2181(CONNECTED) 1] 

九、启动hdfs集群

1、在node03上启动hdfs集群:

start-dfs.sh

start-dfs.sh

注意:如果那个节点没起来到hadoop目录下去看那个node的日志文件log

[root@node01 ~]# start-dfs.sh
Starting namenodes on [node01 node02]
node02: starting namenode, logging to /opt/ll/hadoop-2.6.5/logs/hadoop-root-namenode-node02.out
node01: starting namenode, logging to /opt/ll/hadoop-2.6.5/logs/hadoop-root-namenode-node01.out
node04: starting datanode, logging to /opt/ll/hadoop-2.6.5/logs/hadoop-root-datanode-node04.out
node03: starting datanode, logging to /opt/ll/hadoop-2.6.5/logs/hadoop-root-datanode-node03.out
node02: starting datanode, logging to /opt/ll/hadoop-2.6.5/logs/hadoop-root-datanode-node02.out
Starting journal nodes [node01 node02 node03]
node01: starting journalnode, logging to /opt/ll/hadoop-2.6.5/logs/hadoop-root-journalnode-node01.out
node03: starting journalnode, logging to /opt/ll/hadoop-2.6.5/logs/hadoop-root-journalnode-node03.out
node02: starting journalnode, logging to /opt/ll/hadoop-2.6.5/logs/hadoop-root-journalnode-node02.out
Starting ZK Failover Controllers on NN hosts [node01 node02]
node02: starting zkfc, logging to /opt/ll/hadoop-2.6.5/logs/hadoop-root-zkfc-node02.out
node01: starting zkfc, logging to /opt/ll/hadoop-2.6.5/logs/hadoop-root-zkfc-node01.out

然后全部会话jps看一下都起来些什么进程
node01

[root@node01 ~]# jps
2391 JournalNode
3007 NameNode
2920 DFSZKFailoverController
3040 Jps

node02

[root@node02 ~]# jps
1668 JournalNode
1629 QuorumPeerMain
1938 DFSZKFailoverController
1871 DataNode
2044 NameNode
2077 Jps

node03

[root@node03 ~]# jps
1729 QuorumPeerMain
1779 DataNode
1924 Jps
1861 JournalNode

node04

[root@node04 ~]# jps
1748 Jps
1676 DataNode
1622 QuorumPeerMain

2、用浏览器访问node01、node02

用浏览器访问node01:50070和node02:50070
(这里需要一个active和一个standby)
在这里插入图片描述
在这里插入图片描述
关闭集群命令:stop-dfs.sh

stop-dfs.sh

关闭zookeeper命令:zkServer.sh stop

zkServer.sh stop

注意:你下一次启动hdfs集群的时候还需要用hadoop-daemon.sh start journalnode命令启动journalnode吗?
不需要
只要start-dfs.sh就可以了。我们之前启动journalnode是为了同步两个namenode之间的信息。(为了防止报错,我们一般先启动zookeeper,再启动集群)

十、为MapReduce做准备

1、把mapred-site.xml.template留个备份,并且改下名字

cp mapred-site.xml.template mapred-site.xml

cp mapred-site.xml.template mapred-site.xml

在mapred-site.xml里添加如下property

	<property>
        		<name>mapreduce.framework.name</name>
        		<value>yarn</value>
	</property>

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

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
   <name>yarn.resourcemanager.ha.enabled</name>
   <value>true</value>
 </property>
 <property>
   <name>yarn.resourcemanager.cluster-id</name>
   <value>cluster1</value>
 </property>
 <property>
   <name>yarn.resourcemanager.ha.rm-ids</name>
   <value>rm1,rm2</value>
 </property>
 <property>
   <name>yarn.resourcemanager.hostname.rm1</name>
   <value>node03</value>
 </property>
 <property>
   <name>yarn.resourcemanager.hostname.rm2</name>
   <value>node04</value>
 </property>
 <property>
   <name>yarn.resourcemanager.zk-address</name>
   <value>node02:2181,node03:2181,node04:2181</value>
 </property>

3、xml文件的分发

把mapred-site.xml和yarn-site.xml 分发到node02、03、04

scp mapred-site.xml yarn-site.xml node02:`pwd`
scp mapred-site.xml yarn-site.xml node03:`pwd`
scp mapred-site.xml yarn-site.xml node04:`pwd`
[root@node01 ~]# cd /opt/ll/hadoop-2.6.5/etc/hadoop
[root@node01 hadoop]# scp mapred-site.xml yarn-site.xml node02:`pwd`
mapred-site.xml                                        100%  865     0.8KB/s   00:00    
yarn-site.xml                                          100% 1434     1.4KB/s   00:00    
[root@node01 hadoop]# scp mapred-site.xml yarn-site.xml node03:`pwd`
mapred-site.xml                                        100%  865     0.8KB/s   00:00    
yarn-site.xml                                          100% 1434     1.4KB/s   00:00    
[root@node01 hadoop]# scp mapred-site.xml yarn-site.xml node04:`pwd`
mapred-site.xml                                        100%  865     0.8KB/s   00:00    
yarn-site.xml                                          100% 1434     1.4KB/s   00:00 

4、node03、node04之间互相免秘钥

由于node03和node04都是resourcemanager,所以它俩应该相互免密钥 ——————node03上免密钥登录node04:
在node03的.ssh目录下生成密钥

ssh-keygen -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-keygen -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,看是否免密钥
(和之前的node01与node02之间免秘钥同理)

5、检查jps

1.启动zookeeper,全部会话zkServer.sh start

zkServer.sh start

2.在node01上启动hdfs,start-dfs.sh

start-dfs.sh

3.在node01上启动yarn,start-yarn.sh

start-yarn.sh

4.在node03、04上分别启动resourcemanager,

yarn-daemon.sh start resourcemanager

5.全部会话jps,看进程全不全
node01
在这里插入图片描述
node02
在这里插入图片描述
node03
在这里插入图片描述
node04
在这里插入图片描述

6、在浏览器访问node03:8088,查看resourcemanager管理的内容

在这里插入图片描述

7、跑一个wordcount试试

  1. cd /opt/ll/hadoop-2.6.5/share/hadoop/mapreduce
cd /opt/ll/hadoop-2.6.5/share/hadoop/mapreduce
  1. 在hdfs里建立输入目录和输出目录
    hdfs dfs -mkdir -p /data/in
    hdfs dfs -mkdir -p /data/out
hdfs dfs -mkdir -p /data/in
hdfs dfs -mkdir -p /data/out	
  1. 将要统计数据的文件上传到输入目录并查看
    hdfs dfs -put ~/500miles.txt /data/in
    hdfs dfs -ls /data/in
hdfs dfs -put ~/500miles.txt /data/in	
hdfs dfs -ls /data/in
  1. 运行wordcount(注意:此时的/data/out必须是空目录
    hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/in /data/out/result
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/in /data/out/result

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

hdfs dfs -ls /data/out/result 
hdfs dfs -cat /data/out/result/part-r-00000 
[root@node01 mapreduce]# hdfs dfs -ls /data/out/result 
Found 2 items
-rw-r--r--   1 root supergroup          0 2020-06-12 12:41 /data/out/
result/_SUCCESS-rw-r--r--   1 root supergroup        261 2020-06-12 12:41 /data/out/
result/part-r-00000[root@node01 mapreduce]# hdfs dfs -cat /data/out/result/part-r-00000

在这里插入图片描述

8、关闭集群:

node01: stop-dfs.sh

stop-dfs.sh 

node01: stop-yarn.sh (停止nodemanager)

stop-yarn.sh

node03,node04: yarn-daemon.sh stop resourcemanager

yarn-daemon.sh stop resourcemanager

Node02、03、04:zkServer.sh stop

zkServer.sh stop

到这里我们的hadoop HA 高可用安装终于结束了
坚持就是胜利哟!
希望大家安装一路绿灯!✿✿ヽ(°▽°)ノ✿
✿✿ヽ(°▽°)ノ✿✿✿ヽ(°▽°)ノ✿✿✿ヽ(°▽°)ノ✿

猜你喜欢

转载自blog.csdn.net/qq_44500635/article/details/106815445