1. 程式人生 > >Hadoop的產生背景

Hadoop的產生背景

  1. hadoop的背景
    • 資料處理步驟:
        通過運用Python網頁爬蟲或者Hadoop的Flume框架實時收集資料>資料儲存>運用Hadoop、Hive、Spark查詢關鍵字進行資料統計>統計之後的資料由HDFS匯入到MySQL中進行儲存>運用SpringMVC建立與MySQL聯絡,對資料進行Web前端展示(主要是HighChart軟體)。
    • 對於儲存:Google採用多臺機器,使用分散式的概念去儲存
      對於計算:用多臺機器去處理
        MapReduce核心思想:將資料分開處理,結果合在一起儲存(”分而治之”思想)。MapReduce分為Map和Reduce,每個Map處理的資料是獨立的,Reduce就是合(結果合在一起儲存)
    • 關於儲存:HDFS誕生>分散式檔案系統
        資料儲存在HDFS上,然後MapReduce進行處理HDFS上的資料。
        分散式儲存:分散式資料庫:HBase(google稱其為:BigTable、GFS)。
    • 分散式儲存系統起源於谷歌的三篇論文(谷歌的三駕馬車:MapReduce、BigTable、GFS)
        後來逐漸演變為現在的Hadoop生態系統的主要框架:
      GFS ->HDFS
      MapReduce->MapReduce
      BigTable->HBase
    • Hadoop的四大核心模組
      Hadoop common:支援其他模組的工具類,為Hadoop模組提供基礎設施
      Hadoop HDFS:分散式檔案系統,提供儲存
      Hadoop YARN:任務排程和叢集資源管理
      Hadoop MapReduce:分散式離線計算框架
        Hadoop之父Doug Cutting,Lucene、Nutch 、Hadoop等專案的發起人。
  2. Hadoop的特性
    可靠、可擴充套件、分散式計算框架
    • 儲存的可靠性:
        如果儲存資料的機器損壞了。HDFS提供了一個策略,給資料提供一個副本數(預設3個),這是 犧牲了硬碟作為代價,但是划算的。
      HDFS儲存形式:以塊儲存,塊損壞了,同樣提供了一個策略,對於每個儲存檔案產生一個校驗碼,之後定期對它產生一個校驗碼,進行匹配,如果不匹配,說明塊已經損壞
    • 計算的可靠性:
    • 可擴充套件性:可以新增任意多臺機器,增加配置
  3. Hadoop的架構分析

    • HDFS的架構分析
      1)設計理念:一次寫入,多次讀取
      2)分散式應用都有主從的架構:
        主節點:NameNode
        從節點:datanode
      3)HDFS儲存的是檔案,檔案的屬性有哪些
        名稱
        位置
        副本數
        擁有者、許可權
        儲存的塊
        各個塊具體儲存在那個datanode上
      。。。。
        以上資訊稱之為:元資料(名稱空間)
      元資料(名稱空間)儲存在namenode上
      檔案具體內容儲存在datanode上
      4)HDFS以塊的形式儲存(預設是128M),塊block,1系列中塊的預設大小為64MB,2系列中塊的預設大小為128MB
        500M檔案,塊的大小是256M,第一個塊的大小是256M,另一個是244M
      5)對於HDFS檔案系統來說
      read讀
      write寫
      讀取流程:/user/beifeng/mapreduce/input/wc.input
      首先知道這個檔案的位置,需要先去找namenode
      “就近原則”
      客戶端>namenode
      客戶端>datanode
      寫入的過程:/user/beifeng/mapreduce/output/part-00000
      客戶端>namenode
      客戶端>datanode
      資料流沒有經過namenode,是客戶端直接和DataNode進行資料互動。

    • YARN的架構分析
      是分散式框架,也是主從結構
        主節點:ResourceManager管理整個叢集資源
        從節點:NodeManger
        客戶端提交應用到ResourceManager上,來申請所需要的資源,分配到各個NodeManger節點上。
      YARN的排程過程:
        客戶端提交MapReduce任務(包括很多job)到ResourceManager節點上,申請分配資源,具體執行在NodeManager上。每個job都有一個ApplicationMaster應用管理者,對任務進行管理、監控和排程。
        一個Map是在單獨的資源裡面執行的,不會被其他的任務搶走資源。
      為了實現這樣的目的,提出了一個概念:將任務放在某一個空間中,這個空間就屬於某個任務,這個概念叫做:Container(容器)。
      Map和Reduce所需資源都會放在一個容器中,任務在容器中執行。
        小結YARN:通過每個應用的應用管理者去申請資源,然後封裝在容器中,告訴資源管理者,在容器中啟動任務。

    • MapReduce計算框架
        將計算過程分為兩個階段,Map和Reduce,Map可以理解為一個對映。
        Map階段並行處理輸入資料到Reduce彙總階段中間有一個過程,叫shuffle(有順序有規則的打亂)
      簡單理解:map輸出到reduce輸入的階段就是shuffle。
      1. Hadoop 2.x產生
    • Hadoop1.x出現的問題:
      HDFS存在的問題:
        Namenode單點故障,難以應用於線上場景。
        Namenode壓力過大,且記憶體受限,影響系統擴充套件性。
      Mapreduce存在問題:
        Jobtracker單點故障
        Jobtracker壓力過大,影響拓展性,難以支援Mapreduce之外的計算框架,如果storm,spark,Tez等。
      Hadoop2由Mapreduce,HDFS和yarn三分部構成
        HDFS:NN Federation HA
        Mapreduce:在yarn上執行的MR
        Yarn:資源管理系統
    • 解決HDFS1的單點故障和記憶體受限問題:
      a:解決單點故障
      HDFS HA:通過主備Namenode切換來解決,如果主Namenode發生故障,則就切換到備Namenode上。(有了這樣的優點以後,系統升級也變得更加方便)。
      詳細過程:主Namenode對外提供服務,被Namenode同步Namenode元資料,以待切換。所有datanode塊同時向兩個Namenode彙報資料塊資訊。
        切換Namenode有兩種選擇,一種是手動切換,一種是自動切換。手動切換:主要使用命令來實現切換,主要適用於系統升級的場合。自動切換:是基於zookeeper實現的,zookeeper failover controller監控Namenode健康狀態,並向zookeeper註冊Namenode,Namenode掛掉後,ZKFC為Namenode競爭鎖,獲得ZKFC的Namenode成為active namenode。
      b:解決記憶體受限問題
        HDFS Federation(聯邦),水平拓展,支援多個Namenode,每個Namenode分管一部分目錄。所有Namenode共享所有Datanode儲存資料。
      注意:僅僅是架構上面發生了變換,其他使用方式不變,Mapreduce的改變就是YARN的改變。