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