经过双 NameNode 消除单点故障node
元数据的管理方式须要改变:apache
须要一个状态管理功能模块:bootstrap
必须保证两个 NN 之间可以 ssh 无密码登陆服务器
隔离(Fence),即同一时刻仅仅有一个 NN 对外提供服务网络
自动故障转移为 HDFS 部署增长了两个新组件:ssh
ZKFC 是自动故障转移中的另外一个新组件,是 ZooKeeper 的客户端,也监视和管理 NN 的状态,每一个运行 NN 的主机也运行了一个 ZKFC 进程,ZKFC 负责:分布式
hadoop102 | hadoop103 | hadoop104 |
---|---|---|
NameNode | NameNode | |
JournalNode | JournalNode | JournalNode |
DataNode | DataNode | DataNode |
ZK | ZK | ZK |
ResourceManager | ||
NodeManager | NodeManager | NodeManager |
一、集群规划ide
二、ZooKeeper 分发oop
三、配置服务器编号代理
四、配置 zoo.cfg 文件
# 2是第几号服务器 # hadoop102是这个服务器的地址 # 2888是Follower与Leader交换信息的端口 # 3888是服务器通讯端口 server.2=hadoop102:2888:3888 server.3=hadoop103:2888:3888 server.4=hadoop104:2888:3888
五、分别启动 ZooKeeper
一、将/opt/module/下的 hadoop-2.7.2 拷贝到/opt/module/ha 目录下
二、配置 core-site.xml
<configuration> <property> <!-- 把两个NN的地址组装成一个集群mycluster --> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <!-- 指定Hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt//module/ha/hadoop-2.7.2/data/tmp</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value> </property> </configuration>
三、配置 hdfs-site.xml
<configuration> <!-- 彻底分布式集群名称 --> <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>hadoop102:9000</value> </property> <!-- nn2的RPC通讯地址 --> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>hadoop103:9000</value> </property> <!-- nn1的http通讯地址 --> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>hadoop102:50070</value> </property> <!-- nn2的http通讯地址 --> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>hadoop103:50070</value> </property> <!-- 指定NameNode元数据在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104: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>/home/djm/.ssh/id_rsa</value> </property> <!-- 声明journalnode服务器存储目录--> <property> <name>dfs.journalnode.edits.dir</name> <value>/opt/module/ha/hadoop-2.7.2/data/jn</value> </property> <!-- 关闭权限检查--> <property> <name>dfs.permissions.enable</name> <value>false</value> </property> <!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式--> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> </configuration>
四、将修改后的配置分发到其余主机
一、在各个 JournalNode 节点上,输入如下命令启动 journalnode 服务
sbin/hadoop-daemon.sh start journalnode
二、在[nn1]上,对其进行格式化,并启动
bin/hdfs namenode -format sbin/hadoop-daemon.sh start namenode
三、在[nn2]上,同步 nn1 的元数据信息
bin/hdfs namenode -bootstrapStandby
四、启动[nn2]
sbin/hadoop-daemon.sh start namenode
五、在[nn1]上,启动全部 datanode
sbin/hadoop-daemons.sh start datanode
六、将[nn1]切换为 Active
bin/hdfs haadmin -transitionToActive nn1
七、查看是否 Active
bin/hdfs haadmin -getServiceState nn1
一、在 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>hadoop102:2181,hadoop103:2181,hadoop104:2181</value> </property
三、关闭全部HDFS服务:
sbin/stop-dfs.sh
四、启动Zookeeper集群:
bin/zkServer.sh start
五、初始化HA在Zookeeper中状态:
bin/hdfs zkfc -formatZK
六、启动HDFS服务:
sbin/start-dfs.sh
七、验证
kill -9 15031
service network stop