首先需要构建三台虚拟机(这里是示范),构建的流程可以参考这篇文章。
使用虚拟机完成Hadoop完全分布式的搭建_你可以自己看的博客-CSDN博客
在完成上篇文章的Hadoop完全分布式搭建以后,就可以做接下来的操作——搭建Zookeeper集群
首先下载Linux版的Zookeeper
链接:https://pan.baidu.com/s/1_alxqyJMAiCkORtM37RT0Q
提取码:hjl4
下载完以后使用命令进行解压
将文件上传至/usr/local下(上传方法在上述的文件中有示范)
tar -zxvf apache-zookeeper-3.7.0-bin.tar -C ~/home/hadoop/
解压后进入zookeeper的conf目录下,将zoo.sampli.cfg文件修改为zoo.cfg
cp zoo.sample.cfg zoo.cfg
修改zoo.cfg
vi cfg
将dataDir修改为自定义的目录
dataDir=/home/hadoop/zkdata
在文件末添加如下内容
server.1=master:2888:3888 server.2=slave1:2888:3888 server.3=slave2:2888:3888
上述配置中的1、2、3指的是zookeeper集群各节点的编号,等号右侧以冒号分隔的内容分别指的是对应的主机名、节点间的心跳端口、数据交互的端口
zoo.cfg修改完毕后,创建其中指定的dataDir目录,并且将配置中对应的节点编号保存到一个名称为myid的文件中
mkdir /home/hadoop/zkdata echo 1 >/home/hadoop/zkdata/myid
将加压后的zookeeper文件夹分发到slave1和slave2
scp -r apache-zookeeper-3.7.0-bin root@slave1:/home/hadoop/
scp -r /home/hadoop/apache-zookeeper-3.7.0-bin root@slave2:/home/hadoop
分别在slave1和slave2上创建zkdata
mkdir /home/hadoop/zkdata echo 2 >/home/hadoop/zkdata/myid
mkdir /home/hadoop/zkdata echo 3 >/home/hadoop/zkdata/myid
添加zookeeper环境变量
vi /etc/profile
export PATH=$PATH:/home/hadoop/apache-zookeeper-3.7.0-bin/bin
启动zookeeper,查看是否安装成功
zkServer.sh start
zkServer.sh status
看到这样的就表面zookeeper已经安装成功
zookeeper已经安装成功了,接下来搭建HDFS HA集群
上述文章中已经安装好了HDFS集群了,现在直接去修改配置文件达到HA的配置。
首先修改core-site.xml文件
vi /usr/local/hadoop/etc/hadoop/core-site.xml
在该配置文件下面添加如下内容
fs.defaultFS
hdfs://ns
ha.zookeeper.quorum
master:2181,slave1:2181,slave2:2181
修改hdfs-site.xml文件
vi /usr/local/hadoop/etc/hadoop/hdfs-site.xml
添加如下内容
dfs.nameservices
ns
dfs.ha.namenodes.ns
nn1,nn2
dfs.namenode.rpc-address.ns.nn1
master:8020
dfs.namenode.http-address.ns.nn1
master:9870
dfs.namenode.rpc-address.ns.nn2
slave1:8020
dfs.namenode-http-address.ns.nn2
slave1:9870
dfs.namenode.shared.edits.dir
qjournal://master:8485;slave1:8485;slave2:8485/ns
dfs.journalnode.edits.dir
/home/hadoop/ha/journal
dfs.ha.automatic-failover.enabled
true
dfs.client.failover.proxy.provider.ns org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
shell(/bin/true)
dfs.ha.fencing.ssh.private-key-files
/home/hadoop/.ssh/id_rsa
修改mapred-site.xml
vi /usr/local/hadoop/etc/hadoop/mapred-site.xml
添加如下内容
mapreduce.jobhistory.address master:10020 mapreduce.jobhistory.webapp.address master:19888
修改yarn-site.xml文件
vi /usr/local/hadoop/etc/hadoop/yarn-site.xml
添加如下内容
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
master
yarn.log-aggregation-enable
true
下一步修改slaves文件(由于版本不同有些是workers文件,hadoop3.x以上版本)
添加如下内容
master slave1 slave2
将配置好的hadoop分发到slave1和slave2中
scp -r /usr/local/hadoop/etc/hadoop root@slave1:/usr/local/hadoop/etc/
scp -r /usr/local/hadoop/etc/hadoop root@slave2:/usr/local/hadoop/etc/
接下来就是HA集群所需要的各个服务了
zkServer.sh start(已启动)
启动JournalNode
hadoop-daemon.sh start journalnode
执行完后,用jps查看进程
需要包含框内的进程,即表示启动成功
然后格式化HDFS
在master中执行命令:hdfs namenode -format
执行成功后会在core-site.xml配置的hadoop.tmp.dir目录下创建对应的数据目录。结构如下:
tree tmp(命令用不了,先执行yum -y install tree)
由于slave1也要启动NameNode,所以将此生成的目录复制到slave1对应的目录下
格式化ZKFC
hdfs zkfc -formatZK
格式化成功后会输出大量日志
接着启动HDFS和YARN集群
执行start-dfs.sh/start-yarn.sh命令
使用jps查看进程
忽略红框中这个进程
在master节点上输入hdfs haadmin -getAllServiceState
我这里是切换过的,按照上述应该是master为actice
这是可以访问http://master:9870和http://slave1:9870
通过jps可以看到在slave1中NameNode的进程号为57946,使用 kill -9 57946,杀死该进程。查看NameNode是否可以正常切换。输入地址:http://slave1:9870
至此,HDFS高可用配置已示范完毕,下篇文章关于YARN高可用的配置。



