Hadoop-HA机制
HA概述
high available(高可用)java
所谓HA(high available),即高可用(7*24小时不中断服务)。node
实现高可用最关键的策略是消除单点故障。HA严格来讲应该分红各个组件的HA机制:HDFS的HA和YARN的HA。apache
Hadoop2.0以前,在HDFS集群中NameNode存在单点故障(SPOF)。ssh
高可靠:hdfs多个副本oop
最大的做用解决:单点故障存在的问题spa
单点故障缘由:.net
NameNode机器发生意外,如宕机,集群将没法使用,直到管理员重启3d
NameNode机器须要升级,包括软件、硬件升级,此时集群也将没法使用日志
NameNode故障解决code
HDFS HA功能经过配置Active/Standby两个nameNodes实如今集群中对NameNode的热备来解决上述问题。
若是出现故障,如机器崩溃或机器须要升级维护,这时可经过此种方式将NameNode很快的切换到另一台机器
HA的运做机制(重点)
涉及组件:
一、zookeeper:协调主备namenode的切换
二、qjournal:主备namenode的数据同步
三、zkfc:它zookeeper的客户端应用,主要检测namenode的健康状态
四、active namenode:激活的namenode
五、standby namenode:备用的namenode
HDFS-HA工做要点
元数据管理方式须要改变
须要一个状态管理功能模块
必须保证两个NameNode之间可以ssh无密码登陆。
隔离(Fence),即同一时刻仅仅有一个NameNode对外提供服务
元数据管理方式
内存中各自保存一份元数据
Edits日志只有Active状态的namenode节点能够作写操做
两个namenode均可以读取edits
共享的edits放在一个共享存储中管理(qjournal和NFS两个主流实现)
状态管理功能模块
实现了一个zkfailover,常驻在每个namenode所在的节点,每个zkfailover负责监控本身所在namenode节点,
利用zk进行状态标识,当须要进行状态切换时,由zkfailover来负责切换,切换时须要防止brain split现象的发生
故障转移工做机制
自动故障转移为HDFS部署增长了两个新组件:ZooKeeper和ZKFailoverController(ZKFC)进程。
Zookeeper做用
故障检测
集群中的每一个NameNode在ZooKeeper中维护了一个持久会话,若是机器崩溃,ZooKeeper中的会话将终止,ZooKeeper通知另外一个NameNode须要触发故障转移。
现役NameNode选择
ZooKeeper提供了一个简单的机制用于惟一的选择一个节点为active状态。若是目前现役NameNode崩溃,另外一个节点可能从ZooKeeper得到特殊的排外锁以代表它应该成为现役NameNode。
ZKFC
ZKFC是自动故障转移中的另外一个新组件,是ZooKeeper的客户端,也监视和管理NameNode的状态。每一个运行NameNode的主机也运行了一个ZKFC进程,ZKFC负责:
健康监测
active选择
jdbcClient访问Ha集群环境
package com.gec.demo; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; public class HdfsClientApp { public static void main(String[] args) throws IOException, URISyntaxException, InterruptedException { Configuration configuration=new Configuration(); FileSystem fileSystem= FileSystem.get(new URI("hdfs://bi/"),configuration,"hadoop"); // 2 把本地文件上传到文件系统中 fileSystem.copyFromLocalFile(new Path("D:/hello.txt"), new Path("/hello1.copy.txt")); // 3 关闭资源 fileSystem.close(); } }
注意要将如下配置文件copy到resource文件夹中。不然会报错!!!