• CDH4 HA方案


    CDH4 HA方案

    HDFS HA方案

    HDFS QJM 方案

    QJM手动切换方案


    手动切换方案,即在管理员发现Active NN不工作以后,或者由于升级等原因,手动将Standby NN切换为Standby NN。

    手动切换的流程为:
    1. 管理员在Active NN上,通过Hadoop命令行工具,通过HAAdmin工具(实现了Tools接口),将Active NN切换为Standby NN

      hadoop HAAdmin  -transitionToStandby
    

    成功后,集群变为两个Standby NN,此时客户端会在两个Standby NN之间来回重试。
    2. 管理员在Standby NN上,通过Hadoop命令行工具,通过HAAdmin工具(实现了Tools接口),将Standby NN切换为Active NN
      hadoop HAAdmin  -transitionToActive
    

    成功后,集群重新变为一个Active和一个Standby的状态,客户端开始连接新的Active NN工作。

    不同于NFS方案,以上两步操作如果没有顺序执行,也不会出现同时又两个Active NN的情况。这也是QJM方案的核心优势之一。
    下面,我们看一下,如果原Active NN没有切换为Standby的情况下,将 Standby切换为Active会发生什么情况:

    首先,每个NN都持有一个QuorumJournalManager,QuorumJournalManager可以理解为JournalNode的客户端,通过它可以连接到任意JournalNode(在hdfs-site.xml文件里配置的dfs.namenode.shared.edits.dir,配置了所有JournalNode的地址:qjournal://ocdata16:8488;ocdata17:8488;ocdata18:8488/mycluster)。QuromJournalManager通过AsyncLoggerSet保存到所有JournalNode的连接,对loggers的每次操作,都会通过call.waitFor等待各个JournalNode的返回结果。对于大部分操作,waitFor传入的最小返回节点数为(总节点数/2+1),对于format等特殊操作,传入的最小返回节点数为总节点数。

    将Standby切换为Active时,调用:NameNode.startActiveServices()->FSNamesystem.startActiveServices()->FSEditLog.recoverUnclosedStreams()->JournalSet.recoverUnfinalizedSegments()->QourumJournalManager.recoverUnfinalizedSegment()->QourumJournalManager.createNewUniqueEpoch()

    这时候,首先向所有的JournalNode询问他们最后的Epoch,在收到半数返回后,选择最大的epoch,这个epoch就是原Active NN持有的epoch。把这个epoch加1,然后告诉所有的JournalNode 这个新的epoch。从此以后,原Active只要操作EditLog,JournalNode就会发现它的epoch已经小于自己的epoch了,于是拒绝操作。

    Edit

    JobTracker HA 方案

    Edit

    本文图片采用Graphviz生成,源码保存在PNG文件中。修改图片步骤:
    1. 下载图片
    2. 使用文本编辑工具打开图片,最后面为文件源码,如:
      digraph G {
          edge [fontname="FangSong"]
          node [fontname="FangSong"]
          compound=true
          subgraph cluster_1{
              fillcolor="#00FF80" 
              style=filled
              JournalNode3 JournalNode2 JournalNode1
          }
          subgraph cluster_2 {
              fillcolor="#FF8000" 
              style=filled
            DataNode5 DataNode4 DataNode3 DataNode2 DataNode1
          }
          subgraph cluster_NameNode_Active {
              fillcolor="#00FFFF" 
              style=filled
              label="NameNode(Active)" 
              QuorumJournalManager_L HAAdmin_L
          }
          subgraph cluster_NameNode_Standby {
              fillcolor="#00FFFF" 
              style=filled
              label="NameNode(Standby)" 
             QuorumJournalManager_R HAAdmin_R 
          }
          JournalNode2 -> DataNode3[style=invis]
      
          QuorumJournalManager_L -> JournalNode2[lhead=cluster_1,label="日志写入"]
          QuorumJournalManager_R -> JournalNode2[dir=back,lhead=cluster_1,label="日志读取"]
          QuorumJournalManager_L -> DataNode2[dir=back,lhead=cluster_2,ltail=cluster_NameNode_Active,label="BlockReport"]
          QuorumJournalManager_R -> DataNode4[dir=back,lhead=cluster_2,ltail=cluster_NameNode_Standby,label="BlockReport"]
      
          HAAdmin_L->QuorumJournalManager_L[style=invis]
          HAAdmin_R -> QuorumJournalManager_R[style=invis]
      
          User -> {HAAdmin_L HAAdmin_R}[label="手动切换"];
      
          User[label="用户",fillcolor="#5A99CC",style=filled]
          HAAdmin_L[label="HAAdmin"]
          HAAdmin_R[label="HAAdmin"]
          QuorumJournalManager_L[label="QuorumJournalManager"]
          QuorumJournalManager_R[label="QuorumJournalManager"]
      }
      
    3. 复制源码并修改
    4. 通过Graphviz重新生成图片
    5. 将修改后的源码保存在新生成文件的末尾 
  • 相关阅读:
    转:SkipList跳表
    git操作
    JAVA小工具打包
    Java数字证书操作
    mysql创建数据库和用户
    解决node-sass安装不了的问题
    vscode + angular
    ng2 quickstart-primeng
    ng2 quickstart
    使用淘宝的npm代理下载模块
  • 原文地址:https://www.cnblogs.com/java20130722/p/3206921.html
Copyright © 2020-2023  润新知