柯研 馬凱 鄭鈺輝
摘要:隨著計(jì)算機(jī)技術(shù)和互聯(lián)網(wǎng)產(chǎn)業(yè)的發(fā)展,數(shù)據(jù)量呈現(xiàn)出了爆炸式的增長,使人類進(jìn)入了大數(shù)據(jù)時(shí)代。面對(duì)成千上百的TB或者PB級(jí)別的數(shù)據(jù),傳統(tǒng)的計(jì)算機(jī)技術(shù)在數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)分析上已經(jīng)無法滿足人們對(duì)數(shù)據(jù)處理的需求了。為了解決大數(shù)據(jù)的存儲(chǔ)、大數(shù)據(jù)的分析和大數(shù)據(jù)的管理問題,研究人員開發(fā)出了Hadoop分布式系統(tǒng)平臺(tái)來解決這些問題。本文主要介紹分布式平臺(tái)Hadoop的分布式文件系統(tǒng)(HDFS)、并行計(jì)算編程模型(MapReduce)。
關(guān)鍵詞:大數(shù)據(jù);HDFS;MapReduce
中圖分類號(hào):TN911.73 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2018)09-0070-02
近些年來,隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展和數(shù)字化的普及,每天都在產(chǎn)生著大量的數(shù)據(jù),人們也漸漸進(jìn)入了大數(shù)據(jù)時(shí)代。與此同時(shí)大數(shù)據(jù)的出現(xiàn)也引起了學(xué)術(shù)界、互聯(lián)網(wǎng)產(chǎn)業(yè)和各國政府的重視。面對(duì)海量數(shù)據(jù)需要存儲(chǔ)、分析和處理的問題,需要一種具有高效性且能并行的編程計(jì)算模型來解決這些問題。
Google在2003-2004年公布了部分Google的分布式文件系統(tǒng)(GFS)、Google的MapReduce開源分布式并行計(jì)算框架和一個(gè)大型分布式數(shù)據(jù)庫(BigTable)的思想細(xì)節(jié)[1]。Doug cutting等人在受到GFS和MapReduce思想的啟發(fā)后,用了兩年時(shí)間實(shí)現(xiàn)了DFS和MapReduce機(jī)制,使的Nutch性能得到顯著的提升,2005年Hadoop作為Nutch的一部分引入了Apache Software Foundation公司開始研發(fā)。然后隨著Hadoop的發(fā)展和完善,Hadoop成為了大數(shù)據(jù)分析處理的主流技術(shù)。
1 分布式計(jì)算平臺(tái)Hadoop
Hadoop是一個(gè)Apache Software Foundation公司用Java語言開發(fā)出的開源分布式計(jì)算平臺(tái)。Hadoop的設(shè)計(jì)核心是HDFS(Hadoop Distributed File System)分布式文件系統(tǒng)和MapReduce并行計(jì)算編程模型。HDFS主要是用來解決海量數(shù)據(jù)的存儲(chǔ)問題,MapReduce并行計(jì)算編程模型主要是用來解決海量數(shù)據(jù)的計(jì)算和分析問題。Hadoop的工作方式是串行處理和并行處理相結(jié)合,大大提高了數(shù)據(jù)分析的計(jì)算速度。Hadoop首先通過HDFS分布式文件系統(tǒng)將不同節(jié)點(diǎn)上的數(shù)據(jù)進(jìn)行整合,其次提供給用戶一個(gè)標(biāo)準(zhǔn)的接口,將所需要的文件讀寫到HDFS分布式文件系統(tǒng)中,然后再使用MapReduce并行計(jì)算編程模型進(jìn)行計(jì)算,最后可以很快的處理大量的數(shù)據(jù)。
Hadoop分布式計(jì)算平臺(tái)的出現(xiàn)解決了大數(shù)據(jù)并行計(jì)算、存儲(chǔ)、管理的問題,普通用戶可以在不了解分布式底層細(xì)節(jié)的情況下來開發(fā)分布式程序,可以充分地利用集群的力量來進(jìn)行海量數(shù)據(jù)的存儲(chǔ)和計(jì)算數(shù)據(jù)并且進(jìn)行分析。Hadoop具有高效性、可靠性、高可擴(kuò)展性、成本低等特點(diǎn)。具體特點(diǎn)總結(jié)如下:
優(yōu)點(diǎn)如下:(1)高可靠性:Hadoop的存儲(chǔ)方式是按位存儲(chǔ)[2],它能處理海量的數(shù)據(jù)。(2)高效性:Hadoop是以并行的方式工作的,通過并行處理加快處理速度。(3)高容錯(cuò)性:Hadoop假設(shè)計(jì)算元素和存儲(chǔ)會(huì)失敗,它產(chǎn)生多個(gè)工作數(shù)據(jù)副本,如果有一個(gè)副本丟失或者丟失,確保能夠針對(duì)失敗的節(jié)點(diǎn)重新分布處理。(4)高擴(kuò)展性:Hadoop通過在計(jì)算機(jī)集簇間分配數(shù)據(jù)進(jìn)而完成計(jì)算任務(wù),通過軟件配置,這些集簇能夠非常容易擴(kuò)展到數(shù)以千計(jì)的節(jié)點(diǎn)中。
1.1 HDFS
HDFS是一個(gè)容錯(cuò)性能很高的分布式文件系統(tǒng),可以被廣泛地安置到廉價(jià)的計(jì)算機(jī)器上,HDFS是以流的形式訪問寫入的大型文件,可以大大提高整個(gè)系統(tǒng)的數(shù)據(jù)吞吐量,因此十分適合于數(shù)據(jù)集很大的應(yīng)用場(chǎng)景。
HDFS架構(gòu)主要采用的是主從架構(gòu),一個(gè)十分典型的HDFS集群是含有一個(gè)名稱節(jié)點(diǎn)(NameNode)和多個(gè)數(shù)據(jù)節(jié)點(diǎn)(DataNode)[4]。其中DataNode是存在便宜的計(jì)算機(jī)上,主要是用于保存Block塊文件。Block是對(duì)一個(gè)文件進(jìn)行分塊,通常是64M。
NameNode節(jié)點(diǎn)主要負(fù)責(zé)整個(gè)HDFS分布式文件系統(tǒng)中的接收client用戶的請(qǐng)求的任務(wù),同時(shí)要維護(hù)文件系統(tǒng)的目錄結(jié)構(gòu)和管理文件系統(tǒng)與數(shù)據(jù)塊的關(guān)系。通常集群中只有一臺(tái)計(jì)算機(jī)上運(yùn)行著NameNode實(shí)例。名稱節(jié)點(diǎn)上存儲(chǔ)著HDFS的名稱空間,對(duì)于任何篡改FileSystem原數(shù)據(jù)的操作,名稱節(jié)點(diǎn)都會(huì)使用一種稱為EditLog的事務(wù)日志來記錄下篡改FileSystem原數(shù)據(jù)的行為。所有的HDFS分布式文件系統(tǒng)的名稱空間,其中包括Block塊到文件的映射,文件的屬性等都會(huì)保存在FsImage文件中,F(xiàn)sImage文件是存放在NameNode所在的本地文件系統(tǒng)上。
DataNode節(jié)點(diǎn)主要負(fù)責(zé)存儲(chǔ)HDFS分布式文件系統(tǒng)中的文件,同時(shí)將數(shù)據(jù)分成大量的數(shù)據(jù)塊,為了保證數(shù)據(jù)的安全性,將數(shù)據(jù)進(jìn)行備份,當(dāng)其中一份數(shù)據(jù)出現(xiàn)的問題時(shí)候,將由其他備份數(shù)據(jù)對(duì)數(shù)據(jù)進(jìn)行修復(fù)。數(shù)據(jù)節(jié)點(diǎn)將HDFS的數(shù)據(jù)以文件的形式保存在本地的文件系統(tǒng)中,將每個(gè)HDFS數(shù)據(jù)塊都保存在本地文件系統(tǒng)的一個(gè)單獨(dú)的文件中。當(dāng)一個(gè)數(shù)據(jù)節(jié)點(diǎn)開始運(yùn)行時(shí),它會(huì)掃描本地文件系統(tǒng)中所有的文件,同時(shí)會(huì)產(chǎn)生一個(gè)與本地所有文件相互對(duì)應(yīng)的HDFS數(shù)據(jù)塊的一個(gè)列表,然后發(fā)送給名稱節(jié)點(diǎn)。HDFS讀寫流程如圖1所示。
HDFS文件讀?。軐懭脒^程:首先客戶端向Filesystem發(fā)出讀取或者寫入的請(qǐng)求,然后FileSystem再調(diào)用NameNode來確定文件起始?jí)K的位置。對(duì)于每一個(gè)數(shù)據(jù)塊來說,NameNode都會(huì)返回存有塊備份的DataNode的地址給客戶端,如果客戶端自己就是一個(gè)名稱節(jié)點(diǎn),而且客戶端上存有相應(yīng)數(shù)據(jù)塊的備份時(shí),該名稱節(jié)點(diǎn)就會(huì)直接從本地的數(shù)據(jù)節(jié)點(diǎn)上讀取數(shù)據(jù)。
1.2 MapReduce并行計(jì)算編程模型
Hadoop MapReduce是一個(gè)簡(jiǎn)便易用的并行計(jì)算編程模型,在MapReduce基礎(chǔ)上開發(fā)出來的應(yīng)用程序能夠運(yùn)行在由數(shù)以千計(jì)的計(jì)算機(jī)組成的計(jì)算機(jī)集群上,同時(shí)在并行處理海量的數(shù)據(jù)這一功能上有著高可靠性、高容錯(cuò)性的優(yōu)點(diǎn)。
MapReduce并行計(jì)算模型的首要條件是:(1)可以將我們需要進(jìn)行處理的數(shù)據(jù)集劃分成多個(gè)小的數(shù)據(jù)集;(2)我們可以對(duì)每一個(gè)小的數(shù)據(jù)集進(jìn)行并行處理。MapReduce并行計(jì)算模型的的主要思想是將需要執(zhí)行的問題拆分成map函數(shù)和reduce函數(shù)兩個(gè)部分。在需要處理的數(shù)據(jù)集被分成多個(gè)小的數(shù)據(jù)集后,map函數(shù)會(huì)將待處理的數(shù)據(jù)集映射成不同的block塊,然后將這些小的數(shù)據(jù)集分配給計(jì)算機(jī)群處理,來進(jìn)行分布式并行計(jì)算,最后使用reduce函數(shù)將計(jì)算的結(jié)果整理和傳輸給計(jì)算機(jī),從而輸出開發(fā)者所需要的結(jié)果。
MapReduce并行計(jì)算模型是有一個(gè)單獨(dú)運(yùn)行在主節(jié)點(diǎn)上的作業(yè)追蹤器(JobTracker)和多個(gè)運(yùn)行在每個(gè)集群從節(jié)點(diǎn)上的任務(wù)追蹤器(TaskTracker)組成。
JobTracker又被稱為作業(yè)跟蹤器[5],是運(yùn)行主節(jié)點(diǎn)上的一個(gè)很重要的進(jìn)程,是MapReduce并行計(jì)算模型的調(diào)度器,主要負(fù)責(zé)處理用戶提交代碼的后臺(tái)程序。作業(yè)追蹤器將首先選擇處具體的文件去處理作業(yè),其次將作業(yè)切割成一個(gè)個(gè)小的任務(wù),同時(shí)將任務(wù)進(jìn)行分配,把它們到所需要的數(shù)據(jù)所在的子節(jié)點(diǎn)上。其中map 任務(wù)是解析每條數(shù)據(jù)記錄,傳遞給用戶所編寫的map函數(shù)并且執(zhí)行map函數(shù),將輸入的結(jié)果寫入到本地磁盤中;reduce 任務(wù) 是從map 任務(wù)的執(zhí)行結(jié)果中遠(yuǎn)程的讀取需要輸入的數(shù)據(jù),然后將數(shù)據(jù)排序,最后將數(shù)據(jù)按照排序分組,把數(shù)據(jù)傳遞給用戶編寫的reduce函數(shù),reduce函數(shù)負(fù)責(zé)執(zhí)行。主節(jié)點(diǎn)負(fù)責(zé)監(jiān)視從節(jié)點(diǎn)的執(zhí)行情況,并且重新執(zhí)行之前失敗的任務(wù)。JobTracker可以運(yùn)行在任意一臺(tái)計(jì)算機(jī)上。
TaskTracker又被稱為任務(wù)跟蹤器,主要是負(fù)責(zé)保持和作業(yè)跟蹤器之間的交互,在分配的block塊上執(zhí)行map的任務(wù)或者reduce的任務(wù),在執(zhí)行任務(wù)的時(shí)候,JobTracker只有一個(gè),但是TaskTracker會(huì)有很多個(gè)。
2 結(jié)語
本文首先介紹了分布式計(jì)算平臺(tái)Hadoop的起源,Hadoop是受Google共享的關(guān)于分布式文件系統(tǒng)(GFS)、MapReduce開源分布式并行計(jì)算框架和一個(gè)大型分布式數(shù)據(jù)庫的思想啟發(fā)所研究出來,一切都是為了解決海量數(shù)據(jù)的存儲(chǔ)、計(jì)算和分析的問題;其次介紹了Hadoop的整體框架,了解到了Hadoop具有高效性、高擴(kuò)展性、高可靠性和高容錯(cuò)性的特點(diǎn)。最后詳細(xì)介紹了Hadoop的兩個(gè)核心HDFS分布式文件系統(tǒng)和MapReduce并行計(jì)算模型的具體內(nèi)容。
參考文獻(xiàn)
[1]陳吉榮,樂嘉錦.基于Hadoop生態(tài)系統(tǒng)的大數(shù)據(jù)解決方案綜述[J].計(jì)算機(jī)工程與科學(xué),2013,35(10):25-35.
[2]夏靖波,韋澤鯤,付凱,等. 云計(jì)算中Hadoop技術(shù)研究與應(yīng)用綜述[J].計(jì)算機(jī)科學(xué),2016,43(11):6-11.
[3]陳璽,馬修軍,呂欣.Hadoop生態(tài)體系安全框架綜述[J].信息安全研究,2016,2(8):684-698.
[4]王峰,雷葆華.Hadoop分布式文件系統(tǒng)的模型分析[J].電信科學(xué),2010,26(12):95-99.
[5]董新華,李瑞軒,周灣灣,等. Hadoop系統(tǒng)性能優(yōu)化與功能增強(qiáng)綜述[J].計(jì)算機(jī)研究與發(fā)展,2013,50(s2):1-15.