Hadoop簡紹

studywell發表於2015-04-17
http://www.cnblogs.com/skyme/archive/2011/10/26/2223984.html
http://blessht.iteye.com/blog/2095675

參考了以上鍊接內容


Apache Hadoop是一款支援資料密集型分散式應用並以Apache 2.0許可協議釋出的開源軟體框架。它支援在商品硬體構建的大型叢集上執行的應用程式。Hadoop是根據Google公司發表的MapReduce和Google檔案系統的論文自行實作而成。

Hadoop框架透明地為應用提供可靠性和資料移動。它實現了名為MapReduce的程式設計正規化:應用程式被分割成許多小部分,而每個部分都能在叢集中的任意節點上執行或重新執行。此外,Hadoop還提供了分散式檔案系統,用以儲存所有計算節點的資料,這為整個叢集帶來了非常高的頻寬。MapReduce和分散式檔案系統的設計,使得整個框架能夠自動處理節點故障。它使應用程式與成千上萬的獨立計算的電腦和PB級的資料。現在普遍認為整個Apache Hadoop“平臺”包括Hadoop核心、MapReduce、Hadoop分散式檔案系統(HDFS)以及一些相關專案,有Apache Hive和Apache HBase等等。


主要子專案
 Hadoop Common:在0.20及以前的版本中,包含HDFS、MapReduce和其他專案公共內容,從0.21開始HDFS和MapReduce被分離為獨立的子專案,其餘內容為Hadoop Common
 HDFS:Hadoop分散式檔案系統(Distributed File System)-HDFS(Hadoop Distributed File System)
 MapReduce:平行計算框架,0.20前使用org.apache.hadoop.mapred舊介面,0.20版本開始引入org.apache.hadoop.mapreduce的新API

相關專案
    Apache HBase:分散式NoSQL列資料庫,類似谷歌公司BigTable。
    Apache Hive:構建於hadoop之上的資料倉儲,透過一種類SQL語言HiveQL為使用者提供資料的歸納、查詢和分析等功能。Hive最初由Facebook貢獻。
    Apache Mahout:機器學習演算法軟體包。
    Apache Sqoop:結構化資料(如關聯式資料庫)與Apache Hadoop之間的資料轉換工具。
    Apache ZooKeeper:分散式鎖設施,提供類似Google Chubby的功能,由Facebook貢獻。
    Apache Avro:新的資料序列化格式與傳輸工具,將逐步取代Hadoop原有的IPC機制。

Hadoop歷史

  雛形開始於2002年的Apache的Nutch,Nutch是一個開源Java實現的搜尋引擎。它提供了我們執行自己的搜尋引擎所需的全部工具。包括全文搜尋和Web爬蟲。
  隨後在2003年Google發表了一篇技術學術論文谷歌檔案系統(GFS)。GFS也就是google File System,google公司為了儲存海量搜尋資料而設計的專用檔案系統。
  2004年Nutch創始人Doug Cutting基於Google的GFS論文實現了分散式檔案儲存系統名為NDFS。
  2004年Google又發表了一篇技術學術論文MapReduce。MapReduce是一種程式設計模型,用於大規模資料集(大於1TB)的並行分析運算。
  2005年Doug Cutting又基於MapReduce,在Nutch搜尋引擎實現了該功能。
  2006年,Yahoo僱用了Doug Cutting,Doug Cutting將NDFS和MapReduce升級命名為Hadoop,Yahoo開建了一個獨立的團隊給Goug Cutting專門研究發展Hadoop。
  不得不說Google和Yahoo對Hadoop的貢獻功不可沒。

Hadoop核心

   Hadoop的核心就是HDFS和MapReduce,而兩者只是理論基礎,不是具體可使用的高階應用,Hadoop旗下有很多經典子專案,比如HBase、Hive等,這些都是基於HDFS和MapReduce發展出來的。要想了解Hadoop,就必須知道HDFS和MapReduce是什麼。

HDFS
  HDFS(Hadoop Distributed File System,Hadoop分散式檔案系統),它是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的資料訪問,適合那些有著超大資料集(large data set)的應用程式。

HDFS的設計特點是:
1、大資料檔案,非常適合上T級別的大檔案或者一堆大資料檔案的儲存,如果檔案只有幾個G甚至更小就沒啥意思了。
2、檔案分塊儲存,HDFS會將一個完整的大檔案平均分塊儲存到不同計算器上,它的意義在於讀取檔案時可以同時從多個主機取不同區塊的檔案,多主機讀取比單主機讀取效率要高得多得都。
3、流式資料訪問,一次寫入多次讀寫,這種模式跟傳統檔案不同,它不支援動態改變檔案內容,而是要求讓檔案一次寫入就不做變化,要變化也只能在檔案末新增內容。
4、廉價硬體,HDFS可以應用在普通PC機上,這種機制能夠讓給一些公司用幾十臺廉價的計算機就可以撐起一個大資料叢集。
5、硬體故障,HDFS認為所有計算機都可能會出問題,為了防止某個主機失效讀取不到該主機的塊檔案,它將同一個檔案塊副本分配到其它某幾個主機上,如果其中一臺主機失效,可以迅速找另一塊副本取檔案。

HDFS的關鍵元素:
Block:將一個檔案進行分塊,通常是64M。
NameNode:儲存整個檔案系統的目錄資訊、檔案資訊及分塊資訊,這是由唯一一臺主機專門儲存,當然這臺主機如果出錯,NameNode就失效了。在Hadoop2.*開始支援activity-standy模式----如果主NameNode失效,啟動備用主機執行NameNode。
DataNode:分佈在廉價的計算機上,用於儲存Block塊檔案。

MapReduce
  通俗說MapReduce是一套從海量源資料提取分析元素最後返回結果集的程式設計模型,將檔案分散式儲存到硬碟是第一步,而從海量資料中提取分析我們需要的內容就是MapReduce做的事了。
  MapReduce的基本原理就是:將大的資料分析分成小塊逐個分析,最後再將提取出來的資料彙總分析,最終獲得我們想要的內容。當然怎麼分塊分析,怎麼做Reduce操作非常複雜,Hadoop已經提供了資料分析的實現,我們只需要編寫簡單的需求命令即可達成我們想要的資料。



hadoop框架

Hadoop使用主/從(Master/Slave)架構,主要角色有NameNode,DataNode,secondary NameNode,JobTracker,TaskTracker組成。
其中NameNode,secondary NameNode,JobTracker執行在Master節點上,DataNode和TaskTracker執行在Slave節點上。

1,NameNode
NameNode是HDFS的守護程式,負責記錄檔案是如何分割成資料塊的,以及這些資料塊被儲存到哪些資料節點上。它的功能是對記憶體及I/O進行集中管理。

2,DataNode
叢集中每個從伺服器都執行一個DataNode後臺程式,後臺程式負責把HDFS資料塊讀寫到本地檔案系統。需要讀寫資料時,由NameNode告訴客戶端去哪個DataNode進行具體的讀寫操作。

3,Secondary NameNode
Secondary NameNode是一個用來監控HDFS狀態的輔助後臺程式,如果NameNode發生問題,可以使用Secondary NameNode作為備用的NameNode。

4,JobTracker
JobTracker後臺程式用來連線應用程式與Hadoop,使用者應用提交到叢集后,由JobTracker決定哪個檔案處理哪個task執行,一旦某個task失敗,JobTracker會自動開啟這個task。

4,TaskTracker
TaskTracker負責儲存資料的DataNode相結合,位於從節點,負責各自的task。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-1583269/,如需轉載,請註明出處,否則將追究法律責任。

相關文章