肖郅慶 陜西科技大學(xué)
Hadoop能夠處理PB級(jí)的數(shù)據(jù)量,可以運(yùn)行在普通機(jī)器組成的集群上并且具有高容錯(cuò)性,其創(chuàng)始人是Doug Cutting。
HDFS即Hadoop分布式文件系統(tǒng),源自GFS。與傳統(tǒng)的文件系統(tǒng)類似,HDFS也有塊概念,不過這個(gè)塊要大得多,默認(rèn)為64MB。HDFS把一個(gè)文件分幾個(gè)數(shù)據(jù)塊來存儲(chǔ),數(shù)據(jù)以塊為單位分布在集群的服務(wù)器上。
一個(gè)標(biāo)準(zhǔn)的HDFS集群由一個(gè)NameNode、一個(gè)Secondary NameNode和一些DataNodes組成。
NameNode用來存儲(chǔ)系統(tǒng)的元數(shù)據(jù),管理DataNodes。在NameNode上有兩個(gè)重要的文件——fsimage和edits。fsimage是HDFS元數(shù)據(jù)的磁盤備份,而edits是對(duì)事務(wù)的記錄。edits的作用是,NameNode接受應(yīng)用程序的請求后并不直接對(duì)數(shù)據(jù)進(jìn)行操作,而是把相應(yīng)的事務(wù)記錄到edits中,待一定時(shí)間后統(tǒng)一操作,這樣可以減少I/O從而節(jié)約時(shí)間。NameNode啟動(dòng)后,會(huì)加載fsimage到內(nèi)存中,然后按照edits的記錄執(zhí)行事務(wù),這樣就可以獲得上次停機(jī)時(shí)的數(shù)據(jù)集了。
Secondary NameNode協(xié)助處理NameNode的事務(wù)日志。上段說NameNode會(huì)把事務(wù)寫入edits,但這存在一個(gè)問題,就是隨著開機(jī)時(shí)間的延長,edits會(huì)越來越大并且NameNode服務(wù)器重啟后恢復(fù)數(shù)據(jù)所花費(fèi)的時(shí)間也會(huì)延長。這時(shí)我們引入Secondary NameNode來解決該問題。當(dāng)edits文件增長到一定大小后,NameNode就啟用新的edits文件,記為edits.new。Secondary NameNode把NameNode上的fsimage和edits復(fù)制到本地,然后對(duì)fsimage執(zhí)行edits上的事務(wù)。Secondary NameNode用新的fsimage替換舊的fsiamge,并將新的fsimage送回NameNode。NameNode用新的fsiamge替換舊的fsimage,并將edits.new改名為edits。這樣便解決了我們上面提出的問題。
DataNode是HDFS上存儲(chǔ)數(shù)據(jù)塊的地方。DataNode啟動(dòng)后會(huì)周期性的向NameNode報(bào)告其上所有的塊信息,這被稱為心跳。如果NameNode超過10分鐘沒有收到某DataNode的心跳,則認(rèn)為該DataNode不可用。倘若一個(gè)DataNode不可用,那么其上的數(shù)據(jù)塊也都丟失了嗎?實(shí)際上在HDFS上默認(rèn)每一數(shù)據(jù)塊都有三份,并且它們分布在不同的DataNode上,所以若一個(gè)DataNode不可用了,也不會(huì)造成數(shù)據(jù)丟失。
MapReduce是一種編程模型,它分為兩個(gè)函數(shù):Map和Reduce。Map函數(shù)接受一對(duì)鍵值對(duì)輸出一些中間鍵值對(duì)。MapReduce的庫函數(shù)把具有相同中間鍵I的值收集成一組。Reduce函數(shù)接受中間鍵I和與之相應(yīng)的一組值,并對(duì)這些值進(jìn)行某種操作,最終輸出中間鍵I和相應(yīng)的值。
Hadoop MapReduce工作流程是這樣的,MapReduce庫函數(shù)先把用戶程序的輸入文件分割成n份,這n份文件塊被分布到集群的各個(gè)計(jì)算機(jī)上。接著系統(tǒng)開始向具有文件塊的節(jié)點(diǎn)分配map任務(wù),map函數(shù)產(chǎn)生的中間鍵值對(duì)存儲(chǔ)在本地磁盤上。Map階段結(jié)束后,reduce階段開始。系統(tǒng)首先分配reduce任務(wù),然后通知它它所負(fù)責(zé)的中間數(shù)據(jù)塊的位置。Reduce任務(wù)首先讀取中間數(shù)據(jù)塊,庫函數(shù)對(duì)其進(jìn)行融合,然后執(zhí)行reduce函數(shù)。最后系統(tǒng)收集所有reduce函數(shù)產(chǎn)生的結(jié)果并把它們返回給用戶程序。
本文對(duì)Hadoop的兩個(gè)核心組件進(jìn)行了簡單的介紹。Hadoop是一個(gè)被企業(yè)廣泛應(yīng)用的大數(shù)據(jù)存儲(chǔ)與處理的平臺(tái),隨著大數(shù)據(jù)分析在企業(yè)生產(chǎn)過程中的作用越來越大,人才市場對(duì)掌握Hadoop等大數(shù)據(jù)處理技術(shù)的技術(shù)人才需求也越來越旺盛,于是本文便對(duì)Hadoop技術(shù)進(jìn)行簡單的介紹,希望對(duì)想要了解Hadoop技術(shù)的人提供幫助。
[1]Eric Sammer著.劉敏等譯.Hadoop技術(shù)詳解[M]. 北京:人民郵電出版社,2013.12.
[2]Jeffrey Dean, Sanjay Ghemawat. MapReduce: simplified data processing on large clusters[J/OL]. https://doi.org/10.1145/1327452.1327492,2008-01-01/2018-04-02