一、Hadoop專案簡介
1. Hadoop是什麼
Hadoop是一個適合大資料的分散式儲存與計算平臺。
作者:Doug Cutting;Lucene,Nutch。
受Google三篇論文的啟發
2. Hadoop核心專案
HDFS: Hadoop Distributed File System 分散式檔案系統
MapReduce:平行計算框架
3. Hadoop架構
3.1 HDFS架構
(1) 主從結構
•主節點,只有一個: namenode
•從節點,有很多個: datanodes
(2) namenode負責:管理
•接收使用者操作請求,可以實現對檔案系統的操作(一般的操作方式有兩種,命令列方式和Java API方式)
•維護檔案系統的目錄結構(用來對檔案進行分類管理)。
•管理檔案與block之間關係(檔案被劃分成了Block,Block屬於哪個檔案,以及Block的順序好比電影剪輯),block與datanode之間關係。
(3) datanode負責:儲存
•儲存檔案
•檔案被分成block(block一般是以64M來劃分,但每個Block塊所佔用的空間是檔案實際的空間)儲存在磁碟上,將大資料劃分成相對較小的block塊,這樣可以充分利用磁碟空間,方便管理。
•為保證資料安全,檔案會有多個副本(就好比配鑰匙,都是為了預防丟失),這些副本會一塊一塊複製,分別儲存在不同的DataNode上。
3.2 MapReduce架構
(1)主從結構
•主節點,只有一個: JobTracker
•從節點,有很多個: TaskTrackers
(2)JobTracker 負責:
•接收客戶提交的計算任務
•把計算任務分給TaskTrackers執行
•監控TaskTracker的執行情況
(3)TaskTrackers負責:
•執行JobTracker分配的計算任務
4. Hadoop的特點
(1) 擴容能力(Scalable):能可靠地(reliably)儲存和處理千兆位元組(PB)資料。
(2) 成本低(Economical):可以通過普通機器組成的伺服器群來分發以及處理資料。這些伺服器群總計可達數千個節點。
(3) 高效率(Efficient):通過分發資料,hadoop可以在資料所在的節點上並行地處理它們,這使得處理非常的快速。
(4) 可靠性(Reliable):hadoop能自動地維護資料的多份副本,並且在任務失敗後能自動地重新部署計算任務。
5. Hadoop叢集的物理分佈
如圖1.1
這裡是一個由兩個機架組成的機群,圖中有兩種顏色綠色和黃色,不難看出黃色為主節點(Master),NameNode和JobTracker都獨佔一個伺服器,只有一個是唯一,綠色為從節點(Slave)有多個。而上面所說的JobTracker、NameNode,DataNode,TaskTracker本質都是Java程式,這些程式進行相互呼叫來實現各自的功能,而主節點與從節點一般執行在不同的java虛擬機器之中,那麼他們之間的通訊就是跨虛擬機器的通訊。
這些機群上放的都是伺服器,伺服器本質上就是物理硬體,伺服器是主節點還是從節點,主要看是跑的是什麼角色或程式,如果上面跑的是Tomcat他就是WEB伺服器,跑的是資料庫就是資料庫伺服器,所以當伺服器上跑的是NameNode或JobTracker是就是主節點,跑的是DataNode或TaskTracker就是從節點。
為了實現高速通訊,我們一般都使用區域網,在內網中可使用千兆網路卡、高頻交換機、光纖等。
6. Hadoop機群的單節點物理結構
二、Hadoop生態圈
1、Hadoop生態系統概況
Hadoop是一個能夠對大量資料進行分散式處理的軟體框架。具有可靠、高效、可伸縮的特點。Hadoop的核心是HDFS和Mapreduce,hadoop2.0還包括YARN。下圖為hadoop的生態系統:
圖 3 Hadoop生態圈
2、HDFS(Hadoop分散式檔案系統)
源自於Google的GFS論文,發表於2003年10月,HDFS是GFS克隆版。是Hadoop體系中資料儲存管理的基礎。它是一個高度容錯的系統,能檢測和應對硬體故障,用於在低成本的通用硬體上執行。HDFS簡化了檔案的一致性模型,通過流式資料訪問,提供高吞吐量應用程式資料訪問功能,適合帶有大型資料集的應用程式。
圖4
Client:切分檔案;訪問HDFS;與NameNode互動,獲取檔案位置資訊;與DataNode互動,讀取和寫入資料。
NameNode:Master節點,在hadoop1.X中只有一個,管理HDFS的名稱空間和資料塊對映資訊,配置副本策略,處理客戶端請求。
DataNode:Slave節點,儲存實際的資料,彙報儲存資訊給NameNode。
Secondary NameNode:輔助NameNode,分擔其工作量;定期合併fsimage和fsedits,推送給NameNode;緊急情況下,可輔助恢復NameNode,但Secondary NameNode並非NameNode的熱備。
3、Mapreduce(分散式計算框架)
源自於google的MapReduce論文,發表於2004年12月,Hadoop MapReduce是google MapReduce 克隆版。MapReduce是一種分散式計算模型,用以進行大資料量的計算。其中Map,對資料集上的獨立元素進行指定的操作,生成鍵-值對形式中間結果。Reduce,則對中間結果中相同“鍵”的所有“值”進行規約,以得到最終結果。MapReduce這樣的功能劃分,非常適合在大量計算機組成的分散式並行環境裡進行資料處理。
JobTracker:Master節點,只有一個,管理所有作業,作業/任務的監控、錯誤處理等;將任務分解成一系列任務,並分派給TaskTracker。
TaskTracker:Slave節點,執行Map Task和Reduce Task;並與JobTracker互動,彙報任務狀態。
Map Task:解析每條資料記錄,傳遞給使用者編寫的map(),並執行,將輸出結果寫入本地磁碟(如果為map-only作業,直接寫入HDFS)。
Reducer Task:從Map Task的執行結果中,遠端讀取輸入資料,對資料進行排序,將資料按照分組傳遞給使用者編寫的reduce函式執行。
Mapreduce處理流程,以wordCount為例:
4、Hive(基於Hadoop的資料倉儲)
由facebook開源,最初用於解決海量結構化的日誌資料統計問題。Hive定義了一種類似SQL的查詢語言(HQL), 將SQL轉化為MapReduce任務在Hadoop上執行。通常用於離線分析。
5、Hbase(分散式列存資料庫)
6、Zookeeper(分散式協作服務)
7、Sqoop(資料同步工具)
8、Pig(基於Hadoop的資料流系統)
9、Mahout(資料探勘演算法庫)
10、Flume(日誌收集工具)
三、使用eclipse檢視hadoop原始碼
- Hadoop原始碼放在hadoop目錄中的SRC中;
- 將其匯入到Eclipse;
- 匯入jar包(ant中的lib目錄,hadoop目錄,hadoop lib目錄)
詳見:http://pan.baidu.com/s/1eQCcdcm
注本文部分摘錄自:http://blog.csdn.net/woshiwanxin102213/article/details/19688393