hadoop高可用

[root@server5 ~]# yum install -y nfs-utils
[root@server5 ~]# /etc/init.d/rpcbind start
[root@server5 ~]# mount 172.25.40.1:/home/hadoop/ /home/hadoop
[root@server5 ~]# useradd -u 800 hadoop

在三个节点上挂载

mount 172.25.40.1:/home/hadoop/ /home/hadoop/
[root@server2 ~]# su - hadoop
[hadoop@server2 ~]$ tar zxf zookeeper-3.4.9.tar.gz 
[hadoop@server2 ~]$ tar zxf zookeeper-3.4.9.tar.gz 
[hadoop@server2 ~]$ cd zookeeper-3.4.9
[hadoop@server2 zookeeper-3.4.9]$ cd conf/
[hadoop@server2 conf]$ cp zoo_sample.cfg zoo.cfg
[hadoop@server2 conf]$ vim zoo.cfg 
server.1=172.25.40.2:2888:3888
server.2=172.25.40.3:2888:3888
server.3=172.25.40.4:2888:3888

这里写图片描述

[hadoop@server2 conf]$ mkdir /tmp/zookeeper
[hadoop@server2 conf]$ cd /tmp/zookeeper/
[hadoop@server2 zookeeper]$ echo 1 > myid
[root@server3 ~]# su - hadoop
[hadoop@server3 ~]$ mkdir /tmp/zookeeper
[hadoop@server3 ~]$ cd /tmp/zookeeper/
[hadoop@server3 zookeeper]$ echo 2 > myid
[root@server4 ~]# su - hadoop
[hadoop@server4 ~]$ mkdir /tmp/zookeeper
[hadoop@server4 ~]$ cd /tmp/zookeeper/
[hadoop@server4 zookeeper]$ echo 3 > myid

在各节点启动服务

[hadoop@server2 zookeeper]$ cd
[hadoop@server2 ~]$ cd zookeeper-3.4.9
[hadoop@server2 zookeeper-3.4.9]$ cd bin/
[hadoop@server2 bin]$ ./zkServer.sh start

连接 zookeeper

[hadoop@server2 bin]$ ./zkCli.sh
[zk: localhost:2181(CONNECTED) 0] get /zookeeper/quota

这里写图片描述

Hadoop 配置
编辑 core-site.xml 文件:

[hadoop@server1 ~]$ rm -fr /tmp/*
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ cd etc/hadoop/
[hadoop@server1 hadoop]$ vim core-site.xml 
<configuration>
##< 指定 hdfs 的 namenode 为 masters >
<property>
         <name>fs.defaultFS</name>
                          <value>hdfs://masters</value>
                                                   </property>
##<指定 zookeeper 集群主机地址>                
<property>
	<name>ha.zookeeper.quorum</name>
	<value>172.25.40.2:2181,172.25.40.3:2181,172.25.40.4:2181</value>
</property>
</configuration>

这里写图片描述

编辑 hdfs-site.xml 文件:

[hadoop@server1 hadoop]$ vim hdfs-site.xml 
<configuration>
<!-- 指定 hdfs 的 nameservices 为 masters,和 core-site.xml 文件中的设置保持一
致 -->
<property>
<name>dfs.nameservices</name>
<value>masters</value>
</property>
<!-- masters 下面有两个 namenode 节点,分别是 h1 和 h2 (名称可自定义)
-->
<property>
<name>dfs.ha.namenodes.masters</name>
<value>h1,h2</value>
</property>
<!-- 指定 h1 节点的 rpc 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.masters.h1</name>
<value>172.25.40.1:9000</value>
</property>
<!-- 指定 h1 节点的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.masters.h1</name>
<value>172.25.40.1:50070</value>
</property>
<!-- 指定 h2 节点的 rpc 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.masters.h2</name>
<value>172.25.40.5:9000</value>
</property>
<!-- 指定 h2 节点的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.masters.h2</name>
<value>172.25.40.5:50070</value>
</property>
<!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://172.25.40.2:8485;172.25.40.3:8485;172.25.40.4:8485/masters</value>
</property>
<!-- 指定 JournalNode 在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/tmp/journaldata</value></property>
<!-- 开启 NameNode 失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.masters</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,每个机制占用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用 sshfence 隔离机制时需要 ssh 免密码 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 配置 sshfence 隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
[hadoop@server1 hadoop]$ vim slaves 
[hadoop@server1 hadoop]$ cat slaves 
172.25.40.2
172.25.40.3
172.25.40.4

在三个 DN(server2,3,4) 上依次启动 journalnode(第一次启动 hdfs 必须先启动 journalnode)

[hadoop@server2 bin]$ cd
[hadoop@server2 ~]$ cd hadoop
[hadoop@server2 hadoop]$ sbin/hadoop-daemon.sh start journalnode
[hadoop@server2 hadoop]$ jps
2881 Jps
1849 QuorumPeerMain
2832 JournalNode

格式化 HDFS 集群

[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ bin/hdfs namenode -format

这里写图片描述
格式化 zookeeper

[hadoop@server1 hadoop]$ scp -r /tmp/hadoop-hadoop/ 172.25.40.5:/tmp/
[hadoop@server1 hadoop]$ bin/hdfs zkfc -formatZK

启动 hdfs 集群

[hadoop@server1 hadoop]$ sbin/start-dfs.sh

这里写图片描述

猜你喜欢

转载自blog.csdn.net/Argued_D/article/details/82145875