Hadoop家族成員概述


Hadoop家族成員概述

一、Hadoop簡介

1.1 什么是Hadoop?

  Hadoop是一個分布式系統基礎架構,由Apache基金會所開發,目前Yahoo!是其最重要的貢獻者。

  Hadoop實現了一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS,用戶可以在不了解分布式底層細節的情況下,開發分布式應用程序,充分利用集群的威力高速運算和存儲。

1.2 Hadoop的特點

         高擴容能力:能可靠地存儲和處理千兆字節(PB)的數據。

         成本低:可以通過普通機器組成的服務器來分發以及處理數據,這些服務器群總計可達數千個節點,同時Hadoop是開源的。

         高效率:通過分發數據,Hadoop可以在數據所在的節點上並行地處理它們,這使得處理非常的快速。

         高可靠性:Hadoop能自動地維護數據的多份復制,並且在任務失敗后能自動地重新部署計算任務。

1.3 誰在用Hadoop?

    Yahoo!、IBM、Facebook、Amazon、百度、騰訊、新浪、搜狐、淘寶等。

1.4 Hadoop家族成員

         下圖為Hadoop家族成員圖,整個Hadoop項目由以下幾個子項目構成。

              

   圖1:Hadoop家族成員圖

 

 

  ·Hadoop Common 

  Hadoop體系最底層的一個模塊,為Hadoop各子項目提供各種工具,如:配置文件和日志操作等。

  ·Avro 

  Avro是Doug cutting主持的RPC項目,有點類似Google的protobuf和Facebook的thrift。avro用來做以后hadoop的RPC,使hadoop的RPC模塊通信速度更快、數據結構更緊湊。 

二、分布式文件系統(HDFS)

2.1 HDFS簡介

  HDFS是一種用於Hadoop應用程序的主存儲系統,也是一個高容錯性系統,適合部署在廉價機上,同時,HDFS能提高吞吐量的數據訪問,非常適合大規模數據集上的應用。

  HDFS為了做到可靠性創建了多份數據塊的復制,並將它們放置在服務器群的計算節點中,MapReduce就可以在它們所造的幾點上處理這些數據了。

  HDFS默認的最基本的存儲單位是64M的數據塊。

2.2 HDFS能做什么?

      HDFS適合做什么?

         ·存儲並管理PB級數據。

         ·處理非結構化數據。

         ·注重數據處理的吞吐量。

         ·應用模式為:write-once-read-many存取模式。

     HDFS不適合做?

         ·存儲小文件(不建議使用)。

         ·大量的隨機讀(不建議使用)。

         ·需要對文件的修改(不支持)。

2.3 HDFS組件的主要功能

 

   HDFS主要由NameNode和DataNode組成, NameNode是HDFS中負責namespace管理的節點,NameNode保存了當前集群中所存儲的的所有的文件的元數據信息,NameNode同時與集群中其它的節點通信,以保持元數據與系統中的文件的一致性,同時也和 client通信,以響應client對文件的需要。DataNode是文件系統的工作節點,他們根據客戶端或者是DataNode的調度存儲和檢索數據,並且定期向DataNode發送他們所存儲的塊(block)的列表。

   

  沒有NameNode,HDFS就不能工作。

NameNode

DataNode

·存儲元數據

·存儲文件內容

·元數據保存在內存中

·文件內容保存在磁盤

·保存文件block和datanode之間的映射關系

·維護了block到datanode本地文件的映射關系

                表1:HDFS的主要功能

  基本概念:

  1)   數據塊(block)

  ·HDFS默認的最基本的存儲單位是64M的數據塊。

  ·和普通文件系統相同的是,HDFS中的文件是被分成64M一塊的數據塊存儲的。

  ·不同於普通文件系統的是,HDFS中,如果一個文件小於一個數據塊的大小,並不占用整個數據塊的存儲空間。

  2)   元數據節點(NameNode)

  元數據節點用來管理文件系統的命名空間。

  3)   數據節點(DataNode)

  數據節點是文件系統中掙扎存儲數據的地方。

三、MapReduce

  MapReduce是一種處理海量數據的並行編程模型和計算框架,主要用於大數據集的並行計算。

3.1 MapReduce基礎

  1) MapReduce處理數據集的過程,如下圖:

     

              圖2:MapReduce處理數據集的過程

      Map階段:

  MapReduce框架將任務的輸入分割成固定大小的片段(splites),隨后敬愛那個每個splite進一步分解成一批鍵值對<K1,V1>。 Hadoop為每個split創建一個Map任務用於執行用戶自定義的Map函數,並將對應split中的<K1,V1>對作為輸入,得到計算的中間結果<K2,V2>,接着將中間結果按照K2進行排序,並key值相同的value放在一起形成<K2,list(V2)>元組。最后在根據key值的范圍將這些遠足進行分組,隨影不同的Reduce任務。

          Reduce階段:

         Reducer把從不同Mapper接收來的數據整合在一起並進行排序,然后調用用戶自定義的reduce函數,對輸入<K2,list(V2)>對進行處理,得到鍵值對<K3,V3>並輸出到HDFS上。job.setNumReduceTask()方法設置reduce數。

3.2 MapReduce的集群行為

         ·任務調度與執行:有一個JobTracker和多個TaskTracker兩類節點控制完成。

         ·本地計算:split通常應小於或等於HDFS數據塊的大小,從而保證split不會跨越兩台計算機存儲,便於本地計算。

         ·shuffle過程:將Mapper的輸出結果按照key值分成R份(R是設定的Reduce個數),划分時使用哈希函數,保證某一范圍內的key由某個Reduce來處理。

         ·合並Mapper輸出:在Shuffle之前先的結果進行合並(Combine過程)即將中間結果相同key值的多組<key,value>對合並成一對。可以減少中間結果數量,從而減少數據傳輸過程中的網絡流量。

         ·讀取中間結果:Mapper的輸出結果被直接寫到本地磁盤而非HDFS。

         ·任務管道:有時R個Reduce會產生R個結果,會將這R個結果作為另一個計算任務的輸入開始。

3.2 Map/Reduce的個數

         ·Mappers的數目直接由splits來決定。

         ·Reduces的數目略小於reduce slots的總數。

              所有的Reduces可以並行執行,減少排隊時間。

     對於未執行的reducer的slots,可以在其他reducer發生故障時立即分配給新創建的reducer。

         ·Reduces的個數要小於Mappers的個數。

四、Chukwa

4.1 Chukwa簡介

    Chukwa是由Yahoo貢獻,基於Hadoop的大集群監控系統,可以用他來分析和收集系統中的數據(日志)。Chukwa運行HDFS中存儲數據 的收集器和MapReduce框架之上,並繼承了Hadoop的可擴展性  和魯棒性, Chukwa使用MapReduce來生成報告,他還包括一個用於監測和分析結果顯示的web-portal工具,通過web-portal工具使這個收 集數據的更佳具有靈活性。

4.2 Chukwa由那幾個組件組成?

         Chukwa是Yahoo開發的Hadoop之上的數據采集/分析框架,主要用於日志采集/分析。該框架提供了采集數據的Agent,由Agent采集數 據通過HTTP發送數據給Cluster的Collector,collector把數據  sink進Hadoop,然后通過定期運行Map reducer來分析數據,將結果呈現給用戶。

    Chukwa 有以下4個主要的組成部分:
        ·Agent:收集各服務器的數據
        ·Collectors:接收agent的數據;並寫進存儲
        ·MapReduce jobs :歸檔數據
       · HICC :就是 Hadoop Infrastructure Care Center的四個英文單詞的縮寫,簡單來說是個Web工程用於ChukWa的內容展示。 

五、Pig

    Pig是SQL-like語言,是在MapReduce上構建的一種高級查詢語言,把一些運算編譯進MapReduce模型的Map和Reduce中,並且用戶可以定義自己的功能。

六、Hive

     Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供完整的SQL查詢功能,可以將SQL語句轉換為MapReduce任務進行運行。其優點是學習成本低,可以通  過類SQL語句塊快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫。

七、HBase

7.1 HBase簡介

   HBase是Hadoop的數據庫。能對大型數據提供隨即、實時的讀寫訪問。HBase的目標是存儲並處理大型的數據。HBase是一個開源的、分布式的、多版本的、面向列的存儲模型。它存儲的是松散型數據。

   HBase是Google BigTable的開源實現。Google BigTable利用 GFS 作為其文件存儲系統,HBase利用Hadoop HDFS作為其文件存儲系統;Google 運行 MapReduce來處理BigTable中的海量數 據,HBase同樣利用Hadoop MapReduce來處理HBase中的海量數據;Google BigTable利用 Chubby作為協同服務,HBase利用Zookeeper作為對應。

7.2 HBase的特點

         ·高可靠性

         ·高效性

         ·面向列

         ·可伸縮 

         ·可在廉價PC Server上搭建大規模的結構化存儲集群

7.3 HBase的使用場景

         ·成熟的數據分析主題,查詢模式已經確立並且不輕易改變。

         ·傳統的關系型數據庫已經無法承受負荷,高速插入,大量讀取。

         ·適合海量的,但同時也是簡單的操作(例如key-value)。

八、Zookeeper

    Zookeeper是Google的Chubby一個開源的實現。它是一個針對大型分布式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、分布式同步、組服務等。ZooKeeper的目標就是封裝好復雜易  出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶


免責聲明!

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



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