本文源码:GitHub·点这里 || GitEE·点这里java
在单点或者少数节点故障的状况下,集群还能够正常的提供服务,HDFS高可用机制能够经过配置Active/Standby两个NameNodes节点实如今集群中对NameNode的热备来消除单节点故障问题,若是单个节点出现故障,可经过该方式将NameNode快速切换到另一个节点上。node
ZooKeeper在大数据体系中很是重要,协调不一样组件的工做,维护并传递数据,例如上述高可用下自动故障转移就依赖于ZooKeeper组件。git
服务列表 | HDFS文件 | YARN调度 | 单服务 | 共享文件 | Zk集群 |
---|---|---|---|---|---|
hop01 | DataNode | NodeManager | NameNode | JournalNode | ZK-hop01 |
hop02 | DataNode | NodeManager | ResourceManager | JournalNode | ZK-hop02 |
hop03 | DataNode | NodeManager | SecondaryNameNode | JournalNode | ZK-hop03 |
建立目录github
[root@hop01 opt]# mkdir hopHA
拷贝Hadoop目录算法
cp -r /opt/hadoop2.7/ /opt/hopHA/
配置core-site.xmlspring
<configuration> <!-- NameNode集群模式 --> <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <!-- 指定hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/hopHA/hadoop2.7/data/tmp</value> </property> </configuration>
配置hdfs-site.xml,添加内容以下apache
<!-- 分布式集群名称 --> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!-- 集群中NameNode节点 --> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <!-- NN1 RPC通讯地址 --> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>hop01:9000</value> </property> <!-- NN2 RPC通讯地址 --> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>hop02:9000</value> </property> <!-- NN1 Http通讯地址 --> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>hop01:50070</value> </property> <!-- NN2 Http通讯地址 --> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>hop02:50070</value> </property> <!-- 指定NameNode元数据在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hop01:8485;hop02:8485;hop03:8485/mycluster</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> <!-- 声明journalnode服务器存储目录--> <property> <name>dfs.journalnode.edits.dir</name> <value>/opt/hopHA/hadoop2.7/data/jn</value> </property> <!-- 关闭权限检查--> <property> <name>dfs.permissions.enable</name> <value>false</value> </property> <!-- 访问代理类失败自动切换实现方式--> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property>
依次启动journalnode服务编程
[root@hop01 hadoop2.7]# pwd /opt/hopHA/hadoop2.7 [root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start journalnode
删除hopHA下数据bootstrap
[root@hop01 hadoop2.7]# rm -rf data/ logs/
NN1格式化并启动NameNode设计模式
[root@hop01 hadoop2.7]# pwd /opt/hopHA/hadoop2.7 bin/hdfs namenode -format sbin/hadoop-daemon.sh start namenode
NN2同步NN1数据
[root@hop02 hadoop2.7]# bin/hdfs namenode -bootstrapStandby
NN2启动NameNode
[root@hop02 hadoop2.7]# sbin/hadoop-daemon.sh start namenode
查看当前状态
在NN1上启动所有DataNode
[root@hop01 hadoop2.7]# sbin/hadoop-daemons.sh start datanode
NN1切换为Active状态
[root@hop01 hadoop2.7]# bin/hdfs haadmin -transitionToActive nn1 [root@hop01 hadoop2.7]# bin/hdfs haadmin -getServiceState nn1 active
配置hdfs-site.xml,新增内容以下,同步集群
<property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property>
配置core-site.xml,新增内容以下,同步集群
<property> <name>ha.zookeeper.quorum</name> <value>hop01:2181,hop02:2181,hop03:2181</value> </property>
关闭所有HDFS服务
[root@hop01 hadoop2.7]# sbin/stop-dfs.sh
启动Zookeeper集群
/opt/zookeeper3.4/bin/zkServer.sh start
hop01初始化HA在Zookeeper中状态
[root@hop01 hadoop2.7]# bin/hdfs zkfc -formatZK
hop01启动HDFS服务
[root@hop01 hadoop2.7]# sbin/start-dfs.sh
NameNode节点启动ZKFailover
这里hop01和hop02先启动的服务状态就是Active,这里先启动hop02。
[hadoop2.7]# sbin/hadoop-daemon.sh start zkfc
结束hop02的NameNode进程
kill -9 14422
等待一下查看hop01状态
[root@hop01 hadoop2.7]# bin/hdfs haadmin -getServiceState nn1 active
基本流程和思路与HDFS机制相似,依赖Zookeeper集群,当Active节点故障时,Standby节点会切换为Active状态持续服务。
环境一样基于hop01和hop02来演示。
配置yarn-site.xml,同步集群下服务
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--启用HA机制--> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!--声明Resourcemanager服务--> <property> <name>yarn.resourcemanager.cluster-id</name> <value>cluster-yarn01</value> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>hop01</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>hop02</value> </property> <!--Zookeeper集群的地址--> <property> <name>yarn.resourcemanager.zk-address</name> <value>hop01:2181,hop02:2181,hop03:2181</value> </property> <!--启用自动恢复机制--> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!--指定状态存储Zookeeper集群--> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> </configuration>
重启journalnode节点
sbin/hadoop-daemon.sh start journalnode
在NN1服务格式化并启动
[root@hop01 hadoop2.7]# bin/hdfs namenode -format [root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start namenode
NN2上同步NN1元数据
[root@hop02 hadoop2.7]# bin/hdfs namenode -bootstrapStandby
启动集群下DataNode
[root@hop01 hadoop2.7]# sbin/hadoop-daemons.sh start datanode
NN1设置为Active状态
先启动hop01便可,而后启动hop02。
[root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start zkfc
hop01启动yarn
[root@hop01 hadoop2.7]# sbin/start-yarn.sh
hop02启动ResourceManager
[root@hop02 hadoop2.7]# sbin/yarn-daemon.sh start resourcemanager
查看状态
[root@hop01 hadoop2.7]# bin/yarn rmadmin -getServiceState rm1
GitHub·地址 https://github.com/cicadasmile/big-data-parent GitEE·地址 https://gitee.com/cicadasmile/big-data-parent
推荐阅读:编程体系整理
序号 | 项目名称 | GitHub地址 | GitEE地址 | 推荐指数 |
---|---|---|---|---|
01 | Java描述设计模式,算法,数据结构 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
02 | Java基础、并发、面向对象、Web开发 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆ |
03 | SpringCloud微服务基础组件案例详解 | GitHub·点这里 | GitEE·点这里 | ☆☆☆ |
04 | SpringCloud微服务架构实战综合案例 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
05 | SpringBoot框架基础应用入门到进阶 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆ |
06 | SpringBoot框架整合开发经常使用中间件 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
07 | 数据管理、分布式、架构设计基础案例 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
08 | 大数据系列、存储、组件、计算等框架 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |