hadoop學習筆記(3) 初識Hadoop

前兩節主要介紹了hadoop運行環境和開發環境的搭建,有了這個,我們就可以開始hadoop的學習了,最近買了兩本hadoop的書,先是買了一本《hadoop權威指南》,看了幾天,感覺大部分都是在講理論,不太適合作爲hadoop入門的書籍,所以又買了本國內劉鵬寫的《實戰hadoop》,這本書到是寫的比較淺顯易懂,尤其是操作性比較強,個人覺得比較適合作爲hadoop的入門書籍。這裏就記錄一下我學習hadoop的筆記吧。

1.hadoop的產生

首先,hadoop是一個分佈式系統基礎架構,它可以讓用戶在不瞭解分佈式底層細節的情況下,充分利用集羣的威力,開發分佈式程序,實現高速運算和存儲。

2003年和2004年,google先後發表兩篇論文《The Google File System》和《MapReduce: Simplified Data Processing on Large Clusters》。在這兩篇論文的驅動下,Hadoop創始人DougCutting爲改善Nutch的性能,實現了DFS和MapReduce機制並將其成功應用於Nutch,說到Nutch,不得不說一說Lucene,Lucene是一個Java高性能全文索引引擎工具包,它可以方便地嵌入到各種實際應用中實現全文索引搜索功能,而Nutch是一個應用程序,它是一個以Lucene爲基礎實現的搜索引擎應用。Hadoop就是從Nutch項目中分離出來的一個專注於DFS和MapReduce的開源項目。

2.hadoop架構

hadoop是一個能夠對大量數據進行分佈式處理的軟件框架,它主要包括兩部分:用於分佈式計算的MapReduce和用於分佈式存儲的HDFS。在分佈式計算和分佈式存儲兩個方面,Hadoop都採用了主/從(Master/Slave)架構,如下圖所示:


要在一個集羣中運行hadoop,需要在集羣中運行一系列的後臺程序:NameNode、DataNode、Secondary NameNode、JobTracker、TaskTracker。其中,NameNode、DataNode、Secondary NameNode用於分佈式存儲,JobTracker、TaskTracker用於分佈式計算(一個準備提交執行的應用程序成爲作業(job),而從一個作業劃分出來的、運行於各計算節點的工作單元稱爲任務(task))。另外,如上圖所示,NameNode、Secondary NameNode、JobTracker運行於Master節點上,每個Slave節點上都部署有一個DataNode和TaskTracker,以便於這個Slave服務器上運行的數據處理程序能儘可能直接處理本機的數據。

下面分別介紹這些後臺程序:

1)NameNode

NameNode是HDFS的守護程序,負責記錄文件是如何分割成數據塊的,以及這些數據塊分別被存儲到哪些數據節點上。它的主要功能是對內存和I/O進行集中管理。

一般來說,NameNode所在的服務器不存儲任何用戶信息或執行計算任務,以避免這些程序降低服務器的性能。如果從服務器宕機,Hadoop集羣仍舊可以繼續運轉。但是,由於NameNode是Hadoop集羣中的一個單點,如果NameNode服務器宕機,整個系統將無法運行。

2)DataNode

集羣中的每個從服務器都運行一個DataNode後臺程序,這個後臺程序負責把HDFS數據塊讀寫到本地的文件系統。當需要通過客戶端讀/寫某個數據時,先由NameNode告訴客戶端去哪個DataNode進行具體的讀/寫操作,然後,客戶端直接與這個DataNode服務器上的後臺程序進行通信,並對相關的數據塊進行讀/寫操作。

3)Secondary NameNode

Secondary NameNode是一個用來監控HDFS狀態的輔助後臺程序,就像NameNode一樣,每個集羣都有一個Secondary NameNode,並且部署在一臺單獨的服務器上。Secondary NameNode不同於NameNode,它不接收或記錄任何實時的數據變化,但是,它會於NameNode進行通信,以便定期地保存HDFS元數據的快照。由於NameNode是單點的,通過SecondaryNameNode的快照功能,可以將NameNode的宕機時間和數據損失降低到最小。同時,如果NameNode發生問題,Secondary NameNode可以及時地作爲備用NameNode使用。

4)JobTracker

JobTracker後臺程序用來連接應用程序與hadoop。用戶代碼提交到集羣以後,由JobTracker決定哪個文件將被處理,並且爲不同的task分配節點。同時,它還監控所有運行的task,一旦某個task失敗了,JobTracker就會自動重新開啓這個task,在大多數情況下,這個task會被放在不同的節點上。每個hadoop集羣只有一個JobTracker,一般運行在集羣的Master上。

5)TaskTracker

TaskTracker與負責存儲數據的DataNode相結合。其處理結構上也遵循主/從架構,JobTracker位於主節點,統領MapReduce工作;而TaskTrackers位於從節點,獨立管理各自的Task。每個TaskTracker負責獨立執行具體的Task,而JobTracker負責分配task。雖然每個從節點僅有唯一的一個TaskTracker,但是每個TaskTracker可以產生多個Java虛擬機(JVM),用於並行處理多個map以及reduce任務。TaskTracker的一個重要職責就是與JobTracker交互,如果JobTracker無法準時獲取TaskTracker提交的信息,JobTracker就判定TaskTracker已經崩潰,並將任務分配給其他節點處理。

3.hadoop族羣

整個hadoop族羣包括很多個項目,如下:

Common:是整個hadoop項目的核心,包括一組分佈式文件系統和通用I/O的組件與接口(序列化、java RPC和持久化數據結構)。

MapReduce:大型數據的分佈式並行編程模型和程序執行框架,Google的MapReduce的開源實現。

HDFS:嚮應用程序提供高吞吐量訪問的文件系統,是GFS的開源實現。

Avro:一種支持高效、跨語言的RPC以及永久存儲數據的序列化實現。

Pig:一種數據流語言和運行環境,用以檢索非常大的數據集,運行在MapReduce和HDFS的集羣上。

Hive:一個分佈式、按列存儲的數據倉庫。Hive管理HDFS中存儲的數據,並提供基於SQL的查詢語言(由運行時引擎翻譯成MapReduce作業)用以查詢數據。

HBase:一個分佈式、按列存儲數據庫。HBase使用HDFS作爲底層存儲,同時支持MapReduce的批量式計算和點查詢(隨機讀取)。

ZooKeeper:一個分佈式、可用性高的協調服務。ZooKeeper提供分佈式鎖之類的基本服務用於構建分佈式應用。

Cassandra:是一套開源分佈式NoSQL數據庫系統,它最初由Facebook開發,用於存儲收件箱等簡單格式數據,集Google BigTable的數據模型與Amazon Dynamo的完全分佈式的架構於一身。

Mahout:是一個在Hadoop上運行的機器學習類庫(例如分類和聚類算法)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章