大數據開發實戰:HDFS和MapReduce優缺點分析


  一、 HDFS和MapReduce優缺點

  1、HDFS的優勢

      HDFS的英文全稱是 Hadoop Distributed File System,即Hadoop分布式文件系統,它是Hadoop的核心子項目。實際上,Hadoop中有一個綜合性的文件系統抽象,它提供了文件系統實現的各類接口,

    而HDFS只是這個抽象文件系統

    的一種實現,但HDFS是各種抽象接口中應用最為廣泛和最廣為人知的一個。

      HDFS被設計成適合運行在通用和廉價硬件上的分布式文件系統。它和現有的分布式文件系統有很多共同點,但他和其它分布式文件系統的區別也是明顯的。HDFS是基於流式數據模式訪問和處理超大文件的需求而開發的,

    其主要特點如下:

    1、處理超大文件

      這里的超大文件通常指的是GB、TB甚至PB大小的文件。通過將超大文件拆分為小的HDFS和MapReduce優缺點Split,並分配給數以百計、千計甚至萬計的的節點,Hadoop可以很容易地擴展並處理這些超大文件。

    2、運行於廉價的商用機器集群上

      HDFS設計對硬件需求比較低,只需運行在低廉的的商用機器集群上,而無須使用昂貴的高可用機器。在設計HDFS時要充分考慮數據的可靠性、安全性和高可用性。

    3、高容錯性和高可靠性

      HDFS設計中就考慮到低廉硬件的不可靠性,一份數據會自動保存多個副本(具體可用設置,通常三個副本),通過增加副本的數量來保證它的容錯性。如果某一個副本丟失,HDFS會自動復制其它機器上的副本。

      當然,有可能多個副本都會出現問題,但是HDFS保存的時候會自動跨節點和跨機架,因此這種概率非常低,HDFS同時也提供了各種副本放置策略來滿足不同級別的容錯需求。

    4、流式的訪問數據

      HDFS的設計建立在更多低相應“一次寫入,多次讀寫”任務的基礎上,這意味着一個數據集一旦有數據源生成,就會被復制分發到不同的存儲節點中,然后響應各種各種的數據分析任務需求。在多數情況下,分析任務都

      會涉及數據集的大部分數據,也就是說,對HDFS來說,請求讀取整個數據集比請求讀取單條記錄會更加高效。

 

  2、HDFS的局限

    HDFS的上述種種特點非常適合於大數據量的批處理,但是對於一些特點問題不但沒有優勢,而且有一定的局限性,主要表現以下幾個方面:

    1、不適合低延遲數據訪問

      如果要處理一些用戶要求時間比較短的低延遲應用請求(比如毫秒級、秒級的響應時間),則HDFS不適合。HDFS是為了處理大型數據集而設計的,主要是為了達到高的數據吞吐量而設計的,

    延遲時間通常是在分鍾乃至小時級別。

      對於那些有低延遲要求的應用程序,HBase是一個更好的選擇,尤其是對於海量數據集進行訪問要求毫秒級響應的情況,單HBase的設計是對單行或少量數據集的訪問,對HBase的訪問必須提供主鍵或主鍵范圍。

    2、無法高效存儲大量小文件

    3、不支持多用戶寫入和隨機文件修改

      在HDFS的一個文件中只有一個寫入者,而且寫操作只能在文件末尾完成,即只能執行追加操作。

 

  3、MapReduce 的優勢

    MapReduce是Google公司的核心計算模型,它將運行於大規模集群上復雜並行計算過程高度抽象為兩個函數:Map和Reduce。MapReduce目前非常流行,因為它有如下特點:

    1、MapReduce易於理解:簡單地實現一些接口,就可以完成一個分布式程序,而且這個分布式程序還可以分布到大量廉價的PC機器運行。也就是說,寫一個分布式程序,跟寫一個簡單的串行程序是一模一樣的。MapReduce

      易於編程的背后是MapReduce通過抽象模型和計算框架把需要做什么(What need to do)與具體怎么做(How to do)分開了,為程序員提供了一個抽象和高層的編程接口和框架,程序員僅需關心其應用層的具體計算問題,

      僅需要編寫少量的應用本身計算問題的程序代碼;如何具體完成這個並行計算任務所相關的諸多系統層細節被隱藏起來,交給計算框架去處理-----從分布代碼的執行到大到數千、小到輸幾個節點集群的自動調度使用。

    2、良好的擴展性

      當計算機資源不能得到滿足的時候,可以通過簡單的增加機器來擴展它的計算能力。多項研究發現,基於MapReduce的計算性可以隨節點數目增長保持近似於線性的增長,這個特點是MapReduce處理海量數據的關鍵,通過

      將計算節點增至幾百或者幾千可以很容易地處理數百TB甚至PB級別的離線數據。

    3、高容錯性

      MapReduce設計的初衷就是使程序能部署在廉價的PC機器上,這就要求它具有很高的容錯性。比如,其中一台機器宕機了,它可以把上面的計算任務轉移到另一個節點上運行,不至於這個任務運行失敗,

      而且這個過程不需要人工參與,完全是由Hadoop內部完成的。

 

  4、MapReduce的局限

    MapReduce雖然有很多的優勢,但是也有它不擅長的。這里的“不擅長”,不代表不能做,而是在有些場景下實現的效果差,並不適合用MapReduce來處理,主要表現在以下結果方面:

    1、實時計算:MapReduce無法像Oracle或MySQL那樣在毫米或秒級內返回結果,如果需要大數據量的毫秒級響應,可以考慮使用HBase.

    2、流計算:流計算的輸入數據是動態的,而MapReduce的輸入數據是靜態的,不能動態變化,這是因為MapReduce自身的設計特點決定了數據源必須是靜態的。如果需要處理流式數據可以用Storm,Spark Steaming、Flink

       等流計算框架。

    3、DGA(有向圖)計算:多個應用程序存在依賴關系,后一個應用程序的輸入為前一個的輸出。在這種情況下,MapReduce並不是不能做,而是使用后,每個MapReduce作業的輸出結果都會寫入磁盤,會造成大量的詞頻IO

      導致性能非常低下,此時可以考慮用Spark等迭代計算框架。

 

  二、HDFS和MapReduce基本架構

 

    HDFS和MapReduce是Hadoop的兩大核心,它們分工也非常明確,HDFS負責分布式存儲,而MapReduce負責分布式計算。

    

    1、HDFS采用了主從(Master/Slave)的結構模型,一個HDFS集群是由一個NameNode和若干個DataNode組成的,其中NameNode作為主服務器,管理文件系統的命名空間(即文件有幾塊,分別存儲在哪個節點上等)和客戶端

    對文件的訪問操作;

    2、集群中DataNode管理存儲的數據。HDFS允許用戶以文件的形式存儲數據。從內部來看,文件被分成若干數據塊,而且這若干個數據塊存放在一組DataNode上。

    3、NameNode執行文件系統的命名空間操作,比如打開、關閉、重命名文件或目錄等。它也負責數據塊到具體DataNode的映射。

    4、DataNode負責處理文件系統客戶端的文件讀寫請求,並在NameNode的統一調度下進行數據塊的創建、刪除和復制工作。HDFS的體系結構如下:

    

 

    MapReduce也是采用Master/Slave的主從架構,MapReduce包含4個組成部分,分別為Client、JobTracker、TaskTracker和Task,其架構圖如下:

    

    1、Client

      每個Job都會在用戶端通過Client類將應用程序以及配置參數Configuration打包成JAR文件存儲在HDFS中,並把路徑提交到JobTracker的Master服務,然后由Master創建每一個Task(即Map Task和 Reduce Task)將它們分發

      到各個TaskTracker服務中去執行。

      2、JobTracker

      JobTracker負責資源監控和作業調度。JobTracker負責監控所有TaskTracker與Job的健康狀況,一旦發現失敗,就將相應的任務轉移到其它節點;同時,JobTracker會跟蹤任務的執行進度、資源使用量等信息,並將這些信息

      告訴任務調度器,而任務調度器會在資源出現空閑時,選擇合適的任務使用這些資源。在Hadoop中,任務調度器是一個可插拔的模塊,用戶可以根據自己的需求設計相應的調度器。

    3、TaskTracker

      TaskTracker會周期性地通過Heartheat將本節點上的資源使用情況和任務的運行進度匯報給JobTracker,同時接收JobTracker發送過來的命令並執行相應的操作(如啟動新任務、殺死任務等)。TaskTracker使用“slot”來衡量划分

      本節點上資源量。"slot"代表單位的計算資源(CPU、內存能),一個Task獲取到一個slot后才有機會運行,而Hadoop調度器的作用就是講各個TaskTracker上空閑的slot分配給Task使用。slot分為Map slot和Reduce slot兩種,分別

      供Map Task和Reduce Task使用。TaskTracker通過slot的數目(可配置參數)限定Task的並發度。

    4、Task

      Task分為Map Task和Reduce Task兩種,均有TaskTracker啟動。HDFS以固定大小的block為基本單位存儲數據,而對於MapReduce而言,其處理單位是split。

    

    從上面的描述可以看出,HFDS和MapReduce共同組成了HDFS體系結構的核心,HDFS在集群上實現了分布式文件系統,MapReduce則在集群上實現了分布式計算和任務處理。HDFS在MapReduce任務處理過程中提供了對文件操作

    和存儲等的支持。而MapReduce在HDFS的基礎上實現任務的分發、跟蹤和執行等工作,並收集結果,兩種相互作用,完成了Hadoop分布式集群的主要任務。

 

    參考資料:《離線和實時大數據開發實戰》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM