Hadoop基础(四) --- HA介绍,HA架构,部署HA,Set Rack Aware 设定机架感知,distcp, archive,数据校验和

一、HA
-------------------------------------------------------
    1.high availability 高可用性。持续服务的能力
    2.多台主机之间进行集群配置
    3.failover 容灾
    4.single point of failure 单点故障
    5.nn1 + nn2 
    6.解决方案1:NFS 网络文件系统,需要共享磁盘EMC
         解决方案2:QJM 
         
         
二、HA架构
-------------------------------------------------------
    1.需要两台主机,一台active(负责所有操作) 一台 standby(维护足够多的状态,随时接管,提供容灾)
    2.act sta 要同步,使用Journals进程进行信息通讯
    3.act 详细记录 namenode 的写操作,并且写入到journals进程中.
    4.sta 不断从journals进程中读取编辑日志,并且观察编辑日志的变化,一旦日志发生变化,sta就会进行相应的编辑操作
    5.datanode 要同时向 2个nn发送块列表信息和心跳信息
    6.同一时刻,只能有一个nn 处于 act
    
    
三、部署HA
---------------------------------------------------------
    [hdfs.site.xml]
    
    [-- 配置部分 --]
    1.配置名称服务:dfs.nameservices
        a.名称服务的逻辑名称mycluster
        b.配置项
            <property>
              <name>dfs.nameservices</name>
              <value>mycluster</value>
            </property>
        
    2.配置名称服务nameservices中的每个namenode的名称列表
        a.配置项,两个namenode nn1,nn2
            <property>
              <name>dfs.ha.namenodes.mycluster</name>
              <value>nn1,nn2</value>
            </property>
        b.注意:当前的hadoop2.7.2最多配置两个namenode

    3.配置每个namenode的 RPC 地址
        a.配置项,nn1 的通讯地址s100 nn2的是s800
            <property>
              <name>dfs.namenode.rpc-address.mycluster.nn1</name>
              <value>s100:8020</value>
            </property>
            <property>
              <name>dfs.namenode.rpc-address.mycluster.nn2</name>
              <value>s800:8020</value>
            </property>
            
    4.配置每个namenode 的 webui地址
        a.配置项
            <property>
              <name>dfs.namenode.http-address.mycluster.nn1</name>
              <value>s100:50070</value>
            </property>
            <property>
              <name>dfs.namenode.http-address.mycluster.nn2</name>
              <value>s800:50070</value>
            </property>
            
    5.配置journal :配置每个namenode 的 共享编辑目录 share-editlog-dir
        a.配置项 qjournal:// journals进程的协议
            <property>
              <name>dfs.namenode.shared.edits.dir</name>
              <value>qjournal://s100:8485;s700:8485;s800:8485/mycluster</value>
            </property>
        
        b.一般配置3个journal进程 s100(1NN) s700(sNN) s800(2NN)
        
    6.配置 客户端 容灾 代理供应商 类
        a.用于指定   客户端进行检测,当前活跃的namenode 是哪个 的一个类
        b.配置项
            <property>
              <name>dfs.client.failover.proxy.provider.mycluster</name>
              <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
            </property>
    
    7.配置HA防护方法集合
        a.QJM防止脑裂(同时写入数据)的发生,同一时刻仅会有一个namenode处于active状态
        b.可选配置(可不配)
        
    8.配置 hdfs 的文件系统fs.defaultFS
        a.配置项,此处不再是s100,而是集群mycluster,名称服务
            <property>
              <name>fs.defaultFS</name>
              <value>hdfs://mycluster</value>
            </property>
    
    9.配置  journal node 本地目录用于存放 editlog
        a.配置项
            <property>
              <name>dfs.journalnode.edits.dir</name>
              <value>/home/ubuntu/hadoop/joural</value>
            </property>
    
    [-- 部署过程 --]
    1.在 JN 节点之上,启动jn进程
        $> hadoop-daemon.sh start journalnode
        
    2.启动jn之后,需要在disk上完成两个nn的元数据同步工作
        a.如果正在构建新的hdfs集群,需要先在其中一台上,格式化磁盘 hdfs -fromat namenode
        b.如果已经格式化文件系统,或者启用在non-ha的集群之上,要启用ha功能。即手动拷贝现有NN上的节点目录
        拷贝到另外一个NN相同目录下。
        c.在未格式化的nn上执行命令:
            $> hdfs namenode -bootstrapStandby
            保证jn有足够多的事务,来启动两个nn
        d.如果正在将非ha namenode 转换成ha,执行命令
            $> hdfs namenode -initializeSharedEdits
            会从local的namenode编辑日志目录加载到jns中,这样jn进程中就有数据了
        e.启动两个nn
        f.通过webui查看每个nn的状态
        
    [-- 管理 --]
    1.手动切换namenode 的 active 和 stand by 状态
        $> hdfs haadmin -transitionToActive nn1        //切换到激活态
        $> hdfs haadmin -transitionToStandby nn1    //切换到待命态
        
        
四、Set Rack Aware 设定机架感知
-----------------------------------
    1.保证网络交换机故障或者集群内部事件问题出现的时候,数据仍然可用
    2.编写一个脚本或者自定义的机架感知类,实现接口DNSToSwitchMapping
    3.将自定义的机架感知类,打成jar包,分发到所有节点的${hadoop_home}/share/xx/x    
    4.修改配置文件core-site:指定属性 net.topology.node.switch.mapping.impl = 自定义的机架感知类
        <property>
                <name>net.topology.node.switch.mapping.impl</name>
                <value>demo1.ts01.MyDNSToSwitchMapping</value>
        </property>
    
    5.分发到所有的机器上
    6.重启集群

/**
 * 自定义机架感知类,实现DNSToSwitchMapping接口
 * 得到机架,节点的映射
 */
public class MyDNSToSwitchMapping implements DNSToSwitchMapping{

	@Override
	/**
	 * 解析主机名/ip地址,返回 xx/xxx rack1/s100
	 */
	public List<String> resolve(List<String> names) {
	
		List<String> lists = new ArrayList<String>();
		//判断有效性
		if(names != null && !names.isEmpty())
		{
			for(String n : names)
			{
				int num = Integer.parseInt(n.substring(1));
				String rack = "";
				if(num <= 400)
				{
					rack = "rack1";
				}
				else
				{
					rack = "rack2";
				}
				lists.add("/" + rack + "/" + n);
			}		
		}	
		return lists;
	}

	@Override
	public void reloadCachedMappings() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void reloadCachedMappings(List<String> names) {
		// TODO Auto-generated method stub
		
	}
}

五、Hadoop distcp 并行拷贝
--------------------------------------------
    1.通过hadoop mr技术实现并行复制,递归拷贝文件夹。性能较高
        $> Hadoop distcp /user/ubuntu/data /user/ubuntu/data_bak
    2.可以跨集群拷贝
        $> Hadoop distcp hdfs://s100:8020/user/ubuntu/data hdfs://183.0.xx.xx:8020/user/ubuntu/data_bak

六、归档 har : hadoop archive
-----------------------------------------------
    1.创建hadoop 归档文件
        $> hadoop archive -archiveName data_bak.har -p /user/ubuntu/data_bak /user/ubuntu/

    2.查看归档文件har
        $> hadoop fs -lsr har:///user/ubuntu/data_bak.har
        
    3.注意
        a.har文件的大小和原始文件一样,是创建的文件副本。考虑好磁盘空间的使用
        b.har文件一旦创建便不能再修改,要想从中增减文件,必须重新创建存档文件

七、HDFS的数据的完整性
----------------------------------------------------
    1.checksum 校验和
        两次校验和不一致,说明数据已经损坏。该技术只能校测数据是否损坏,不能修复数据
    2.CRC-32 循环冗余校验
        cycle redundent check - 32 位
    3.指定校验的字节数组的长度,默认是512字节


 

猜你喜欢

转载自blog.csdn.net/xcvbxv01/article/details/81669740
今日推荐