by
匯智軟件 發(fā)布時(shí)間:2016/11/8
1 Hadoop是什么?
Google公司發(fā)表了兩篇論文:一篇論文是“The Google File System”,介紹如何實(shí)現(xiàn)分布式地存儲海量數(shù)據(jù);另一篇論文是“Mapreduce:Simplified Data Processing on Large Clusters”,介紹如何對分布式大規(guī)模數(shù)據(jù)進(jìn)行處理。Doug Cutting在這兩篇論文的啟發(fā)下,基于OSS(Open Source software)的思想實(shí)現(xiàn)了這兩篇論文中的原理,從而Hadoop誕生了。
Hadoop是一種開源的適合大數(shù)據(jù)的分布式存儲和處理的平臺。作為一種大規(guī)模分布式數(shù)據(jù)處理平臺,Hadoop已成為許多程序員的一項(xiàng)重要技能。
2 Hadoop能夠做什么?
以下內(nèi)容有博友王路情整理。
大數(shù)據(jù)時(shí)代已經(jīng)到來,給我們的生活、工作、思維方式都帶來變革。如何尋求大數(shù)據(jù)后面的價(jià)值,既是機(jī)遇又是挑戰(zhàn)。不管是金融數(shù)據(jù)、還是電商數(shù)據(jù)、又還是社交數(shù)據(jù)、游戲數(shù)據(jù)… … 這些數(shù)據(jù)的規(guī)模、結(jié)構(gòu)、增長的速度都給傳統(tǒng)數(shù)據(jù)存儲和處理技術(shù)帶來巨大的考驗(yàn)。幸運(yùn)的是,Hadoop的誕生和所構(gòu)建成的生態(tài)系統(tǒng)給大數(shù)據(jù)的存儲、處理和分析帶來了曙光。
不管是國外的著名公司Google、Yahoo!、微軟、亞馬遜、 EBay、FaceBook、Twitter、LinkedIn等和初創(chuàng)公司Cloudera、Hortonworks等,又還是國內(nèi)的著名公司中國移動、阿里巴巴、華為、騰訊、百度、網(wǎng)易、京東商城等,都在使用Hadoop及相關(guān)技術(shù)解決大規(guī)模化數(shù)據(jù)問題,以滿足公司需求和創(chuàng)造商業(yè)價(jià)值。
例如:Yahoo! 的垃圾郵件識別和過濾、用戶特征建模系統(tǒng);Amazon.com(亞馬遜)的協(xié)同過濾推薦系統(tǒng);Facebook的Web日志分析;Twitter、LinkedIn的人脈尋找系統(tǒng);淘寶商品推薦系統(tǒng)、淘寶搜索中的自定義篩選功能……這些應(yīng)用都使用到Hadoop及其相關(guān)技術(shù)。
“Hadoop能做什么?” ,概括如下:
1)搜索引擎:這也正是Doug Cutting設(shè)計(jì)Hadoop的初衷,為了針對大規(guī)模的網(wǎng)頁快速建立索引;
2)大數(shù)據(jù)存儲:利用Hadoop的分布式存儲能力,例如數(shù)據(jù)備份、數(shù)據(jù)倉庫等;
3)大數(shù)據(jù)處理:利用Hadoop的分布式處理能力,例如數(shù)據(jù)挖掘、數(shù)據(jù)分析等;
4)科學(xué)研究:Hadoop是一種分布式的開源框架,對于分布式系統(tǒng)有很大程度地參考價(jià)值。
3 Hadoop的三種模式
Hadoop有三種不同的模式操作,分別為單機(jī)模式、偽分布模式和全分布模式。每種模式的詳細(xì)介紹以及單機(jī)模式的安裝請閱讀我之前的博客:[Hadoop] 在Ubuntu系統(tǒng)上一步步搭建Hadoop(單機(jī)模式),偽分布式模式和全分布式模式的相關(guān)操作請見王路情的博客。
4 Hadoop核心之分布式文件系統(tǒng)HDFS
Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System,簡稱HDFS)是Hadoop的核心模塊之一,它主要解決Hadoop的大數(shù)據(jù)存儲問題,其思想來源與Google的文件系統(tǒng)GFS。HDFS的主要特點(diǎn):
HDFS中的兩個(gè)重要角色:
[Namenode]
1)管理文件系統(tǒng)的命名空間。
2)記錄 每個(gè)文件數(shù)據(jù)快在各個(gè)Datanode上的位置和副本信息。
3)協(xié)調(diào)客戶端對文件的訪問。
4)記錄命名空間內(nèi)的改動或者空間本省屬性的改動。
5)Namenode 使用事務(wù)日志記錄HDFS元數(shù)據(jù)的變化。使用映像文件存儲文件系統(tǒng)的命名空間,包括文件映射,文件屬性等。
從社會學(xué)來看,Namenode是HDFS里面的管理者,發(fā)揮者管理、協(xié)調(diào)、操控的作用。
[Datanode]
1)負(fù)責(zé)所在物理節(jié)點(diǎn)的存儲管理。
2)一次寫入,多次讀取(不修改)。
3)文件由數(shù)據(jù)庫組成,一般情況下,數(shù)據(jù)塊的大小為64MB。
4)數(shù)據(jù)盡量散步到各個(gè)節(jié)點(diǎn)。
從社會學(xué)的角度來看,Datanode是HDFS的工作者,發(fā)揮按著Namenode的命令干活,并且把干活的進(jìn)展和問題反饋到Namenode的作用。
客戶端如何訪問HDFS中一個(gè)文件呢?具體流程如下:
1)首先從Namenode獲得組成這個(gè)文件的數(shù)據(jù)塊位置列表。
2)接下來根據(jù)位置列表知道存儲數(shù)據(jù)塊的Datanode。
3)最后訪問Datanode獲取數(shù)據(jù)。
注意:Namenode并不參與數(shù)據(jù)實(shí)際傳輸。
數(shù)據(jù)存儲系統(tǒng),數(shù)據(jù)存儲的可靠性至關(guān)重要。HDFS是如何保證其可靠性呢?它主要采用如下機(jī)理:
1)冗余副本策略,即所有數(shù)據(jù)都有副本,副本的數(shù)目可以在hdfs-site.xml中設(shè)置相應(yīng)的復(fù)制因子。
2)機(jī)架策略,即HDFS的“機(jī)架感知”,一般在本機(jī)架存放一個(gè)副本,在其它機(jī)架再存放別的副本,這樣可以防止機(jī)架失效時(shí)丟失數(shù)據(jù),也可以提供帶寬利用率。
3)心跳機(jī)制,即Namenode周期性從Datanode接受心跳信號和快報(bào)告,沒有按時(shí)發(fā)送心跳的Datanode會被標(biāo)記為宕機(jī),不會再給任何I/O請求,若是Datanode失效造成副本數(shù)量下降,并且低于預(yù)先設(shè)置的閾值,Namenode會檢測出這些數(shù)據(jù)塊,并在合適的時(shí)機(jī)進(jìn)行重新復(fù)制。
4)安全模式,Namenode啟動時(shí)會先經(jīng)過一個(gè)“安全模式”階段。
5)校驗(yàn)和,客戶端獲取數(shù)據(jù)通過檢查校驗(yàn)和,發(fā)現(xiàn)數(shù)據(jù)塊是否損壞,從而確定是否要讀取副本。
6)回收站,刪除文件,會先到回收站/trash,其里面文件可以快速回復(fù)。
7)元數(shù)據(jù)保護(hù),映像文件和事務(wù)日志是Namenode的核心數(shù)據(jù),可以配置為擁有多個(gè)副本。
8)快照,支持存儲某個(gè)時(shí)間點(diǎn)的映像,需要時(shí)可以使數(shù)據(jù)重返這個(gè)時(shí)間點(diǎn)的狀態(tài)。
如上圖所示,HDFS也是按照Master和Slave的結(jié)構(gòu)。分NameNode、SecondaryNameNode、DataNode這幾個(gè)角色。
NameNode:是Master節(jié)點(diǎn),是大領(lǐng)導(dǎo)。管理數(shù)據(jù)塊映射;處理客戶端的讀寫請求;配置副本策略;管理HDFS的名稱空間;
SecondaryNameNode:是一個(gè)小弟,分擔(dān)大哥namenode的工作量;是NameNode的冷備份;合并fsimage和fsedits然后再發(fā)給namenode。
DataNode:Slave節(jié)點(diǎn),奴隸,干活的。負(fù)責(zé)存儲client發(fā)來的數(shù)據(jù)塊block;執(zhí)行數(shù)據(jù)塊的讀寫操作。
熱備份:b是a的熱備份,如果a壞掉。那么b馬上運(yùn)行代替a的工作。
冷備份:b是a的冷備份,如果a壞掉。那么b不能馬上代替a工作。但是b上存儲a的一些信息,減少a壞掉之后的損失。
fsimage:元數(shù)據(jù)鏡像文件(文件系統(tǒng)的目錄樹。)
edits:元數(shù)據(jù)的操作日志(針對文件系統(tǒng)做的修改操作記錄)
namenode內(nèi)存中存儲的是=fsimage+edits。
SecondaryNameNode負(fù)責(zé)定時(shí)默認(rèn)1小時(shí),從namenode上,獲取fsimage和edits來進(jìn)行合并,然后再發(fā)送給namenode。減少namenode的工作量。
有關(guān)HDFS詳細(xì)的寫操作和讀操作請見:老魏的博客。
有關(guān)HDFS的優(yōu)缺點(diǎn)介紹請見:蝦皮工作室。
有一個(gè)關(guān)于HDFS工作原理的漫畫版本,請見這里:HDFS漫畫詳解。
5 Hadoop核心之MapReduce
上部分提到Hadoop存儲大數(shù)據(jù)的核心模塊HDFS,這一部分介紹Hadoop處理大數(shù)據(jù)部分的核心模塊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是一個(gè)軟件框架,基于該框架能夠容易地編寫應(yīng)用程序,這些應(yīng)用程序能夠運(yùn)行在由上千個(gè)商用機(jī)器組成的大集群上,并以一種可靠的,具有容錯(cuò)能力的方式并行地處理上TB級別的海量數(shù)據(jù)集。這個(gè)定義里面有著這些關(guān)鍵詞,一是軟件框架,二是并行處理,三是可靠且容錯(cuò),四是大規(guī)模集群,五是海量數(shù)據(jù)集。因此,對于MapReduce,可以簡潔地認(rèn)為,它是一個(gè)軟件框架,海量數(shù)據(jù)是它的“菜”,它在大規(guī)模集群上以一種可靠且容錯(cuò)的方式并行地“烹飪這道菜”。
MapReduce主要是用于解決Hadoop大數(shù)據(jù)處理的。所謂大數(shù)據(jù)處理,即以價(jià)值為導(dǎo)向,對大數(shù)據(jù)加工、挖掘和優(yōu)化等各種處理。
MapReduce擅長處理大數(shù)據(jù),它為什么具有這種能力呢?這可由MapReduce的設(shè)計(jì)思想發(fā)覺。MapReduce的思想就是“分而治之”。Mapper負(fù)責(zé)“分”,即把復(fù)雜的任務(wù)分解為若干個(gè)“簡單的任務(wù)”來處理。“簡單的任務(wù)”包含三層含義:一是數(shù)據(jù)或計(jì)算的規(guī)模相對原任務(wù)要大大縮小;二是就近計(jì)算原則,即任務(wù)會分配到存放著所需數(shù)據(jù)的節(jié)點(diǎn)上進(jìn)行計(jì)算;三是這些小任務(wù)可以并行計(jì)算,彼此間幾乎沒有依賴關(guān)系。Reducer負(fù)責(zé)對map階段的結(jié)果進(jìn)行匯總。至于需要多少個(gè)Reducer,用戶可以根據(jù)具體問題,通過在mapred-site.xml配置文件里設(shè)置參數(shù)mapred.reduce.tasks的值,缺省值為1。
MapReduce的工作機(jī)制如圖所示:
MapReduce的整個(gè)工作過程如上圖所示,它包含如下4個(gè)獨(dú)立的實(shí)體:
1)客戶端,用來提交MapReduce作業(yè)。
2)jobtracker,用來協(xié)調(diào)作業(yè)的運(yùn)行。
3)tasktracker,用來處理作業(yè)劃分后的任務(wù)。
4)HDFS,用來在其它實(shí)體間共享作業(yè)文件。
MapReduce整個(gè)工作過程有序地包含如下工作環(huán)節(jié):
1)作業(yè)的提交
2)作業(yè)的初始化
3)任務(wù)的分配
4)任務(wù)的執(zhí)行
5)進(jìn)程和狀態(tài)的更新
6)作業(yè)的完成
有關(guān)MapReduce的詳細(xì)工作細(xì)節(jié),請見:《Hadoop權(quán)威指南(第二版)》第六章MapReduce工作機(jī)制。
6 參考內(nèi)容
[1] The Google File System
[2] MapReduce:Simplified Data Processing on Large Clusters
[3] Hadoop in Action
[4] 王路情博客
[5] 《Hadoop權(quán)威指南(第二版)》
出處:http://www.cnblogs.com/maybe2030/p/4593190.html#_label0 作者:Poll的筆記