Zookeeper Ha集羣簡介+jdbcClient訪問Ha集羣環境

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文件夾中。不然會報錯!!!

相關文章
相關標籤/搜索