林琳
【摘 要】Hadoop的兩大核心是HDFS和YARN。Hadoop是一個軟件框架,能夠?qū)A繑?shù)據(jù)進行分布式處理。Hadoop的特點是可靠、高效、可伸縮。
【關(guān)鍵詞】Hadoop;HDFS;YARN
0 引言
從誕生至今,Hadoop已經(jīng)發(fā)展成為一個龐大的與大數(shù)據(jù)相關(guān)的軟件生態(tài)系統(tǒng)。本文收集整理了跟Hadoop相關(guān)的Apache下的開源項目,主要是對 Hadoop生態(tài)系統(tǒng)有個初步的認(rèn)識。那么Hadoop生態(tài)系統(tǒng)都包括哪些內(nèi)容呢?
Hadoop生態(tài)系統(tǒng)主要包括分布式文件管理系統(tǒng)HDFS,分布式計算框架MapReduce,分布式協(xié)作服務(wù)Zookeeper,實時分布式數(shù)據(jù)庫Hbase,數(shù)據(jù)倉庫Hive,數(shù)據(jù)流處理Pig,數(shù)據(jù)挖掘Mahout,日志收集工具Flume,數(shù)據(jù)庫ETL工具Sqoop,安裝、部署、配置和管理工具Ambari。
Ambari(安裝、部署、配置和管理工具)
Zookeeper (分布式協(xié)作服務(wù))
Hive(數(shù)據(jù)倉庫)
Pig(數(shù)據(jù)流處理)
Mahout(數(shù)據(jù)挖掘庫)
Flume(日志收集工具)
Hbase(實時分布式數(shù)據(jù)庫)
MapReduce(分布式計算框架)
Sqoop(數(shù)據(jù)庫ETL工具)
HDFS(分布式文件系統(tǒng))
1 HDFS(Hadoop分布式文件系統(tǒng))
HDFS全稱為Hadoop Distributed File System,這個概念源自于Google發(fā)表于2003年10月的GFS論文,HDFS是GFS克隆版,Hadoop和 HDFS 都是從GFS中派生的。
HDFS是一個高度容錯的系統(tǒng),不僅可以在低成本的通用硬件上運行,還能檢測和應(yīng)對硬件故障,是Hadoop數(shù)據(jù)存儲管理的基礎(chǔ)。
通過流式數(shù)據(jù)訪問,HDFS提供高吞吐量應(yīng)用程序數(shù)據(jù)訪問功能,為跨多個機器存儲大型文件提供了一種解決方案,適合帶有大型數(shù)據(jù)集的應(yīng)用程序。
NameNode:是一個Master節(jié)點。在Hadoop 1.0中,NameNode是HDFS 集群的一個單點故障。Hadoop 2.0出現(xiàn)后,HDFS利用Zookeeper解決了這個問題。NameNode的主要功能是處理客戶端請求,管理HDFS的名稱空間和數(shù)據(jù)塊映射信息以及配置副本策略。
Secondary NameNode:Secondary NameNode并非NameNode必備。它只是用來輔助NameNode,分擔(dān)其工作量的,在某些緊急情況下,可輔助恢復(fù)NameNode。
DataNode:DataNode是一個 Slave節(jié)點,用來存儲數(shù)據(jù),匯報存儲信息給NameNode。
Client:Client的作用是切分文件和訪問HDFS。它與NameNode交互時,能夠獲取文件位置信息,與DataNode交互,能夠讀取和寫入數(shù)據(jù)。
2 Mapreduce(分布式計算框架)
MapReduce是一種是使用集群的并行、分布式算法處理大數(shù)據(jù)集的可編程計算模型,用以解決海量數(shù)據(jù)的計算問題。在大型集群中能夠起到簡化數(shù)據(jù)處理的作用。MapReduce遵循YARN的框架協(xié)議,能夠在YARN上可以運行。
在MapReduce中,Map負(fù)責(zé)對數(shù)據(jù)集上的獨立元素進行指定操作,形成中間結(jié)果鍵值對。Reduce負(fù)責(zé)對中間結(jié)果中相同“鍵”的所有“值”進行規(guī)約,得到最終結(jié)果。MapReduce這樣的功能劃分,非常適合在分布式并行環(huán)境里進行數(shù)據(jù)處理。
JobTracker:唯一一個Master節(jié)點,管理所有作業(yè)和錯誤處理,將任務(wù)分解成一系列子任務(wù),并分派給TaskTracker。
TaskTracker:Slave節(jié)點,向JobTracker匯報任務(wù)狀態(tài)。
Map Task:解析每條數(shù)據(jù)記錄,傳遞給用戶編寫的map并執(zhí)行,將輸出結(jié)果寫入本地磁盤。
Reducer Task:從Map Task的執(zhí)行結(jié)果中,遠程讀取輸入數(shù)據(jù),對數(shù)據(jù)進行排序后分組傳遞給用戶編寫的reduce函數(shù)執(zhí)行。
3 Hbase(分布式列存數(shù)據(jù)庫)
HBase是一個構(gòu)建在HDFS上的分布式列存儲系統(tǒng)。HBase利用MapReduce來處理海量數(shù)據(jù),將數(shù)據(jù)存儲和并行計算完美地結(jié)合在一起。Bigtable使用Chubby服務(wù),而HBase利用Zookeeper作為對應(yīng)。和傳統(tǒng)關(guān)系數(shù)據(jù)庫不同,HBase采用了BigTable的數(shù)據(jù)模型,增強的稀疏排序映射表,是一個針對結(jié)構(gòu)化數(shù)據(jù)的動態(tài)模式數(shù)據(jù)庫,具有可伸縮、高可靠、高性能、分布式和面向列的特性。從邏輯上講,HBase將數(shù)據(jù)按照表、行和列進行存儲。與hadoop一樣,Hbase目標(biāo)主要依靠橫向擴展,通過不斷增加服務(wù)器來增加計算和存儲能力。HBase是Hadoop生態(tài)系統(tǒng)中的重要一員,主要用于海量結(jié)構(gòu)化數(shù)據(jù)存儲。
HBase提供了對大規(guī)模數(shù)據(jù)的隨機、實時讀寫訪問。
Hbase的數(shù)據(jù)模型
Schema-->Table-->Column
Family-->Column-->RowKey-->TimeStamp-->Value
RowKey:是表中每條記錄的“主鍵”,方便快速查找。
Column Family:列族,包含一個或者多個相關(guān)列。
Column:屬于某一個columnfamily,每條記錄可動態(tài)添加。
Version Number:類型為Long,默認(rèn)值是系統(tǒng)時間戳,可由用戶自定義。
Value(Cell):Byte array
4 Zookeeper(分布式協(xié)作服務(wù))
Zookeeper是一個針對大型分布式系統(tǒng)的可靠協(xié)調(diào)系統(tǒng),用來解決分布式環(huán)境下的數(shù)據(jù)管理問題:如狀態(tài)同步,集群管理,配置維護、名字服務(wù)、分布式同步等。
ZooKeeper能夠配置信息維護,包括封裝關(guān)鍵服務(wù),提供簡單易用的接口和功能穩(wěn)定的系統(tǒng)。在一個分布式的環(huán)境中,我們需要一個 Master 實例或存儲一些配置信息,來確保文件寫入的一致性等。Zookeeper提供了這樣一個高效可靠的協(xié)同工作系統(tǒng)。
Zookeeper的作用是,通過選舉,使集群中始終只有一個Master存在,實時監(jiān)控Region server的上線和下線信息。并實時通知給Master。
5 Hive(基于Hadoop的數(shù)據(jù)倉庫)
Hive定義了一種類似SQL的查詢語言(HQL),將SQL轉(zhuǎn)化為能在Hadoop上執(zhí)行的MapReduce任務(wù)。通常用于數(shù)據(jù)匯總,查詢和離線分析。最初用于解決日志數(shù)據(jù)統(tǒng)計問題。
6 Pig(基于Hadoop的數(shù)據(jù)流系統(tǒng))
Pig在 Hadoop 分布式文件系統(tǒng),HDFS,MapReduce中都能夠運行,使用 MapReduce來執(zhí)行數(shù)據(jù)處理。Pig提供了一個能夠在Hadoop并行執(zhí)行數(shù)據(jù)流的引擎。Pig 用Pig Latin語言來表達數(shù)據(jù)流,包括大量的傳統(tǒng)數(shù)據(jù)操作,也可以讓用戶開發(fā)自己的函數(shù),查看,處理和編寫數(shù)據(jù)。也可以編寫一個或者多個的 MapReduce 作業(yè),然后執(zhí)行。
7 Mahout(數(shù)據(jù)挖掘算法庫)
Mahout是一種基于MapReduce的機器學(xué)習(xí)庫和數(shù)學(xué)庫。
Mahout旨在創(chuàng)建一些可擴展的經(jīng)典算法的實現(xiàn),能夠幫助開發(fā)人員更方便快捷地創(chuàng)建智能應(yīng)用程序。Mahout現(xiàn)在已經(jīng)包含了聚類、分類、協(xié)同過濾和頻繁集挖掘等數(shù)據(jù)挖掘方法。
Mahout起源于2008年,最初是Apache下的一個的子項目,在極短的時間內(nèi)飛速發(fā)展,現(xiàn)在已經(jīng)是Apache的頂級項目之一。
8 Sqoop(數(shù)據(jù)同步工具)
Sqoop是SQL-to-Hadoop的縮寫,主要用于在傳統(tǒng)數(shù)據(jù)庫和Hadoop之間進行數(shù)據(jù)傳輸。Sqoop充分利用了Mapreduce的并行化和容錯性,來進行數(shù)據(jù)的導(dǎo)入和導(dǎo)出,通常用于進行離線分析。
9 Flume(日志收集工具)
Flume是一個可擴展、開源的、適合復(fù)雜環(huán)境的海量日志收集系統(tǒng)。它具有分布式、高可靠、高容錯、易擴展的優(yōu)點。
它將數(shù)據(jù)從產(chǎn)生、傳輸、處理并最終寫入目標(biāo)的路徑的過程抽象為數(shù)據(jù)流,F(xiàn)lume支持收集各種不同協(xié)議數(shù)據(jù)。同時提供對日志數(shù)據(jù)進行簡單處理的能力,如過濾、格式轉(zhuǎn)換等。
【參考文獻】
[1]陸嘉恒.Hadoop實戰(zhàn)[M].機械工業(yè)出版社,2011,10.
[2]Tom White.Hadoop:The Definitive Guide[M].東南大學(xué)出版社,2011,5.
[責(zé)任編輯:田吉捷]