• HDFS HA和Federaion


    1.HA

    HA即为High Availability,用于解决NameNode单点故障问题,该特性通过热备的方式为主NameNode提供一个备用者,一旦主NameNode出现故障,可以迅速切换至备NameNode,从而实现不间断对外提供服务。

    在一个典型的HDFSHA场景中,通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,比如处理来自客户端的RPC请求,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。

    为了能够实时同步Active和Standby两个NameNode的元数据信息(实际上editlog),需提供一个共享存储系统,可以是NFS、QJM(Quorum Journal Manager)或者Bookeeper,Active Namenode将数据写入共享存储系统,而Standby监听该系统,一旦发现有新数据写入,则读取这些数据,并加载到自己内存中,以保证自己内存状态与Active NameNode保持基本一致,如此这般,在紧急情况下standby便可快速切为active namenode。

    HDFS_HA_arch

    HA 的共享存储常用的就是journal manager,也就是ZKFC。

    zk在zkfc中可以提供的功能:
    (1) Failure detector: 及时发现出故障的NN,并通知zkfc
    (2) Active node locator: 帮助客户端定位哪个是Active的NN
    (3) Mutual exclusion of active state: 保证某一时刻只有一个Active的NN

    (1) ZKFailoverController(DFSZKFailoverController): 驱动整个ZKFC的运转,通过向HealthMonitor和ActiveStandbyElector注册回调函数的方式,subscribe HealthMonitor和ActiveStandbyElector的事件,并做相应的处理
    (2) HealthMonitor: 定期check NN的健康状况,在NN健康状况发生变化时,通过回调函数把变化通知给ZKFailoverController
    (3) ActiveStandbyElector: 管理NN在zookeeper上的状态,zookeeper上对应node的结点发生变化时,通过回调函数把变化通知给ZKFailoverController
    (4) FailoverController: 提供做graceful failover的相关功能(dfs admin可以通过命令行工具手工发起failover)

    zkfc-arch

    详细配置:略

    Java API 访问:

    public static void main(String[] args) {
    		Configuration conf = new Configuration();
    		conf.set("fs.defaultFS", "hdfs://myhadoop");
    		conf.set("dfs.nameservices", "myhadoop");
    		conf.set("dfs.ha.namenodes.myhadoop", "nn1,nn2");
    		conf.set("dfs.namenode.rpc-address.myhadoop.nn1", "192.168.2.2:8020");
    		conf.set("dfs.namenode.rpc-address.myhadoop.nn2", "192.168.2.3:8020");
    		conf.set("dfs.client.failover.proxy.provider.myhadoop",
    				"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider");
    		FileSystem fs = null;
    		try {
    			fs = FileSystem.get(conf);
    			FileStatus[] list = fs.listStatus(new Path("/"));
    			for (FileStatus file : list) {
    				System.out.println(file.getPath().getName());
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				fs.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    

    2.Federaion

    Federation即为“联邦”,该特性允许一个HDFS集群中存在多个NameNode同时对外提供服务,这些NameNode分管一部分目录(水平切分),彼此之间相互隔离,但共享底层的DataNode存储资源。

    一般1000台机器一下的中小规模的hadoop集群,一个namespace/name service就足够了,不需要考虑federation,以免增加不必要的复杂性


    参考自:

    http://dongxicheng.org/hadoop-hdfs/hdfs-ha-federation-deploy/

    http://www.wuzesheng.com/?p=2475

  • 相关阅读:
    汪曾祺《生活是很好玩的》有感
    中小学Python编程语言教学
    1. python 基础课程目录
    白盒测试之gmock入门篇
    Apache与Tomcat 区别联系
    白盒测试之gtest第一个demo
    白盒测试之初识gtest工具
    纯手工打造dropdownlist控件
    android 线程的使用总结
    染色板QPlette
  • 原文地址:https://www.cnblogs.com/admln/p/hdfs-ha-federation.html
Copyright © 2020-2023  润新知