陳 靜
(1. 同濟(jì)大學(xué) 上海200092;2. 天津中石化工物流有限公司 天津300270)
基于Hadoop云計(jì)算平臺(tái)的文本處理算法的研究與改進(jìn)
陳 靜1,2
(1. 同濟(jì)大學(xué) 上海200092;2. 天津中石化工物流有限公司 天津300270)
Hadoop是Apache基金會(huì)下的一個(gè)開源分布式計(jì)算平臺(tái),以分布式文件系統(tǒng)HDFS(Hadoop Distributed File System)和 MapReduce分布式計(jì)算框架為核心,為用戶提供了底層細(xì)節(jié)透明的云分布式基礎(chǔ)設(shè)施。在對(duì) Hadoop進(jìn)行深入分析和研究的基礎(chǔ)上,搭建基于 Hadoop的云計(jì)算平臺(tái),并完成分布式文本文件處理任務(wù)以及對(duì)文件文本內(nèi)容處理算法的改進(jìn)和實(shí)現(xiàn)。
云計(jì)算 Hadoop 數(shù)據(jù)去重算法 HDFS MapReduce
云計(jì)算是一種按使用量進(jìn)行付費(fèi)的模式,這種模式提供可用、便捷、按需的網(wǎng)絡(luò)訪問,使用可配置的計(jì)算資源共享池,共享池的資源包括網(wǎng)絡(luò)、服務(wù)器、存儲(chǔ)、應(yīng)用軟件、服務(wù)等,這些資源能夠通過云計(jì)算平臺(tái)快速提供給客戶。它是分布式計(jì)算、并行計(jì)算、網(wǎng)格計(jì)算、多核計(jì)算、網(wǎng)絡(luò)存儲(chǔ)、虛擬化、負(fù)載均衡等傳統(tǒng)計(jì)算機(jī)技術(shù)和互聯(lián)網(wǎng)技術(shù)融合發(fā)展的產(chǎn)物,被稱為是繼大型計(jì)算機(jī)、個(gè)人計(jì)算機(jī)、互聯(lián)網(wǎng)之后的第4次IT產(chǎn)業(yè)革命,將成為帶動(dòng)IT、物聯(lián)網(wǎng)、電子商務(wù)等諸多產(chǎn)業(yè)強(qiáng)勁增長(zhǎng)、推動(dòng)信息產(chǎn)業(yè)整體升級(jí)的基礎(chǔ)。而Hadoop是Apache基金會(huì)下的一款開源軟件,實(shí)現(xiàn)了包括分布式文件系統(tǒng)和MapReduce框架在內(nèi)的云計(jì)算軟件平臺(tái)的基礎(chǔ)架構(gòu),并且在其上整合了包括數(shù)據(jù)庫、云計(jì)算管理、數(shù)據(jù)倉儲(chǔ)等一系列平臺(tái),已成為工業(yè)界和學(xué)術(shù)界進(jìn)行云計(jì)算應(yīng)用和研究的標(biāo)準(zhǔn)平臺(tái),旨在幫助更多的企業(yè)和個(gè)人認(rèn)識(shí)和了解云計(jì)算相關(guān)技術(shù),并利用此技術(shù)解決自身問題,從而帶來一定的經(jīng)濟(jì)效益。
本系統(tǒng)從 Hadoop的核心技術(shù) HDFS、MapReduce和 HBase入手,深入理解其工作流程,在對(duì)Hadoop的核心組件 Hadoop分布式文件系統(tǒng) HDFS和分布式計(jì)算模型 MapReduce進(jìn)行深入分析、研究的基礎(chǔ)上,搭建基于 Hadoop的云計(jì)算平臺(tái),通過實(shí)驗(yàn)有效驗(yàn)證該平臺(tái)可以完成分布式文本文件處理任務(wù)以及對(duì)文件文本內(nèi)容處理算法的改進(jìn)。
2.1 HDFS
Hadoop采用的是分布式存儲(chǔ)結(jié)構(gòu),讀寫速度有了極大的提高。同時(shí)是基于 Java語言來開發(fā)的,其HDFS分布式文件系統(tǒng)具有高容錯(cuò)的特性和超強(qiáng)的數(shù)據(jù)管理能力,圖1為HDFS體系結(jié)構(gòu)圖。
2.2 MapReduce
在Hadoop中,每一個(gè)MapReduce的任務(wù)都被初始化為一個(gè)job,每個(gè)job又可分為map和reduce階段。它們可用兩個(gè)功能函數(shù)來表示,即 map函數(shù)和reduce函數(shù)。map函數(shù)負(fù)責(zé)接收<key,value>形式的輸入,然后產(chǎn)生同形式的中間輸出結(jié)果,之后Hadoop將中間結(jié)果集合到一起傳遞給 reduce函數(shù),reduce函數(shù)再去接收<key,(list of values)>形式的輸入,最后進(jìn)行并行處理。圖 2描述了 MapRe-duce處理大數(shù)據(jù)集的具體流程。
圖1 HDFS體系結(jié)構(gòu)圖Fig.1 HDFS system structure
圖2 MapReduce處理過程Fig.2 MapReduce treating process
2.3 HBase
Hadoop的第3大核心技術(shù)就是 HBase,它是一個(gè)面向列的分布式數(shù)據(jù)庫,同時(shí)也是一種開源數(shù)據(jù)庫。相對(duì)于普通數(shù)據(jù)庫,HBase非常適合于非結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)。HBase還是一種基于列的模式存儲(chǔ)。
云計(jì)算平臺(tái)機(jī)群中包括3個(gè)節(jié)點(diǎn):1個(gè)Master和2個(gè) Slave。節(jié)點(diǎn)之間采用局域網(wǎng)連接并且相互之間可連通。
這3個(gè)節(jié)點(diǎn)上均是CentOS6系統(tǒng),Master虛擬機(jī)主要扮演NameNode和JobTracker的角色,另外的兩臺(tái) Salve虛擬機(jī)扮演 DataNode和 TaskTracker的角色。
3.1 Hadoop集群安裝
進(jìn)入hadoop的安裝目錄,進(jìn)入配置目錄conf。
修改hadoop-env.sh文件。
修改core-site.xml文件。
修改hdfs-site.xml文件。
修改mapred-site.xml文件。
修改masters和slaves文件。
向各個(gè)節(jié)點(diǎn)復(fù)制Hadoop:
3.2 Hadoop集群成功截圖
在瀏覽器里地址欄輸入“http://hadoop001∶50030/”,顯示結(jié)果如圖3。
圖3 50030界面Fig.3 50030 interface
在瀏覽器里地址欄輸入“http://hadoop001∶50070/”,顯示結(jié)果如圖4。
圖4 50070界面Fig.4 50070 interface
這樣就完成了Hadoop集群平臺(tái)的搭建。
4.1 運(yùn)行WordCount程序
創(chuàng)建本地示例文件。在 HDFS上創(chuàng)建輸入文件夾。上傳本地 file中文件到集群的 input目錄下。在集群上運(yùn)行 WordCount程序。以 input作為輸入目錄,output目錄作為輸出目錄。已經(jīng)編譯好的WordCount的Jar在"/usr/local/hadoop"下面。
此時(shí)可以通過之前搭建好的 Hadoop集群環(huán)境http://192.168.80.101∶50030/jobtracker.jsp的守護(hù)進(jìn)程監(jiān)控 MapReduce具體的運(yùn)行進(jìn)度情況,如圖 5所示。
圖5 50030界面Fig.5 50030 interface
4.2 改進(jìn)WordCount算法程序
本文在對(duì) Hadoop 分布式并行程序有了比較深入的了解之后,將 WordCount 程序改進(jìn)成具備以下兩點(diǎn)功能的程序:①改進(jìn)后的程序不僅能夠滿足單詞不區(qū)分字母大小寫,還能正確切分單詞;②最終的運(yùn)算結(jié)果將會(huì)按單詞出現(xiàn)的次數(shù)降序排序。
4.2.1 修改Mapper類,實(shí)現(xiàn)目標(biāo)①
要實(shí)現(xiàn)目標(biāo)①需修改 Mapper類,它需要實(shí)現(xiàn)Mapper 接口中的 map 方法。輸入的參數(shù)中值代表文本文件中的一行,利用 StringTokenizer方法將文本中的字符串拆成N個(gè)單詞,接著將樣式為<單詞,1>的輸出結(jié)果寫到 org.apache.hadoop.mapred.OutputCollector,然后再實(shí)現(xiàn) map和 reduce 函數(shù)的時(shí)候,只需要將其輸出的<key,value>對(duì)放入OutputCollector即可。
4.2.2 實(shí)現(xiàn)目標(biāo)②
此時(shí)需要利用Hadoop 任務(wù)管道傳輸能力,將詞頻統(tǒng)計(jì)的結(jié)果作為排序方法輸入,并且按順序依次執(zhí)行這兩個(gè)并行的計(jì)算任務(wù)。
為了實(shí)現(xiàn)按詞頻排序,需指定使用 InverseMapper 類作為排序任務(wù)的 Mapper 類,這個(gè)類的 map函數(shù)將輸入的 key(單詞)和 value(詞頻)互換后,然后作為中間結(jié)果輸出。
還有一個(gè)需要解決的問題,即按降序進(jìn)行排列。使用 Int Writable DecreasingComparator 類來實(shí)現(xiàn),并指定 Comparator 類對(duì)剛剛輸出數(shù)據(jù)中的 key進(jìn)行排序:sortJob.Set OutputKey Comparator Class(Int Writable Decreasing Comparator.class)。
本文采用1篇英語作文做為測(cè)試數(shù)據(jù),因?yàn)樗鼭M足混有大小寫、混有各種標(biāo)點(diǎn)符號(hào)的特點(diǎn),截圖如圖6所示。
圖6 測(cè)試數(shù)據(jù)英語作文截圖Fig.6 Screenshot of English writing testing data
采用原先的 WordCount程序運(yùn)行此測(cè)試數(shù)據(jù)并與改進(jìn)后的運(yùn)行結(jié)果作了對(duì)比,差異顯而易見。如圖7所示。
圖7 運(yùn)行結(jié)果對(duì)比Fig.7 Contrast of running results
4.3 文本數(shù)據(jù)去重算法研究
當(dāng)利用 Hadoop進(jìn)行數(shù)據(jù)去重時(shí),方法通常是將相同數(shù)據(jù)的所有記錄統(tǒng)一交給同一臺(tái) reduce機(jī)器,不論此數(shù)據(jù)出現(xiàn)幾次,最后輸出結(jié)果只輸出一次。具體做法就是將 reduce的輸入信息作為 key值,當(dāng)reduce成功接收到一個(gè)<key,value-list>時(shí),就立刻復(fù)制這個(gè)key值到輸出的key值中,同時(shí)value被設(shè)置成空值即可。
當(dāng) MapReduce開始執(zhí)行任務(wù)時(shí),map的輸出形式是<key,value>,經(jīng)過 shuffle過程之后,聚集成<key,value-list>后會(huì)交給reduce。
運(yùn)行成功得到圖8所示的結(jié)果。
圖8 數(shù)據(jù)去重結(jié)果Fig.8 Data duplicate removal results
4.4 分布式文本數(shù)據(jù)平均成績(jī)算法研究
計(jì)算學(xué)生平均成績(jī)其實(shí)就是一個(gè)模仿“WordCount”例子微變版本,同樣,程序依然只包括兩部分即 map部分和 reduce部分,目的在于實(shí)現(xiàn)map和reduce的功能。
和WordCount程序中的MapReduce部分的功能類似,map負(fù)責(zé)處理純文本文件。Mapper處理的文本數(shù)據(jù)是讓 InputFormat來分解成眾多的小數(shù)據(jù)集,而每個(gè)小數(shù)據(jù)集又交給單獨(dú)的 Mapper去統(tǒng)一處理。另外,InputFormat還提供 RecordReader的實(shí)現(xiàn),InputSplit被它解析成<key,value>形式對(duì)交給map函數(shù)。Map的結(jié)果最后由partion傳遞給Reducer,待Reducer完成reduce操作后,以格式OutputFormat來輸出。
Reducer收到 Mapper的最終處理結(jié)果<key,value>,它會(huì)進(jìn)行合并,將帶有相同的 key對(duì)交給同一個(gè)Reducer。Reduce的結(jié)果由Reducer.Context的write方法輸出到文件中。然后放入Eclipse里進(jìn)行調(diào)試。得到圖9所示的結(jié)果。
圖9 算平均成績(jī)運(yùn)行結(jié)果Fig.9 Running result of average scores
近幾年,隨著云計(jì)算技術(shù)的蓬勃發(fā)展,Hadoop作為云計(jì)算技術(shù)的一把利刃,已經(jīng)被運(yùn)用到諸多領(lǐng)域。本文對(duì)Hadoop的核心組件HDFS和MapReduce進(jìn)行深入分析,搭建基于 Hadoop的云計(jì)算平臺(tái),通過實(shí)驗(yàn)有效驗(yàn)證了該平臺(tái)可以完成分布式數(shù)據(jù)處理任務(wù)。
[1] 陳康,鄭緯民. 云計(jì)算:系統(tǒng)實(shí)例與研究現(xiàn)狀[J]. 軟件學(xué)報(bào),2009,20(5):1337-1348.
[2] 林清瀅. 基于 Hadoop的云計(jì)算模型[J]. 現(xiàn)代計(jì)算機(jī)月刊,2010(7):114-116.
[3] HDFS [EB/OL]. http://hadoop.Apache.org/common/ docs/r0. 20. 2/hdfs_user_guide. Html.
[4] Wikipedia. Cloud Computing[EB/OL]. http://en. wikipedia. org/wiki/Cloud_computing.
[5] Wang Y D,Que X Y,Yu W K,et al. DhirajSehgal-Hadoop acceleration through network levitated merge[C]. Proceedings of 2011 International Conference for High Performance Computing,Networking,Storage and Analysis,2011.
A Hadoop Cloud Platform Based Text Processing Algorithm:Research and Improvement
CHEN Jing1,2
(1.Tongji University,Shanghai 200092,China;2.China Tianjin ZhongShi Chemical Logistics Co.,Ltd.,Tianjin 300270,China)
Hadoop is an open source distributed computing platform under Apache Foundation.Taking HDFS(Hadoop Distributed File System)and MapReduce distributed computing framework as the core,it provides users with details of transparent distributed cloud infrastructure of the lower tier.Based on an in-depth analysis and study of Hadoop,a Hadoopbased cloud computing platform was established and distributed text file processing tasks and algorithms were completed.
cloud computing;Hadoop text processing;data deduplication algorithm;HDFS;MapReduce
TP311.1
A
1006-8945(2016)01-0052-04
2015-12-16