1、Hadoop簡介html
Hadoop最先起源於Nutch。Nutch是一個開源的網絡搜索引擎,由Doug Cutting於2002年建立。Nutch的設計目標是構建一個大型的全網搜索引擎,包括網頁抓取、索引,查詢等功能,隨着網頁抓取數量的增長,遇到嚴重的可擴展問題,即不能解決數十億網頁的存儲和索引的問題,以後,Google發佈的兩篇論文(The Google File System和MapReduce: Simplified Data Processing on Large Clusters)爲該問題提供了可行的解決方案。node
Hadoop是一個分佈式系統基礎架構,由Apache基金會開發。用戶能夠在不瞭解分佈式底層細節的狀況下,開發分佈式程序。充分利用集羣的威力高速運算和存儲。Hadoop實現了一個分佈式文件系統(Hadoop Distributed File System),簡稱HDFS。HDFS有着高容錯性的特色,而且設計用來部署在低廉的(low-cost)硬件上。並且它提供高傳輸率(high throughput)來訪問應用程序的數據,適合那些有着超大數據集(large data set)的應用程序,以流的形式訪問(streaming access)文件系統中的數據。服務器
2、Hadoop的優勢網絡
Hadoop是一個可以對大量數據進行分佈式處理的軟件框架。可是 Hadoop 是以一種可靠、高效、可伸縮的方式進行處理的。Hadoop 是可靠的,由於它假設計算元素和存儲會失敗,所以它維護多個工做數據副本,確保可以針對失敗的節點從新分佈處理。Hadoop 是高效的,由於它以並行的方式工做,經過並行處理加快處理速度。Hadoop 仍是可伸縮的,可以處理 PB 級數據。此外,Hadoop 依賴於社區服務器,所以它的成本比較低,任何人均可以使用。架構
Hadoop是一個可以讓用戶輕鬆架構和使用的分佈式計算平臺。用戶能夠輕鬆地在Hadoop上開發和運行處理海量數據的應用程序。它主要有如下幾個優勢:併發
⒈高可靠性。Hadoop按位存儲和處理數據的能力值得人們信賴。框架
⒉高擴展性。Hadoop是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇能夠方便地擴展到數以千計的節點中。分佈式
⒊高效性。Hadoop可以在節點之間動態地移動數據,並保證各個節點的動態平衡,所以處理速度很是快。oop
⒋高容錯性。Hadoop可以自動保存數據的多個副本,而且可以自動將失敗的任務從新分配。大數據
Hadoop帶有用 Java 語言編寫的框架,所以運行在 Linux 生產平臺上是很是理想的。Hadoop 上的應用程序也可使用其餘語言編寫,好比 C、C++。
三 Hadoop架構
Hadoop由兩部分組成,分別是分佈式文件系統(HDFS)和分佈式計算框架MapReduce。其中分佈式文件系統(DFS)主要用於大規模數據的分佈式存儲,而MapReduce則構建在分佈式文件系統之上,對於存儲在分佈式文件系統中的數據進行分佈式計算。
在Hadoop中,MapReduce底層的分佈式文件系統是獨立模塊,用戶能夠按照約定的一套接口實現本身的分佈式文件系統,存儲在該文件系統上的數據即可以被MapReduce處理。Hadoop默認使用的是分佈式文件系統是(Hadoop Distributed File System,Hadoop分佈式文件系統),它與MapReduce框架緊密結合。下面首先介紹HDFS,而後介紹MapReduce計算框架。
一、HDFS架構
HDFS是一個具備高度容錯性的分佈式文件系統,適合部署在廉價的機器上,HDFS能提供高吞吐量的數據訪問,很是適合大規模數據集上的應用。架構圖 以下圖所示:
Hadoop部署架構圖
HDFS的架構整體上採用了m/S(master/slave)架構,主要有如下幾個組件組成:Client、NameNode、Secondary NodeNode和DataNode。
(1)Client
Client(用戶)經過NameNode和DataNode交互訪問HDFS中的文件。Client提供一個相似POSIX的文件系統接口工用戶調用。
(2)NameNode
整個Hadoop集羣中只有一個NameNode.它是整個系統的中樞,它負責管理HDFS的目錄樹和相關文件 元數據信息。這些信息是以「fsimage(HDFS元數據鏡像文件)和Editlog(HDFS文件改動日誌)兩個文件形式存放在本地磁盤,當HDFS重啓時沖洗構造出來的。NameNode還負責監控各個DataNode的健康狀態,一旦發現某個DataNode損壞,則將DataNode移出HDFS並從新備份其上面的數據。
(3)Secondary NameNode
Secondary Namenode 最重要的任務並非爲NameNode元數據進行熱備份,而是按期合併fsimage和edits日誌,並傳輸給NameNode,爲了減輕NameNode壓力,NameNode本身並不會合併fsimage和edits,並將文件存儲到磁盤上,而是交由Secondary NameNode完成。
(4)DataNode
每一個Slave節點上安裝一個DataNode,它負責實際的數據存儲,並將數據信息按期彙報給NameNode。DataNode以固定大小的block爲基本單位組織文件內容,block默認大小爲64MB(GFS也是64MB)。當用戶上傳一個大於64MB的文件時,該文件會被切成若干個block,分別存儲到不一樣的DataNode(更容易分佈式處理);同時爲了數據可靠,會將同一個block以流水線的方式寫到若干個(配置中默認爲3)不一樣的DataNode上。
二、Hadoop MapReduce架構
Hadoop MapReduce也採用Master/Slave(M/S)架構。它主要有如下幾個組件組成:Client、ClientTracker、TaskTracker和Task。
(1)Client
用戶編寫的MapReduce 程序經過Client 提交到JobTracker 端;同時,用戶可經過Client 提供的一些接口查看做業運行狀態。在Hadoop 內部用「做業」(Job)表示MapReduce 程序。一個MapReduce 程序可對應若干個做業,而每一個做業會被分解成若干個Map/Reduce 任務(Task)。
(2)JobTracker
JobTracker 主要負責資源監控和做業調度。JobTracker 監控全部TaskTracker 與做業的健康情況,一旦發現失敗狀況後,其會將相應的任務轉移到其餘節點;同時,JobTracker 會跟蹤任務的執行進度、資源使用量等信息,並將這些信息告訴任務調度器,而調度器會在資源出現空閒時,選擇合適的任務使用這些資源。在Hadoop 中,任務調度器是一個可插拔的模塊,用戶能夠根據本身的須要設計相應的調度器。
(3)TaskTracker
TaskTracker 會週期性地經過Heartbeat 將本節點上資源的使用狀況和任務的運行進度彙報給JobTracker,同時接收JobTracker 發送過來的命令並執行相應的操做(如啓動新任務、殺死任務等)。TaskTracker 使用「slot」等量劃分本節點上的資源量。「slot」表明計算資源(CPU、內存等)。一個Task 獲取到一個slot 後纔有機會運行,而Hadoop 調度器的做用就是將各個TaskTracker 上的空閒slot 分配給Task 使用。slot 分爲Map slot 和Reduce slot 兩種,分別供MapTask 和Reduce Task 使用。TaskTracker 經過slot 數目(可配置參數)限定Task 的併發度。
(4)Task
Task 分爲Map Task 和Reduce Task 兩種,均由TaskTracker 啓動。咱們知道,HDFS 以固定大小的block 爲基本單位存儲數據,而對於MapReduce 而言,其處理單位是split。split 是一個邏輯概念,它只包含一些元數據信息,好比數據起始位置、數據長度、數據所在節點等。它的劃分方法徹底由用戶本身決定。但須要注意的是,split 的多少決定了Map Task 的數目,由於每一個split 會交由一個Map Task 處理。
下一節將介紹Hadoop配置文件,而後逐步深刻Hadoop內核源碼的分析研究。