HDFS基于QJM的高可用配置--学习笔记

本文参考官方文档

一:典型的HA集群介绍

这里写图片描述

为了解决NameNode的单节点故障问题,hadoop2.0以后的版本可以配置多个NameNode节点,如上图所示。在两个单独的计算机中配置连个NameNode 节点,在同一时间只有一个NameNode节点处于活跃状态,另一个节点处于热备用状态。Active NameNode 节点负责集群中所有客户端的操作,Standby NameNode 节点则实时收集整个集群的状态一再必要的时候进行故障转移。

  • Standby NameNode 节点如何保证自己与Active NameNode 节点处于同步状态?

集群中会配置一组专门用于存放NameNode 节点的操作日志的文件的节点,成为JounalNodes节点,当Active NameNode 执行任何修改时,他都会将这些记录持久化到JounalNode节点中。Standby NomeNode 则会实时监控JounalNode的变更操作,从中读取日志文件,将其同步到自己的命名空间中,来确保自己的命名空间中保存了当前集群中的最新的信息。从而保证了在发生故障转移时,自己的命名空间的信息和之前的Active NameNode节点中的信息是同步的。

  • 心跳机制的设置
    为了使主备节点进行快速的故障转移,集群中的所有DateNode节点会将心跳信息同时发送给主备节点,以保证两个NameNode节点中都保存了当前集群中的最新的快位置信息

  • 保证JounalNode的正确性
    在同一时间,JounalNode只允许一个活跃的NameNode节点执行写操作,其他NameNode节点只允许从JounalNode节点中读取日志信息。当发生故障转移的期间,变为Active NameNode 的节点将接管写入JounalNode的角色。从而有效防止了JounalNode的节点数据分裂的情况。

二:高可用结群的硬件部署

NameNode节点:每个NameNode节点需要配置在独立的物理节点中,性能应该相同
JounalNode节点:JounalNode进程相对轻量级,可以以其他进程并置,注意:集群中至少有3个JounalNode的守护进程,以避免单机故障 。为了更好的避免单机故障,应该运行奇数个JN节点。

三:主从结构

    主:jobtracker
    从:tasktracker

四:四个阶段

1.Split
2. Mapper:key-value(对象)
3. Shuffle

    1.分区:(partition,HashPartation:根据key的hashcode值和Reduce的数量 模运算),可以自定义分区,运算速度要快,要解决数据倾斜问题和reduce负载均衡。
    2.排序:默认按照字典排序 WriterCompartor(比较)
    3.合并:减少当前mapper输出数据,根据key相同(比较),把value进行合并。
    4.分组:(key相同(比较),value组成一个集合)merge

4.Reduce

输入数据:key+迭代器

五:Hadoop 2.5 HA搭建

1.core-site.xml
<configuration>
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://mycluster</value>
    </property>
     <property>
       <name>ha.zookeeper.quorum</name>
       <value>192.168.128.104:2181,192.168.128.105:2181,192.168.128.107:2181</value>
     </property>
    <property>
      <name>hadoop.tmp.dir</name>
      <value>/usr/xul/hadoop-2.5</value>
    </property>
</configuration>
2.hdfs-site.xml
<configuration>

    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
        </property>
    <property>
      <name>dfs.ha.namenodes.mycluster</name>
      <value>nn1,nn2</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.mycluster.nn1</name>
      <value>192.168.128.104:8020</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.mycluster.nn2</name>
      <value>192.168.128.105:8020</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.mycluster.nn1</name>
      <value>192.168.128.104:50070</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.mycluster.nn2</name>
      <value>192.168.128.105:50070</value>
    </property>

    <property>
      <name>dfs.namenode.shared.edits.dir</name>
                  <value>qjournal://192.168.128.105:8485;192.168.128.107:8485;192.168.128.108:8485/mycluster</value>
    </property>

    <property>
      <name>dfs.client.failover.proxy.provider.mycluster</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value>
    </property>

    <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/root/.ssh/id_rsa</value>
    </property>

    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/usr/xul/JNdata</value>
    </property>
     <property>
       <name>dfs.ha.automatic-failover.enabled</name>
       <value>true</value>
     </property>
</configuration>
3.准备zookeeper
1. 三台zookeeper:hadoop1,hadoop2 ,hadoop3
2. 编辑zoo.cfg配置文件
    1)修改 dataDir=/opt/zookeeper
    2) server.1=hadoop1:2888:3888
       server.2=hadoop2:2888:3888
       server.3=hadoop3:2888:3888   
3.在dataDir目录中创建一个myid的文件。文件内容为1,2,3 
4.配置hadoop中的slaves
5.启动三个zookeeper : ./zkServer.sh start
6.启动三个JournalNode:./hadoop-deamon.sh start journalnode
7.在其中一个namenode上格式化,hdfs namenode -format
8. 把刚刚格式化之后的元素数据拷贝到另一个namenode中
    启动刚刚格式化的namenode
    在没有格式化的namenode上执行:hdfs namenode -boostrapStandby
    启动第二个namenode
9.在其中一个name节点上初始化zkfc:hdfs zkfc -formatZK
10.停止全部节点:stop-dfs.sh
11.全部启动 : start-dfs.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值