Hadoop生態系統簡介

概述

Hadoop是Apache軟件基金會旗下的一個開源分佈式計算平臺,以Hadoop分佈式文件系統(HDFS)和MapReduce(Google MapReduce的開源實現)爲核心的Hadoop爲用戶提供了系統底層細節透明的分佈式基礎架構。HDFS的高容錯性、高伸縮性等優點允許用戶將Hadoop部署在低廉的硬件上,形成分佈式系統;MapReduce分佈式編程模型允許用戶在不瞭解分佈式系統底層細節的情況下開發並行應用程序。所以用戶可以利用Hadoop輕鬆底組織計算機資源,從而搭建自己的分佈式計算平臺,並且可以充分利用集羣的計算和存儲能力,完成海量數據的處理。圖1展示了Hadoop生態系統包括的內容。


圖1 Hadoop生態系統

1.HDFS(Hadoop Distributed File System)

HDFS,即Hadoop分佈式文件系統,源自於Google在2013年10月發表的GFS論文,是GFS的克隆版。HDFS是Hadoop體系中數據存儲管理的基礎,它是一個高度容錯的系統,能檢測和應對硬件故障,用於在低成本的通用硬件上允許,HDFS簡化了文件的一致性模型,通過流式數據訪問,提供高吞吐量應用程序數據訪問功能,適合帶有大型數據集的應用程序。

圖2 HDFS體系架構

如圖2所示,HDFS採用Master/Slave架構對文件系統進行管理,一個HDFS集羣是由一個NameNode和一定數目的DataNode組成的。NameNode是一箇中心服務器,負責管理文件系統的名字空間以及客戶端對文件的訪問。集羣中的DataNode一般是一個節點運行一個DataNode進程,負責管理它所在節點上的存儲。

2.MapReduce

MapReduce分佈式計算框架,是源自於Google在2004年12月發表的MapReduce論文,Hadoop MapReduce是google MapReduce的克隆版。MapReduce是一種計算模型,用於進行大數據量的計算。其中Map對數據集上的獨立元素進行指定操作,生成鍵值對形式中間結果。Reduce則對中間結果中相同鍵的所有值進行規約,以得到最終結果。MapReduce這樣的功能劃分非常適合在大量計算機組成的分佈式並行環境裏進行數據處理。

圖3 MapReduce作業執行流程

圖3給出了MapReduce作業詳細的執行流程圖,有運行作業、獲取作業ID、復製作業資源、提交作業、初始化作業、獲取輸入分割、心跳通信、獲取作業資源、發佈、運行、輸出這11個步驟。其中涉及到4個主要的實體:客戶端(Client)、JobTracker、TaskTracker、HDFS。客戶端負責編寫MapReduce代碼,配置作業,提交作業;JobTracker負責初始化作業,分配作業,與TaskTracker通信,協調整個作業的執行;TaskTracker保持與JobTracker的通信,在分配的數據片段上執行Map或Reduce任務,需要主要注意的是圖3中TaskTracker節點後的省略號表示Hadoop集羣中可以包含多個TaskTracker;HDFS保存作業的數據、配置信息等,保存作業結果。

3.Hbase

Hbase分佈式列存數據庫,源自於Google在2006年11月發表的Bigtable論文。傳統的關係型數據庫是面向行的數據庫。HBase是Google Bigtable克隆版,HBase是一個針對結構化數據的可伸縮、高可靠、高性能、分佈式和麪向列的動態模式數據庫。和傳統關係數據庫不同,HBase採用了BigTable的數據模型:增強的稀疏排序映射表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。HBase提供了對大規模數據的隨機、實時讀寫訪問,同時,HBase中保存的數據可以使用MapReduce來處理,它將數據存儲和並行計算完美地結合在一起。

圖4 Hbase體系結構

如圖4所示,Hbase的服務器體系結構遵從簡單的主從服務器架構,它由HRegion服務器羣和Hbase Master服務器構成。Hbase Master服務器負責管理所有的HRegion服務器,而Hbase中所有的服務器都是通過ZooKeeper來進行協調並處理Hbase服務器運行期間可能遇到的錯誤。Hbase Master本身並不存儲Hbase中的任何數據,Hbase邏輯上的表可能會被劃分成多個HRegion,然後存儲到HRegion服務器羣中。HBase Master服務器中存儲的是從數據到HRegion服務器的映射。

4.Hive

Hive,基於Hadoop的數據倉庫,由facebook開源,最初用於解決海量結構化的日誌數據統計問題。Hive是一個基於Hadoop文件系統之上的數據倉庫框架,提供:數據ETL(抽取、轉換、加載)工具、數據存儲管理、大型數據集的查詢和分析,定義類似sql語言——Hive QL,允許用戶進行和sql類似的操作,還允許開發人員方便使用Mapper、Reducer操作。

Hive數據倉庫包含四類數據模型:表(Table)、外部表(External Table)、分區(Partition)、桶(Bucket)。表:和數據庫表在概念上類似,在Hive中對應着一個存儲目錄;分區:每個分區都對應數據庫中相應分區列的一個索引,hive中每個分區對應表下的一個目錄,所有分區的數據都存儲在對應的目錄中;桶:在對指定列進行哈希計算時,會根據哈希值切分數據,使每個桶對應一個文件;外部表:指向在HDFS中存在的數據,可以創建分區,和表在元數據組織上是相同,但數據存儲存在較大差異,差異體現有兩點,1)表創建過程和數據加載步奏,數據加載時,實際數據會移動到數據倉庫目錄中,之後訪問直接訪問數據倉庫目錄,刪除表時,表中的數據和元數據同時刪除。2)外部表的創建只有一個步奏,創建表和加載數據同時完成,實際數據存儲在創建語句Location指定的HDFS路徑中,不會移動到數據倉庫中,刪除表時,只刪除元數據,不刪除表數據。圖5展示了Hive的體系結構。

圖5 Hive體系結構

    如圖5所示,用戶與Hive的交互方式有三種:命令行接口(CLI)、網絡接口(Web UI)以及JDBC接口。

5.Zookeeper

Zookeeper,源自於Google在2006年11月發表的Chubby論文,是Chubby的克隆版。Zookeeper是一個爲分佈式應用所設計的開源協調服務。它可以爲用戶提供同步、配置管理、分組和命名等服務。用戶可以使用Zookeeper提供的接口方便地實現一致性、組管理、leader選舉及某些協議。

Zookeeper提供的命名空間與標準的文件系統非常相似。它的名稱是由通過斜線分割的路徑名序列所組成。Zookeeper中的每一個節點都是通過路徑來識別的。圖6展示了Zookeeper的層次命名空間結構。

圖6 Zookeeper的層次命名空間

6.Pig

    Pig是基於Hadoop的數據流系統,它由yahoo!開源,設計動機是提供一種基於MapReduce的ad-hoc(計算在query時發生)數據分析工具,定義了一種數據流語言——Pig Latin,將腳本轉換爲MapReduce任務在Hadoop上執行。Pig Latin 包括大量的傳統數據操作 (join, sort, filter, etc.), 也可以讓用戶開發他們自己的函數,用來查看,處理和編寫數據。

7.Sqoop

Sqoop是SQL-to-Hadoop的縮寫,主要用於傳統數據庫和Hadoop之間傳輸數據。數據的導入和導出本質上是MapReduce程序,充分利用了MR的並行化和容錯性。其中主要利用的是MR中的Map任務來實現並行導入、導出。

Sqoop1 import原理:從傳統數據庫獲取元數據信息(scheme、table、field、field type),把導入功能轉換爲只有Map的MapReduce作業,在MapReduce中有很多Map,每個Map讀一片數據,進而並行的完成數據的拷貝。

Sqoop1 export原理:獲取導出表的schema、meta信息,和Hadoop中的字段匹配;多個Map作業同時運行,完成將HDFS中數據導出到關係型數據庫中。

8.Avro

Avro作爲Hadoop下相對獨立的子項目,是一個數據序列化的系統。類似於其他序列化系統,Avro可以將數據結構或對象轉化成便於存儲或傳輸的格式。Avro提供了以下的特性和功能:

1.    豐富的數據結構類型;

2.    快速可壓縮的二進制數據形式

3.    存儲持久數據的文件容器;

4.    遠程過程調用(RPC);

5.    簡單的動態語言結合功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章