hadoop體系框架的簡單總結
一、hadoop成員簡單介紹說明
- Apache Hadoop: 是Apache開源組織的一個分散式計算開源框架,提供了一個分散式檔案系統 (HDFS)和支援MapReduce分散式計算的軟體架構。
- Apache Hive:是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合資料倉庫的統計分析。
- Apache Pig: 是一個基於Hadoop的大規模資料分析工具,它提供的SQL-LIKE語言叫Pig Latin,該語言的編譯器會把類SQL的資料分析請求轉換為一系列經過優化處理的MapReduce運算。
- Apache HBase: 是一個高可靠性、高效能、面向列、可伸縮的分散式儲存系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化儲存叢集。
- Apache Sqoop: 是一個用來將Hadoop和關係型資料庫中的資料相互轉移的工具,可以將一個關係型資料庫(MySQL ,Oracle ,Postgres等)中的資料導進到Hadoop的HDFS中,也可以將HDFS的資料導進到關係型資料庫中。
- Apache Zookeeper: 是一個為分散式應用所設計的分佈的、開源的協調服務,它主要是用來解決分散式應用中經常遇到的一些資料管理問題,簡化分散式應用協調及其管理的難度,提供高效能的分散式服務
- Apache Mahout:是基於Hadoop的機器學習和資料探勘的一個分散式框架。Mahout用MapReduce實現了部分資料探勘演算法,解決了並行挖掘的問題。
- Apache Cassandra:是一套開源分散式NoSQL資料庫系統。
- Apache Avro: 是一個數據序列化系統,設計用於支援資料密集型,大批量資料交換的應用。
- Apache Ambari: 是一種基於Web的工具,支援Hadoop叢集的供應、管理和監控。
- Apache Chukwa: 是一個開源的用於監控大型分散式系統的資料收集系統,它可以將各種各樣型別的資料收整合適合 Hadoop 處理的檔案儲存在 HDFS 中,供 Hadoop 進行各種 MapReduce 操作。
- Apache Hama: 是一個基於HDFS的BSP(Bulk Synchronous Parallel)平行計算框架, Hama可用於包括圖、矩陣和網路演算法在內的大規模、大資料計算。
- Apache Flume: 是一個分佈的、可靠的、高可用的海量日誌聚合的系統,可用於日誌資料收集,日誌資料處理,日誌資料傳輸。
- Apache Giraph: 是一個可伸縮的分散式迭代圖處理系統。
- Apache Oozie: 是一個工作流引擎伺服器, 用於管理和協調執行在Hadoop平臺上(HDFS、Pig和MapReduce)的任務。
- Apache Crunch: 是基於Google的FlumeJava庫編寫的Java庫,用於建立MapReduce程式。與Hive,Pig類似,Crunch提供了用於實現如連線資料、執行聚合和排序記錄等常見任務的模式庫
- Apache Whirr: 是一套運行於雲服務的類庫(包括Hadoop),可提供高度的互補性。Whirr學支援Amazon EC2和Rackspace的服務。
- Apache Bigtop: 是一個對Hadoop及其周邊生態進行打包,分發和測試的工具。
- Apache HCatalog: 是基於Hadoop的資料表和儲存管理,實現中央的元資料和模式管理,跨越Hadoop和RDBMS,利用Pig和Hive提供關係檢視。
- Cloudera Hue: 是一個基於WEB的監控和管理系統,實現對HDFS,MapReduce/YARN, HBase, Hive, Pig的web化操作和管理。
二、hadoop整體框架
Hadoop主要由HDFS、MapReduce、HBase、Hive及ZooKeeper等成員組成。
Hadoop2.0架構
Haddop兩大核心設計為:底層用於儲存叢集中所有儲存節點檔案的檔案系統HDFS來執行MapReduce的MapReduce引擎。
- HDFS:client——檔案獲取;NameNode——檔案管理;DataNode——檔案儲存。
Hdfa是一個高度容錯性的分散式檔案系統,以流式訪問模式訪問應用程式的資料,大大提高了整個系統的吞吐量,非常適用與具有超大資料集的應用程式中。
1、HDFS架構採用主從架構(master/slave)。一個典型的HDFS叢集包含一個NameNode節點和多個DataNode節點。NameNode節點負責整個HDFS檔案系統中的檔案的元資料的保管和管理,叢集中通常只有一臺機器執行NameNode例項,DataNode節點儲存檔案中的資料,叢集中的機器分別執行一個DataNode例項。DataNode節點通過心跳機制與NamaNode節點進行定時的通訊。
Hdfs架構如下所示:
2、HDFS讀寫操作:
檔案寫入:1)Client向NameNode發起檔案寫入的請求;2)NameNode根據檔案大小及檔案塊配置情況,返回給Client所管理部分DataNode的資訊;3)Client將檔案劃分為多個檔案塊,根據DataNode的地址資訊,按順序寫入到每一個DataNode塊中。
檔案讀取:1)Client向NameNode發起檔案讀取的請求;2)NameNode返回檔案儲存的DataNode的資訊;3)Client讀取檔案資訊。
- MapReduce:是一種程式設計模型,用於大規模資料集的平行計算。採用分而治之思想,先把任務分發到叢集多個節點上,平行計算,然後把計算結果合併,從而得到最終計算結果,所涉及的任務排程,負載均衡,容錯處理等,都有MapReduce框架完成。
1)MapReduce作業執行流程:
在Hadoop中。每一個mapreduce任務都會被初始化一個Job,同時每一個Job又能夠分為兩個階段:map階段和reduce階段。這兩個階段分別用兩個函式來表示,即map函式和reduce函式。Map函式接受一個<key,value>形式的輸入,然後產生相同形式的<key,value>的中間輸出,hadoop會負責將全部具有相同中間key值的value集合到一起傳遞給reduce函式,reduce函式接收一個<key,(list of values)>形式的輸入,然後對這個value集合進行處理並輸出結果。如圖所示:
2)MapReduce流程中Map端和Reduce端分析:
Map端:
1)每一個輸入分片會讓一個map任務來處理,預設情況下,以HDFS的一個塊大小(hadoop2.X預設為128M)為一個分片。Map的輸出結果會暫時放在一個環形記憶體緩衝區中,當該緩衝區快要溢位時(預設為緩衝區大小的80%),會在本地檔案系統中建立一個溢位檔案,將該緩衝區的資料寫入這個檔案中;
2)在寫入磁碟之前,執行緒會根據reduce任務的數目將任務劃分為相同數目的分割槽,即一個reduce任務對應一個分割槽的資料。然後對每個分割槽中的資料進行排序,若此時設定Combiner,將排序後的結果進行Combia操作,目的是讓儘可能少的資料寫入到磁碟中;
3)當map任務輸出最後一個記錄時,可能會有很多的溢位檔案,這是需要將這些檔案合併,合併的過程中會不斷地進行排序和combia操作,最後合併成一個已分割槽且已排序的檔案;
4)將分割槽中的資料拷貝給相對應的reduce任務。
Reduce端:
1)Reduce會接收到不同mao任務傳來的資料,同時每個map傳來的資料都是有序的,若reduce端接收的資料量相當小,則直接儲存在記憶體中,若資料量超過了該緩衝區大小的一定比例,則對資料合併後溢寫到磁碟中;
2)隨著溢寫檔案的增多,後臺執行緒會將他們合併成一個更大的有序檔案。其實不管在map端還是在reduce端,mapreduce都是反覆地執行排序,合併操作;
3)合併過程中會產生許多的中間檔案,但mapreduce會讓寫入磁碟的資料儘可能的少,同時最後一次合併的結果並沒有寫入磁碟,而是直接輸入到reduce函式。
三、Hadoop重點成員元件及其作用
Hadoop除了核心HDFS及Mapreduce外,還有其他的重點成員:
1)Hbase(分散式列存資料庫)
Hbase是一個針對結構化資料的可伸縮、高可靠、高效能、分散式和麵向列的動態模式資料庫。Hbase採用BigTable的資料模型:增強的稀疏排序對映表(key/value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。Hbase提供了對大規模資料的隨機、實時讀寫訪問,同時,Hbase中儲存的資料可以使用MapReduce來處理,它將資料儲存和平行計算完美地結合在一起。
資料模型:Schema-->Table-->Column Family-->Column-->RowKey-->TimeStamp-->Value
Hbase體系結構三大重要組成部分:HRegion HBaseMaster HBase client
2)Hive(基於Hadoop的資料倉庫)
Hive定義了一種類似SQL的查詢語言(HQL),將SQL轉化為MapReduce任務在Hadoop上執行。通常用於離線分析。
Hive可從元資料儲存、資料儲存和資料交換三方面說明:
元資料儲存:元資料(資料倉庫中表名稱、表的列,表的分割槽、表分割槽的屬性等),Hive將元資料儲存在RDM中;
資料儲存:Hive有專門的資料儲存格式,使用者在建立表的時候只需要告訴Hive資料中列分隔符和行分隔符,既可以解析資料;
資料交換:通常使用Hive客戶端連結HiveServer,也可通過web介面去寫sql,Hive大部分查詢實際上都是利用MapReduce進行計算的
3)Zookeeper(分散式協作服務)
是一個分散式、開放原始碼的分散式應用程式協調服務,為分散式應用提供一致性服務的軟體。解決分散式環境下的資料管理問題:統一命名,狀態同步,叢集管理,配置同步等。
4)Sqoop(資料同步工具)
主要用於傳統資料庫和Hadoop之間傳輸資料。資料的匯入和匯出本質上是Mapreduce程式,充分利用了MR的並行化和容錯性。
5) Pig(基於Hadoop的資料流系統)
定義了一種資料流語言-Pig Latin,將指令碼轉換為MapReduce任務在Hadoop上執行,通常用於進行離線分析。
6)Mahout(資料探勘演算法庫)
主要目標是建立一些可擴充套件的機器學習領域經典演算法的實現,旨在幫助開發人員更加方便快捷地建立智慧應用程式。Mahout現在已經包含了聚類、分類、推薦引擎(協同過濾)和頻繁集挖掘等資料探勘方法,還包含資料的輸入/輸出工具、與其他儲存系統(如資料庫、MongoDB或Cassandra)整合等資料探勘支援架構。
7)Flume(日誌收集工具)
Cloudera開源的日誌收集系統,具有分散式、高可靠、高容錯、易於定製和擴充套件的特點。將資料從產生、傳輸、處理並最終寫入目標的路徑的過程抽象為資料流,在具體的資料流中,資料來源支援在Flume中定製資料傳送方,從而支援收集各種不同協議資料。同時Flume資料流提供對日誌資料進行簡單處理的能力,如過濾、格式轉換等。
以上關於hadoop相關的內容,是我在初步學習hadoop相關概念,把網上相關資料整合在一起,方便自己理解。如果有什麼問題,歡迎大家可以討論指正!