陳 靜
(1. 同濟大學 上海200092;2. 天津中石化工物流有限公司 天津300270)
基于Hadoop云計算平臺的文本處理算法的研究與改進
陳 靜1,2
(1. 同濟大學 上海200092;2. 天津中石化工物流有限公司 天津300270)
Hadoop是Apache基金會下的一個開源分布式計算平臺,以分布式文件系統HDFS(Hadoop Distributed File System)和 MapReduce分布式計算框架為核心,為用戶提供了底層細節透明的云分布式基礎設施。在對 Hadoop進行深入分析和研究的基礎上,搭建基于 Hadoop的云計算平臺,并完成分布式文本文件處理任務以及對文件文本內容處理算法的改進和實現。
云計算 Hadoop 數據去重算法 HDFS MapReduce
云計算是一種按使用量進行付費的模式,這種模式提供可用、便捷、按需的網絡訪問,使用可配置的計算資源共享池,共享池的資源包括網絡、服務器、存儲、應用軟件、服務等,這些資源能夠通過云計算平臺快速提供給客戶。它是分布式計算、并行計算、網格計算、多核計算、網絡存儲、虛擬化、負載均衡等傳統計算機技術和互聯網技術融合發展的產物,被稱為是繼大型計算機、個人計算機、互聯網之后的第4次IT產業革命,將成為帶動IT、物聯網、電子商務等諸多產業強勁增長、推動信息產業整體升級的基礎。而Hadoop是Apache基金會下的一款開源軟件,實現了包括分布式文件系統和MapReduce框架在內的云計算軟件平臺的基礎架構,并且在其上整合了包括數據庫、云計算管理、數據倉儲等一系列平臺,已成為工業界和學術界進行云計算應用和研究的標準平臺,旨在幫助更多的企業和個人認識和了解云計算相關技術,并利用此技術解決自身問題,從而帶來一定的經濟效益。
本系統從 Hadoop的核心技術 HDFS、MapReduce和 HBase入手,深入理解其工作流程,在對Hadoop的核心組件 Hadoop分布式文件系統 HDFS和分布式計算模型 MapReduce進行深入分析、研究的基礎上,搭建基于 Hadoop的云計算平臺,通過實驗有效驗證該平臺可以完成分布式文本文件處理任務以及對文件文本內容處理算法的改進。
2.1 HDFS
Hadoop采用的是分布式存儲結構,讀寫速度有了極大的提高。同時是基于 Java語言來開發的,其HDFS分布式文件系統具有高容錯的特性和超強的數據管理能力,圖1為HDFS體系結構圖。
2.2 MapReduce
在Hadoop中,每一個MapReduce的任務都被初始化為一個job,每個job又可分為map和reduce階段。它們可用兩個功能函數來表示,即 map函數和reduce函數。map函數負責接收<key,value>形式的輸入,然后產生同形式的中間輸出結果,之后Hadoop將中間結果集合到一起傳遞給 reduce函數,reduce函數再去接收<key,(list of values)>形式的輸入,最后進行并行處理。圖 2描述了 MapRe-duce處理大數據集的具體流程。

圖1 HDFS體系結構圖Fig.1 HDFS system structure

圖2 MapReduce處理過程Fig.2 MapReduce treating process
2.3 HBase
Hadoop的第3大核心技術就是 HBase,它是一個面向列的分布式數據庫,同時也是一種開源數據庫。相對于普通數據庫,HBase非常適合于非結構化的數據存儲。HBase還是一種基于列的模式存儲。
云計算平臺機群中包括3個節點:1個Master和2個 Slave。節點之間采用局域網連接并且相互之間可連通。
這3個節點上均是CentOS6系統,Master虛擬機主要扮演NameNode和JobTracker的角色,另外的兩臺 Salve虛擬機扮演 DataNode和 TaskTracker的角色。
3.1 Hadoop集群安裝
進入hadoop的安裝目錄,進入配置目錄conf。
修改hadoop-env.sh文件。
修改core-site.xml文件。
修改hdfs-site.xml文件。
修改mapred-site.xml文件。
修改masters和slaves文件。
向各個節點復制Hadoop:

3.2 Hadoop集群成功截圖
在瀏覽器里地址欄輸入“http://hadoop001∶50030/”,顯示結果如圖3。

圖3 50030界面Fig.3 50030 interface
在瀏覽器里地址欄輸入“http://hadoop001∶50070/”,顯示結果如圖4。

圖4 50070界面Fig.4 50070 interface
這樣就完成了Hadoop集群平臺的搭建。
4.1 運行WordCount程序
創建本地示例文件。在 HDFS上創建輸入文件夾。上傳本地 file中文件到集群的 input目錄下。在集群上運行 WordCount程序。以 input作為輸入目錄,output目錄作為輸出目錄。已經編譯好的WordCount的Jar在"/usr/local/hadoop"下面。
此時可以通過之前搭建好的 Hadoop集群環境http://192.168.80.101∶50030/jobtracker.jsp的守護進程監控 MapReduce具體的運行進度情況,如圖 5所示。

圖5 50030界面Fig.5 50030 interface
4.2 改進WordCount算法程序
本文在對 Hadoop 分布式并行程序有了比較深入的了解之后,將 WordCount 程序改進成具備以下兩點功能的程序:①改進后的程序不僅能夠滿足單詞不區分字母大小寫,還能正確切分單詞;②最終的運算結果將會按單詞出現的次數降序排序。
4.2.1 修改Mapper類,實現目標①
要實現目標①需修改 Mapper類,它需要實現Mapper 接口中的 map 方法。輸入的參數中值代表文本文件中的一行,利用 StringTokenizer方法將文本中的字符串拆成N個單詞,接著將樣式為<單詞,1>的輸出結果寫到 org.apache.hadoop.mapred.OutputCollector,然后再實現 map和 reduce 函數的時候,只需要將其輸出的<key,value>對放入OutputCollector即可。
4.2.2 實現目標②
此時需要利用Hadoop 任務管道傳輸能力,將詞頻統計的結果作為排序方法輸入,并且按順序依次執行這兩個并行的計算任務。
為了實現按詞頻排序,需指定使用 InverseMapper 類作為排序任務的 Mapper 類,這個類的 map函數將輸入的 key(單詞)和 value(詞頻)互換后,然后作為中間結果輸出。
還有一個需要解決的問題,即按降序進行排列。使用 Int Writable DecreasingComparator 類來實現,并指定 Comparator 類對剛剛輸出數據中的 key進行排序:sortJob.Set OutputKey Comparator Class(Int Writable Decreasing Comparator.class)。
本文采用1篇英語作文做為測試數據,因為它滿足混有大小寫、混有各種標點符號的特點,截圖如圖6所示。

圖6 測試數據英語作文截圖Fig.6 Screenshot of English writing testing data
采用原先的 WordCount程序運行此測試數據并與改進后的運行結果作了對比,差異顯而易見。如圖7所示。

圖7 運行結果對比Fig.7 Contrast of running results
4.3 文本數據去重算法研究
當利用 Hadoop進行數據去重時,方法通常是將相同數據的所有記錄統一交給同一臺 reduce機器,不論此數據出現幾次,最后輸出結果只輸出一次。具體做法就是將 reduce的輸入信息作為 key值,當reduce成功接收到一個<key,value-list>時,就立刻復制這個key值到輸出的key值中,同時value被設置成空值即可。
當 MapReduce開始執行任務時,map的輸出形式是<key,value>,經過 shuffle過程之后,聚集成<key,value-list>后會交給reduce。
運行成功得到圖8所示的結果。

圖8 數據去重結果Fig.8 Data duplicate removal results
4.4 分布式文本數據平均成績算法研究
計算學生平均成績其實就是一個模仿“WordCount”例子微變版本,同樣,程序依然只包括兩部分即 map部分和 reduce部分,目的在于實現map和reduce的功能。
和WordCount程序中的MapReduce部分的功能類似,map負責處理純文本文件。Mapper處理的文本數據是讓 InputFormat來分解成眾多的小數據集,而每個小數據集又交給單獨的 Mapper去統一處理。另外,InputFormat還提供 RecordReader的實現,InputSplit被它解析成<key,value>形式對交給map函數。Map的結果最后由partion傳遞給Reducer,待Reducer完成reduce操作后,以格式OutputFormat來輸出。
Reducer收到 Mapper的最終處理結果<key,value>,它會進行合并,將帶有相同的 key對交給同一個Reducer。Reduce的結果由Reducer.Context的write方法輸出到文件中。然后放入Eclipse里進行調試。得到圖9所示的結果。

圖9 算平均成績運行結果Fig.9 Running result of average scores
近幾年,隨著云計算技術的蓬勃發展,Hadoop作為云計算技術的一把利刃,已經被運用到諸多領域。本文對Hadoop的核心組件HDFS和MapReduce進行深入分析,搭建基于 Hadoop的云計算平臺,通過實驗有效驗證了該平臺可以完成分布式數據處理任務。
[1] 陳康,鄭緯民. 云計算:系統實例與研究現狀[J]. 軟件學報,2009,20(5):1337-1348.
[2] 林清瀅. 基于 Hadoop的云計算模型[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