首先将yarn和dfs都关闭并且将所有节点上的数据进行删除
[hadoop@server1 hadoop]$ sbin/stop-yarn.sh
Stopping nodemanagers
Stopping resourcemanager
[hadoop@server1 hadoop]$ sbin/stop-dfs.sh
Stopping namenodes on [server1]
Stopping datanodes
Stopping secondary namenodes [server1]
[hadoop@server1 hadoop]$ rm -rf /tmp/* ##所有节点都执行一遍
再添加一台虚拟机做主备,设置方法和原来相同,创建用户,将安装nfs,将用户目录进行挂载。
现在在主节点server1上下载zookeeper压缩包直接解压。
[hadoop@server1 ~]$ tar zxf zookeeper-3.4.14.tar.gz
解压完成直接在server2,3,4上面进行部署。
进入目录,编辑主配置文件
[hadoop@server2 ~]$ cd zookeeper-3.4.14/conf/
[hadoop@server2 conf]$ cp zoo_sample.cfg zoo.cfg ##只有配置文件的模版,所以复制出来进行更改
[hadoop@server2 conf]$ vim zoo.cfg
这些东西是默认值,不用修改
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper ##这个目录没有需要创建
clientPort=2181
##在最后添加节点
server.1=192.168.122.12:2888:3888 ##myid
server.2=192.168.122.13:2888:3888 ##两个端口一个是选举端口,一个是通信端口
server.3=192.168.122.14:2888:3888
创建目录并写入myid,每个节点都要
[hadoop@server2 conf]$ mkdir /tmp/zookeeper
[hadoop@server2 conf]$ echo 1> /tmp/zookeeper/myid
[hadoop@server3 ~]$ mkdir /tmp/zookeeper
[hadoop@server3 ~]$ echo 2> /tmp/zookeeper/myid
[hadoop@server4 ~]$ mkdir /tmp/zookeeper
[hadoop@server4 ~]$ echo 3> /tmp/zookeeper/myid
编写完成就可以去启动
直接进行调用,每个节点都要启动
[hadoop@server2 zookeeper-3.4.14]$ bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@server3 zookeeper-3.4.14]$ bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@server4 zookeeper-3.4.14]$ bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
先将三个节点启动,等待三个节点进行选举
[hadoop@server3 zookeeper-3.4.14]$ bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: leader ##选举结果,这个节点为领导者,别的为随从
启动完成如何进行访问,zk里面有命令行
[hadoop@server3 zookeeper-3.4.14]$ bin/zkCli.sh ##这样使用命令行访问
[zk: localhost:2181(CONNECTED) 0] ls
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]
在server1上编辑hadoop核心文件
现在我们做高可用,不能指定单一的ip地址,同时指定zk节点
[hadoop@server1 hadoop]$ vim etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://masters</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>192.168.122.12:2181,192.168.122.13:2181,192.168.122.14:2181</value>
</property>
</configuration>
编辑hdfs-site.xml指定信息
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value> ##三个副本
</property>
<property>
<name>dfs.nameservices</name> ##指定主节点的名字为什么
<value>masters</value> ##这个名字要和核心节点上的名字相同
</property>
<property>
<name>dfs.ha.namenodes.masters</name> ##masters有两个节点
<value>h1,h2</value> ##两个节点的名字可以自己任意设置
</property>
<property>
<name>dfs.namenode.rpc-address.masters.h1</name> ##指定h1的rpc端口
<value>192.168.122.11:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.masters.h1</name> ##指定h1的通讯端口
<value>192.168.122.11:9870</value>
</property>
<property>
<name>dfs.namenode.rpc-address.masters.h2</name>
<value>192.168.122.15:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.masters.h2</name>
<value>192.168.122.15:9870</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name> ##指定日志
<value>qjournal://192.168.122.12:8485;192.168.122.13:8485;192.168.122.14:8485/masters</value>
</property>
<property>
<name>dfs.namenode.edits.dir</name> ##日志存放目录
<value>/tmp/journaldata</value>
</property>
<property>
<name>dfs.ha.automaric-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>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>##私钥地址
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect.timeout</name> ##多长时间要隔离
<value>/30000</value>
</property>
</configuration>
设置完成启动日志节点,在server2,3,4上分别开启
[hadoop@server2 hadoop]$ bin/hdfs --daemon start journalnode
开启后会打开8485端口
只有第一次要手动启动日志节点,后面会自动启动节点
下来切换到master节点初始化并且将初始化文件复制到server5上,因为初始化文件默认创建在server1上5上没有
[hadoop@server1 hadoop]$ bin/hdfs namenode -format
[hadoop@server1 tmp]$ scp -r hadoop-hadoop 192.168.122.15:/tmp/
下来格式化zk
[hadoop@server1 hadoop]$ bin/hdfs zkfc -formatZK
格式化完成下来启动进程
[hadoop@server1 hadoop]$ sbin/start-dfs.sh
[hadoop@server1 hadoop]$ jps
20596 NameNode
20998 DFSZKFailoverController
21067 Jps