[Hadoop] Hadoop學習筆記之Hadoop基礎

1 Hadoop是什麼?

  Google公司發表了兩篇論文:一篇論文是「The Google File System」,介紹如何實現分佈式地存儲海量數據;另外一篇論文是「Mapreduce:Simplified Data Processing on Large Clusters」,介紹如何對分佈式大規模數據進行處理。Doug Cutting在這兩篇論文的啓發下,基於OSS(Open Source software)的思想實現了這兩篇論文中的原理,從而Hadoop誕生了。html

  Hadoop是一種開源的適合大數據的分佈式存儲和處理的平臺。做爲一種大規模分佈式數據處理平臺,Hadoop已成爲許多程序員的一項重要技能。node

2 Hadoop可以作什麼?

  如下內容有博友王路情整理。程序員

  大數據時代已經到來,給咱們的生活、工做、思惟方式都帶來變革。如何尋求大數據後面的價值,既是機遇又是挑戰。不論是金融數據、仍是電商數據、又仍是社交數據、遊戲數據… … 這些數據的規模、結構、增加的速度都給傳統數據存儲和處理技術帶來巨大的考驗。幸運的是,Hadoop的誕生和所構建成的生態系統給大數據的存儲、處理和分析帶來了曙光。數據庫

  不論是國外的著名公司Google、Yahoo!、微軟、亞馬遜、 EBay、FaceBook、Twitter、LinkedIn等和初創公司Cloudera、Hortonworks等,又仍是國內的著名公司中國移動、阿里巴巴、華爲、騰訊、百度、網易、京東商城等,都在使用Hadoop及相關技術解決大規模化數據問題,以知足公司需求和創造商業價值。安全

  例如:Yahoo! 的垃圾郵件識別和過濾、用戶特徵建模系統;Amazon.com(亞馬遜)的協同過濾推薦系統;Facebook的Web日誌分析;Twitter、LinkedIn的人脈尋找系統;淘寶商品推薦系統、淘寶搜索中的自定義篩選功能……這些應用都使用到Hadoop及其相關技術。app

  「Hadoop能作什麼?」 ,歸納以下:框架

  1)搜索引擎:這也正是Doug Cutting設計Hadoop的初衷,爲了針對大規模的網頁快速創建索引;分佈式

  2)大數據存儲:利用Hadoop的分佈式存儲能力,例如數據備份、數據倉庫等;oop

  3)大數據處理:利用Hadoop的分佈式處理能力,例如數據挖掘、數據分析等;post

  4)科學研究:Hadoop是一種分佈式的開源框架,對於分佈式系統有很大程度地參考價值。

3 Hadoop的三種模式

  Hadoop有三種不一樣的模式操做,分別爲單機模式、僞分佈模式和全分佈模式。每種模式的詳細介紹以及單機模式的安裝請閱讀我以前的博客:[Hadoop] 在Ubuntu系統上一步步搭建Hadoop(單機模式),僞分佈式模式和全分佈式模式的相關操做請見王路情的博客

4 Hadoop核心之分佈式文件系統HDFS

  Hadoop分佈式文件系統(Hadoop Distributed File System,簡稱HDFS)是Hadoop的核心模塊之一,它主要解決Hadoop的大數據存儲問題,其思想來源與Google的文件系統GFS。HDFS的主要特色:

  • 保存多個副本,且提供容錯機制,副本丟失或宕機自動恢復。默認存3份。
  • 運行在廉價的機器上。
  • 適合大數據的處理。HDFS默認會將文件分割成block,64M爲1個block。而後將block按鍵值對存儲在HDFS上,並將鍵值對的映射存到內存中。若是小文件太多,那內存的負擔會很重。

  HDFS中的兩個重要角色:

  [Namenode]

  1)管理文件系統的命名空間。

  2)記錄 每一個文件數據快在各個Datanode上的位置和副本信息。

  3)協調客戶端對文件的訪問。

  4)記錄命名空間內的改動或者空間本省屬性的改動。

  5)Namenode 使用事務日誌記錄HDFS元數據的變化。使用映像文件存儲文件系統的命名空間,包括文件映射,文件屬性等。

  從社會學來看,Namenode是HDFS裏面的管理者,發揮者管理、協調、操控的做用。

  [Datanode]

  1)負責所在物理節點的存儲管理。

  2)一次寫入,屢次讀取(不修改)。

  3)文件由數據庫組成,通常狀況下,數據塊的大小爲64MB。

  4)數據儘可能散步到各個節點。

  從社會學的角度來看,Datanode是HDFS的工做者,發揮按着Namenode的命令幹活,而且把幹活的進展和問題反饋到Namenode的做用。

  客戶端如何訪問HDFS中一個文件呢?具體流程以下:

  1)首先從Namenode得到組成這個文件的數據塊位置列表。

  2)接下來根據位置列表知道存儲數據塊的Datanode。

  3)最後訪問Datanode獲取數據。

  注意:Namenode並不參與數據實際傳輸。

  數據存儲系統,數據存儲的可靠性相當重要。HDFS是如何保證其可靠性呢?它主要採用以下機理:

  1)冗餘副本策略,即全部數據都有副本,副本的數目能夠在hdfs-site.xml中設置相應的複製因子。

  2)機架策略,即HDFS的「機架感知」,通常在本機架存放一個副本,在其它機架再存放別的副本,這樣能夠防止機架失效時丟失數據,也能夠提供帶寬利用率。

  3)心跳機制,即Namenode週期性從Datanode接受心跳信號和快報告,沒有按時發送心跳的Datanode會被標記爲宕機,不會再給任何I/O請求,如果Datanode失效形成副本數量降低,而且低於預先設置的閾值,Namenode會檢測出這些數據塊,並在合適的時機進行從新複製。

  4)安全模式,Namenode啓動時會先通過一個「安全模式」階段。

  5)校驗和,客戶端獲取數據經過檢查校驗和,發現數據塊是否損壞,從而肯定是否要讀取副本。

  6)回收站,刪除文件,會先到回收站/trash,其裏面文件能夠快速回復。

  7)元數據保護,映像文件和事務日誌是Namenode的核心數據,能夠配置爲擁有多個副本。

  8)快照,支持存儲某個時間點的映像,須要時可使數據重返這個時間點的狀態。

  如上圖所示,HDFS也是按照Master和Slave的結構。分NameNode、SecondaryNameNode、DataNode這幾個角色。

  NameNode:是Master節點,是大領導。管理數據塊映射;處理客戶端的讀寫請求;配置副本策略;管理HDFS的名稱空間;

  SecondaryNameNode:是一個小弟,分擔大哥namenode的工做量;是NameNode的冷備份;合併fsimage和fsedits而後再發給namenode。

  DataNode:Slave節點,奴隸,幹活的。負責存儲client發來的數據塊block;執行數據塊的讀寫操做。

  熱備份:b是a的熱備份,若是a壞掉。那麼b立刻運行代替a的工做。

  冷備份:b是a的冷備份,若是a壞掉。那麼b不能立刻代替a工做。可是b上存儲a的一些信息,減小a壞掉以後的損失。

  fsimage:元數據鏡像文件(文件系統的目錄樹。)

  edits:元數據的操做日誌(針對文件系統作的修改操做記錄)

  namenode內存中存儲的是=fsimage+edits。

  SecondaryNameNode負責定時默認1小時,從namenode上,獲取fsimage和edits來進行合併,而後再發送給namenode。減小namenode的工做量。

  有關HDFS詳細的寫操做和讀操做請見:老魏的博客

  有關HDFS的優缺點介紹請見:蝦皮工做室 

  有一個關於HDFS工做原理的漫畫版本,請見這裏:HDFS漫畫詳解

5 Hadoop核心之MapReduce

  上部分提到Hadoop存儲大數據的核心模塊HDFS,這一部分介紹Hadoop處理大數據部分的核心模塊MapReduce。

  Apache Foundation對MapReduce的介紹:「Hadoop MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.」

  由此可知,Hadoop核心之MapReduce是一個軟件框架,基於該框架可以容易地編寫應用程序,這些應用程序可以運行在由上千個商用機器組成的大集羣上,並以一種可靠的,具備容錯能力的方式並行地處理上TB級別的海量數據集。這個定義裏面有着這些關鍵詞,一是軟件框架,二是並行處理,三是可靠且容錯,四是大規模集羣,五是海量數據集。所以,對於MapReduce,能夠簡潔地認爲,它是一個軟件框架,海量數據是它的「菜」,它在大規模集羣上以一種可靠且容錯的方式並行地「烹飪這道菜」。

  MapReduce主要是用於解決Hadoop大數據處理的。所謂大數據處理,即以價值爲導向,對大數據加工、挖掘和優化等各類處理。

  MapReduce擅長處理大數據,它爲何具備這種能力呢?這可由MapReduce的設計思想發覺。MapReduce的思想就是「分而治之」。Mapper負責「分」,即把複雜的任務分解爲若干個「簡單的任務」來處理。「簡單的任務」包含三層含義:一是數據或計算的規模相對原任務要大大縮小;二是就近計算原則,即任務會分配到存放着所需數據的節點上進行計算;三是這些小任務能夠並行計算,彼此間幾乎沒有依賴關係。Reducer負責對map階段的結果進行彙總。至於須要多少個Reducer,用戶能夠根據具體問題,經過在mapred-site.xml配置文件裏設置參數mapred.reduce.tasks的值,缺省值爲1。

  MapReduce的工做機制如圖所示:

  MapReduce的整個工做過程如上圖所示,它包含以下4個獨立的實體:

  1)客戶端,用來提交MapReduce做業。

  2)jobtracker,用來協調做業的運行。

  3)tasktracker,用來處理做業劃分後的任務。

  4)HDFS,用來在其它實體間共享做業文件。

  MapReduce整個工做過程有序地包含以下工做環節:

  1)做業的提交

  2)做業的初始化

  3)任務的分配

  4)任務的執行

  5)進程和狀態的更新

  6)做業的完成 

  有關MapReduce的詳細工做細節,請見:《Hadoop權威指南(第二版)》第六章MapReduce工做機制。 

6 參考內容

  [1] The Google File System

  [2] MapReduce:Simplified Data Processing on Large Clusters

  [3] Hadoop in Action

  [4] 王路情博客

  [5] 《Hadoop權威指南(第二版)》

相關文章
相關標籤/搜索