Zookeeper-Hadoop HA (高可用) 安装配置及下载地址

使用安装包版本:
hadoop-2.6.0.tar.gz
下载地址 https://www.apache.org/dyn/closer.cgi/hadoop/common
jdk-8u221-linux-x64.tar.gz
下载地址 https://www.java.com/en/download/manual.jsp
zookeeper-3.4.5.tar.gz
下载地址https://www.apache.org/dyn/closer.cgi/zookeeper/

主机IP映射

[root@master conf]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.176.41 master
192.168.176.42 slave1
192.168.176.43 slave2

环境变量~/.bash_profile

[root@master hadoop]# vi ~/.bash_profile
JAVA_HOME=/usr/local/src/jdk1.8.0_221
ZK_HOME=/usr/local/src/zookeeper-3.4.5
HADOOP_HOME=/usr/local/src/hadoop-2.6.0
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$HOME/bin:$ZK_HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export PATH ZK_HOME CLASSPATH HADOOP_HOME

一,zookeeper配置

1、master解压zookeeper压缩包:

[root@master conf]# tar -zxvf ~/app/zookeeper-3.4.5.tar.gz -C /usr/local/src

2、进入conf,然后cp zoo_sample.cfg zoo.cfg

[root@master conf]# pwd
/usr/local/src/zookeeper-3.4.5/conf
[root@master conf]# cp zoo_sample.cfg zoo.cfg

3、修改zoo.cfg配置

[root@master conf]# vi zoo.cfg
[root@master conf]# pwd
/usr/local/src/zookeeper-3.4.5/conf
dataDir=/usr/local/src/zookeeper-3.4.5/DataZk
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

4、创建/usr/local/src/zookeeper-3.4.5/DataZk

[root@master DataZk]# mkdir DataZk
[root@master zookeeper-3.4.5]# cd DataZk/

5、创建文件myid echo 1 > myid

[root@master DataZk]# echo 1 > myid
[root@master DataZk]# cat myid
1
[root@master DataZk]#

6、复制到另外两个节点:scp -r 路径 root@slave1、2:路径

[root@master zookeeper-3.4.5]# scp -r /usr/local/src/zookeeper-3.4.5/ slave1:/usr/local/src/
 
[root@master zookeeper-3.4.5]# scp -r /usr/local/src/zookeeper-3.4.5/ slave2:/usr/local/src/

7、修改slave1 slave2 服务器

myid :2  3 (对应zoo.cfg的server)
[root@slave1 src]# cd zookeeper-3.4.5/DataZk/
[root@slave1 DataZk]# ls
myid
[root@slave1 DataZk]# vi myid
[root@slave1 DataZk]# cat myid
2
[root@slave2 src]# cd zookeeper-3.4.5/DataZk/
[root@slave2 DataZk]# vi myid
[root@slave2 DataZk]# cat myid
3

8、3台启动 zkServer.sh start

[root@master bin]# ./zkServer.sh start
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@master bin]#

9、三台都启动后查看状态:./zkServer.sh status

[root@master conf]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@master conf]#
[root@slave1 DataZk]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: leader
[root@slave1 DataZk]#
[root@slave2 zookeeper-3.4.5]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@slave2 zookeeper-3.4.5]#

二,hadoop配置——三个节点,

1、将hadoop压缩包解压到/usr/local/src

 [root@master tmp]# tar -zxvf hadoop-2.6.0.tar.gz -C /usr/local/src

2、进入hadoop的etc/hadoop目录

 [root@master tmp]# cd /usr/local/src/hadoop-2.6.0/etc/hadoop/

3、修改完的 hadoop-env.sh 文件

第一处

[root@master hadoop]# pwd
/usr/local/src/hadoop-2.6.0/etc/hadoop
[root@master hadoop]#
# The java implementation to use.
# export JAVA_HOME=${JAVA_HOME} (注释掉)
export JAVA_HOME=/usr/local/src/jdk1.8.0_221 (添加上)

第二处 改完记得 source hadoop-env.sh

# export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"} (注释掉)
# 本地hadoop/etc/hadoop路径
export HADOOP_CONF_DIR=/usr/local/src/hadoop-2.9.2/etc/hadoop 
[root@master hadoop]source hadoop-env.sh

4、配置core-site.xml

[root@master hadoop]# vi core-site.xml
<configuration>
       <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns</value>
    </property>
    <!--用来指定hadoop运行时产生文件的存放目录-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/src/hadoop-2.6.0/tmp</value>
    </property>
    <!--执行zookeeper地址-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
    </property>
</configuration>

5、hdfs-site.xml

[root@master hadoop]# vi hdfs-site.xml
<configuration>

<!--执行hdfs的nameservice为ns,和core-site.xml的fs.defaultFS值保持一致-->
    <property>
        <name>dfs.nameservices</name>
        <value>ns</value>
    </property>
    <!--ns下有两个namenode,分别是nn1、nn2-->
    <property>
        <name>dfs.ha.namenodes.ns</name>
        <value>nn1,nn2</value>
    </property>
    <!--nn1的RPC通信地址-->
    <property>
        <name>dfs.namenode.rpc-address.ns.nn1</name>
        <value>master:9000</value>
    </property>
    <!--nn1的http通信地址-->
    <property>
        <name>dfs.namenode.http-address.ns.nn1</name>
        <value>master:50070</value>
    </property>
    <!--nn2的RPC通信地址-->
    <property>
        <name>dfs.namenode.rpc-address.ns.nn2</name>
        <value>slave1:9000</value>
    </property>
    <!--nn2的http通信地址-->
    <property>
        <name>dfs.namenode.http-address.ns.nn2</name>
        <value>slave1:50070</value>
    </property>
    <!--指定namenode的元数据在JournalNode上的存放位置,这样,namenode2可以从jn集群里获取最新的namenode的信息,达到热备的效果-->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://master:8485;slave1:8485;slave2:8485/ns</value>
    </property>
    <!--指定JournalNode存放数据的位置-->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/local/src/hadoop-2.6.0/journal</value>
    </property>
    <!--开启namenode故障时自动切换-->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <!--配置切换的实现方式-->
    <property>
        <name>dfs.client.failover.proxy.provider.ns</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <!--配置隔离机制:通过秘钥隔离机制-->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <!--配置隔离机制的ssh登录秘钥所在的位置-->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
    <!--配置namenode数据存放的位置,可以不配置,如果不配置,默认用的是
      core-site.xml里配置的hadoop.tmp.dir的路径-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///usr/local/src/hadoop-2.6.0/tmp/namenode</value>
    </property>
    <!--配置datanode数据存放的位置,可以不配置,如果不配置,默认用的是
      core-site.xml里配置的hadoop.tmp.dir的路径-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///usr/local/src/hadoop-2.6.0/tmp/datanode</value>
    </property>
    <!--配置block副本数量-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!--设置hdfs的操作权限,false表示任何用户都可以在hdfs上操作文件-->
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>

</configuration>

6、配置mapred-site.xml # 需要cp mapred模板

[root@master hadoop]# cp mapred-site.xml.template  mapred-site.xml
[root@master hadoop]# vi mapred-site.xml
<configuration>
    <property>
        <!--指定mapreduce运行在yarn上-->
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

7、配置yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->

<!--开启YARN HA -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!--指定两个resourcemanager的名称-->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <!--配置rm1,rm2的主机-->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>master</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>slave1</value>
    </property>
    <!--开启yarn恢复机制-->
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
    <!--执行rm恢复机制实现类-->
    <property>
        <name>yarn.resourcemanager.store.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
    <!--配置zookeeper的地址-->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
        <description>For multiple zk services, separate them with comma</description>
    </property>
    <!--指定YARN HA的名称-->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yarn-ha</value>
    </property>
    <property>
        <!--指定yarn的老大resoucemanager的地址-->
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>
    <property>
        <!--NodeManager获取数据的方式-->
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>                                       

8、创建journal文件夹,在 hadoop-2.6.0目录中

[root@master hadoop-2.6.0]# pwd
/usr/local/src/hadoop-2.6.0
[root@master hadoop-2.6.0]# mkdir journal

8.1 进入 tmp/ 创建 namenode datanode 文件夹

[root@master hadoop-2.6.0]# cd tmp/
[root@master tmp]# mkdir namenode datanode
[root@master tmp]# ls
datanode  namenode 

9、在slaves中指定 datanode节点

[root@master hadoop]# vi slaves
master
slave1
slave2

10、将hadoop复制到其他节点

需要配置 无密登录,ip映射

[root@master tmp]# scp -r /usr/local/src/hadoop-2.6.0/ slave1:/usr/local/src/

[root@master tmp]# scp -r /usr/local/src/hadoop-2.6.0/ slave2:/usr/local/src/

11、执行 source hadoop-env.sh,让配置生效----3台

[root@master hadoop]# pwd
/usr/local/src/hadoop-2.6.0/etc/hadoop
[root@master hadoop]# source hadoop-env.sh

三、启动Hadoop HA 高可用 zookeeper

注意: 下面1,2两个步骤在安装 zookeeper 时 已经执行,验证,不需要再执行一次

1、启动zookeeper

[root@master ~]# zkServer.sh start
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@master ~]# ssh slave1
Last login: Fri Dec 27 21:13:46 2019 from master
[root@slave1 ~]# zkServer.sh start
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@slave1 ~]# ssh slave2
Last login: Fri Dec 27 21:14:16 2019 from master
[root@slave2 ~]# zkServer.sh start
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@slave2 ~]# exit
登出
Connection to slave2 closed.
[root@slave1 ~]# exit
登出
Connection to slave1 closed.
[root@master ~]#

2、三台都启动后查看状态:./zkServer.sh status

[root@master ~]# zkServer.sh  status
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: leader
[root@master ~]# ssh slave1
Last login: Fri Dec 27 21:16:37 2019 from master
[root@slave1 ~]# zkServer.sh  status
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@slave1 ~]# ssh slave2
Last login: Fri Dec 27 21:16:44 2019 from slave1
[root@slave2 ~]# zkServer.sh  status
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@slave2 ~]# exit
登出
Connection to slave2 closed.
[root@slave1 ~]# exit
登出
Connection to slave1 closed.
[root@master ~]#

3,在 master 上,格式化 zookeeper

格式化 zookeeper 第二次启动不用格式化

[root@master]# hdfs zkfc -formatZK

四、启动hadoop,使用参考第二次启动

1、启动journalNode集群,在三个节点都上输入

两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit
log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了。
hadoop-daemon.sh start journalnode

2、格式化master节点的namenode

格式化 hadoop 第二次启动不用格式化

[root@master]#hdfs namenode -format

3、启动master节点的namenode(active),在master上输入

hadoop-daemon.sh start namenode

4、设置slave1为备用节点,在slave1上输入

hdfs namenode -bootstrapStandby

5、启动slave1的namenode(备用),在slave1上输入

hadoop-daemon.sh start namenode

6、启动所有的datanode,在master上输入

hadoop-daemons.sh start datanode

7、在master和slave1启动zkfc,在这两个节点上输入

 hadoop-daemon.sh start zkfc

启动成功后,验证

[root@master namenode]# hadoop-daemon.sh start zkfc
starting zkfc, logging to /usr/local/src/hadoop-2.6.0/logs/hadoop-root-zkfc-master.out
[root@master namenode]# jps
2002 NameNode
1766 JournalNode
2344 Jps
1643 QuorumPeerMain
2158 DataNode
2271 DFSZKFailoverController
[root@master namenode]# ssh slave1
Last login: Fri Dec 27 22:08:05 2019 from master
[root@slave1 ~]# hadoop-daemon.sh start zkfc
starting zkfc, logging to /usr/local/src/hadoop-2.6.0/logs/hadoop-root-zkfc-slave1.out
[root@slave1 ~]# jps
2257 Jps
1970 NameNode
2087 DataNode
2201 DFSZKFailoverController
1613 QuorumPeerMain
[root@slave1 ~]#

8、启动yarn,在master和slave1上输入

[root@master ~]# start-yarn.sh

9、在本地电脑上做映射C:\Windows\System32\drivers\etc

192.168.176.46 master
192.168.176.47 slave1
192.168.176.48 slave2

10、主备 namenode 切换 需要下载包:

[root@namenode2 ~]# yum -y install psmisc

11、在浏览地址上输入

根据自己的本地ip 映射

http://master:50070/
http://slave1:50070/
在这里插入图片描述
在这里插入图片描述

五、验证是否切换 能够主备切换

1、击杀 slave actice(活跃)节点 namenode 进程

[root@slave1 ~]# jps
1986 DataNode
2211 NodeManager
2085 DFSZKFailoverController
1850 NameNode
2380 Jps
1614 QuorumPeerMain
1758 JournalNode
[root@slave1 ~]# kill 1850

在这里插入图片描述

2、master standy(备用)节点 变成 active(活跃节点)

在这里插入图片描述

3、再次启动 slave1 namenode 节点

[root@slave1 ~]# hadoop-daemon.sh start namenode
starting namenode, logging to /usr/local/src/hadoop-2.6.0/logs/hadoop-root-namenode-slave1.out
[root@slave1 ~]# jps
1986 DataNode
2211 NodeManager
2085 DFSZKFailoverController
2437 NameNode
2524 Jps
1614 QuorumPeerMain
1758 JournalNode
[root@slave1 ~]#

4、打开网页http://slave1:50070/

打开成功 master :standby (备用)节点变成 active (活跃)节点

在这里插入图片描述

六、第二次启动----最终使用zookeeper 时,按以下方式执行

1、启动 zookeeper 投票管理 – 启动3台

[root@master ~]# zkServer.sh start
[root@slave1 ~]# zkServer.sh start
[root@slave2 ~]# zkServer.sh start

[root@master ~]# jps
1730 Jps
1631 QuorumPeerMain
[root@master ~]#

查看zk启动状态,可知 master被选为 leader


[root@master ~]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: leader
[root@master ~]#

2、启动hadoop业务 ,jps查看

[root@master ~]# start-all.sh
[root@master ~]# jps
2528 ResourceManager
1906 NameNode
2825 Jps
2220 JournalNode
2013 DataNode
2413 DFSZKFailoverController
1631 QuorumPeerMain
[root@master ~]#
[root@slave1 ~]# jps
1671 QuorumPeerMain
1944 DFSZKFailoverController
2185 Jps
1850 JournalNode
1756 DataNode
2028 NodeManager
[root@slave1 ~]#
[root@slave2 ~]# jps
1633 QuorumPeerMain
1826 JournalNode
2082 Jps
1732 DataNode
1925 NodeManager
[root@slave2 ~]#

3、打开网页

http://master:50070/
http://slave1:50070/
在这里插入图片描述
在这里插入图片描述

杂记:

启动zk
zkServer.sh start

查询zk 状态
[root@master ~]# zkServer.sh status

启动datanode

hadoop-daemon.sh start datanode

master 上启动多个datanode
hadoop-daemons.sh start datanode

永久关闭防火墙
执行开机禁用防火墙自启命令 :
systemctl disable firewalld.service

本次关闭防火墙
关闭防火墙,重启后失效
systemctl stop firewalld.service

免密登录配置 重复节点数 x 节点数 这么多次
[root@master ~]# ssh-keygen -t rsa
[root@test3 ~]# ssh-copy-id [email protected] // 本机 然后再其它机器

发布了15 篇原创文章 · 获赞 2 · 访问量 481

猜你喜欢

转载自blog.csdn.net/weixin_44593925/article/details/103801582
今日推荐