Hadoop日記Day1---Hadoop介紹


一、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

image圖1 Hadoop集群的物理分布

這里是一個由兩個機架組成的機群,圖中有兩種顏色綠色和黃色,不難看出黃色為主節點(Master),NameNode和JobTracker都獨占一個服務器,只有一個是唯一,綠色為從節點(Slave)有多個。而上面所說的JobTracker、NameNode,DataNode,TaskTracker本質都是Java進程,這些進程進行相互調用來實現各自的功能,而主節點與從節點一般運行在不同的java虛擬機之中,那么他們之間的通信就是跨虛擬機的通信。

這些機群上放的都是服務器,服務器本質上就是物理硬件,服務器是主節點還是從節點,主要看是跑的是什么角色或進程,如果上面跑的是Tomcat他就是WEB服務器,跑的是數據庫就是數據庫服務器,所以當服務器上跑的是NameNode或JobTracker是就是主節點,跑的是DataNode或TaskTracker就是從節點。

為了實現高速通信,我們一般都使用局域網,在內網中可使用千兆網卡、高頻交換機、光纖等。

6. Hadoop機群的單節點物理結構

image圖2 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交互,讀取和寫入數據。

NameNodeMaster節點,在hadoop1.X中只有一個,管理HDFS的名稱空間和數據塊映射信息,配置副本策略,處理客戶端請求。

DataNodeSlave節點,存儲實際的數據,匯報存儲信息給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這樣的功能划分,非常適合在大量計算機組成的分布式並行環境里進行數據處理。

 

JobTrackerMaster節點,只有一個,管理所有作業,作業/任務的監控、錯誤處理等;將任務分解成一系列任務,並分派給TaskTracker。

TaskTrackerSlave節點,運行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(分布式列存數據庫)

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

6、Zookeeper(分布式協作服務)

        源自Google的Chubby論文,發表於2006年11月,Zookeeper是 Chubby克隆版。解決分布式環境下的數據管理問題:統一命名,狀態同步,集群管理,配置同步等。

7、Sqoop(數據同步工具)

       Sqoop是SQL-to-Hadoop的縮寫,主要用於 傳統數據庫和Hadoop之前傳輸數據。數據的導入和導出本質上是Mapreduce程序,充分利用了MR的並行化和容錯性。

8、Pig(基於Hadoop的數據流系統)

      由yahoo!開源,設計動機是提供一種基於MapReduce的ad-hoc(計算在query時發生)數據分析工具,定義了一種數據流語言—Pig Latin, 將腳本轉換為MapReduce任務在Hadoop上執行。通常用於進行離線分析。

9、Mahout(數據挖掘算法庫)

       Mahout起源於2008年,最初是Apache Lucent的子項目,它在極短的時間內取得了長足的發展,現在是Apache的頂級項目。 Mahout 的主要目標是創建一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地創建智能應用程序。Mahout現在已經包含了聚類、分類、推 薦引擎(協同過濾)和頻繁集挖掘等廣泛使用的數據挖掘方法。除了算法,Mahout還包含數據的輸入/輸出工具、與其他存儲系統(如數據庫、 MongoDB 或Cassandra)集成等數據挖掘支持架構。

10、Flume(日志收集工具)

       Cloudera開源的 日志收集系統,具有分布式、高可靠、高容錯、易於定制和擴展的特點。它將數據從產生、傳輸、處理並最終寫入目標的路徑的過程抽象為數據流,在具體的數據流中,數據源支持在Flume中定制數據發送方,從而支持收集各種不同協 議數據。同時,Flume數據流提供對日志數據進行簡單處理的能力,如過濾、格式轉換等。此外,Flume還具有能夠將日志寫往各種數據目標(可定制)的能力。總的來說,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


免責聲明!

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



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