Hadoop基礎

Hadoop_robustwareinccom.png

1 Hadoop是什么?

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

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


2 Hadoop能夠做什么?

  以下內容有博友王路情整理。

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

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

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

  “Hadoop能做什么?” ,概括如下:

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

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

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

  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權威指南(第二版)》


出處:http://www.cnblogs.com/maybe2030/p/4593190.html#_label0  作者:Poll的筆記