岳雨儉
摘要:隨著互聯(lián)網(wǎng)行業(yè)和信息技術(shù)的發(fā)展,Google、IBM和Apache等大型公司紛紛投入去發(fā)展云計(jì)算,其中 Apache 開(kāi)發(fā)的 Hadoop 平臺(tái)是一個(gè)對(duì)用戶極為友好的開(kāi)源云計(jì)算框架。該文就是要基于Hadoop框架去設(shè)計(jì)和實(shí)現(xiàn)分布式網(wǎng)絡(luò)爬蟲(chóng)技術(shù),以完成大規(guī)模數(shù)據(jù)的采集,其中采用 Map/Reduce 分布式計(jì)算框架和分布式文件系統(tǒng),來(lái)解決單機(jī)爬蟲(chóng)效率低、可擴(kuò)展性差等問(wèn)題,提高網(wǎng)頁(yè)數(shù)據(jù)爬取速度并擴(kuò)大爬取的規(guī)模。
關(guān)鍵詞:云計(jì)算;分布式網(wǎng)絡(luò)爬蟲(chóng);Hadoop
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)08-0036-0c
Abstract: with the rapid development of the Internet industry and information technology, Google, IBM and Apache and other Large Firm are input to the development of cloud computing, in which Apache Hadoop development platform is a very friendly to users of open source cloud computing framework. This paper is based on the Hadoop framework to design and implementation of a distributed web crawler technology, to complete the large-scale data collection, in which the Map/Reduce distributed computing framework and distributed file system, to solve the single crawler low efficiency, poor scalability issues, improve the Webpage crawling speed and expand the scale of crawling.
Key words: cloud computing; distributed web crawler; Hadoop
1 緒論
隨著互聯(lián)網(wǎng)快速的發(fā)展,web信息迅速增長(zhǎng),數(shù)據(jù)量大且種類多,需要把分散的計(jì)算機(jī)構(gòu)建成一個(gè)系統(tǒng)整體,計(jì)算機(jī)之間分工協(xié)作,減少節(jié)點(diǎn)之間的分散,提高網(wǎng)絡(luò)爬蟲(chóng)的性能。海量且冗雜的數(shù)據(jù)使得普通的數(shù)據(jù)庫(kù)已經(jīng)不能很好地完成存取,但是分布式文件系統(tǒng)為這樣的數(shù)據(jù)存儲(chǔ)提供了強(qiáng)大的支持。且隨著互聯(lián)網(wǎng)中處理海量數(shù)據(jù)的要求不斷增高,云計(jì)算就應(yīng)運(yùn)而生,云計(jì)算框架也被運(yùn)用于眾多的IT行業(yè)中。因此,當(dāng)下對(duì)基于Hadoop的分布式網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的研究也有著巨大的意義。
2 相關(guān)理論與技術(shù)
2.1 云計(jì)算
云計(jì)算是一種共享的為網(wǎng)絡(luò)提供信息交付的模式,將互聯(lián)網(wǎng)中大量的計(jì)算機(jī)聯(lián)合起來(lái)協(xié)同地提供計(jì)算、存儲(chǔ)和軟硬件等服務(wù),為實(shí)現(xiàn)超級(jí)計(jì)算提供了支持。用戶可以充分地利用網(wǎng)絡(luò)聯(lián)系集中的每一臺(tái)電腦進(jìn)行計(jì)算或存儲(chǔ)。一般的云計(jì)算體系結(jié)構(gòu)如圖1所示:
2.2 Hadoop
Hadoop 的框架結(jié)構(gòu)主要是由分布式文件系統(tǒng)(HDFS)和Map/Reduce 計(jì)算模型兩部分組成。其中,Map/Reduce 計(jì)算模型是編程模型,如圖2所示是Hadoop的分布式平臺(tái)框架。
從圖上可以看出,最底層是物理的計(jì)算機(jī)節(jié)點(diǎn),這些節(jié)點(diǎn)通過(guò)HDFS聯(lián)系整合到一起;Map/Reduce把任務(wù)分成若干子任務(wù)分配到不同的節(jié)點(diǎn)去實(shí)現(xiàn)分布式編程,而不必考慮各節(jié)點(diǎn)之間是如何共同協(xié)作完成的,這樣就減輕了程序員的負(fù)擔(dān)。
3 系統(tǒng)分析與設(shè)計(jì)
3.1 系統(tǒng)布局
本系統(tǒng)是基于hadoop的分布式搜索引擎而設(shè)計(jì)的,爬蟲(chóng)技術(shù)是也是引擎中的一部分,系統(tǒng)可以分成搜索引擎和云計(jì)算平臺(tái),構(gòu)架如圖3所示:
搜索引擎分為分布式網(wǎng)絡(luò)爬蟲(chóng)、索引、檢索以及界面展示等模塊,前三個(gè)模塊都用到了分布式計(jì)算框架來(lái)并處處理任務(wù)。分布式搜索引擎的功能模塊如圖4所示:
該引擎的工作過(guò)程:首先,數(shù)據(jù)采集模塊需要獲取海量的數(shù)據(jù)作為數(shù)據(jù)源,就要根據(jù)URL鏈接在網(wǎng)絡(luò)中不斷地爬取網(wǎng)頁(yè)文件,將這些獲取的文件存儲(chǔ)到HDFS文件系統(tǒng)中,并對(duì)這些文件進(jìn)行解析有效數(shù)據(jù)。然后,利用分詞技術(shù)對(duì)文件內(nèi)容進(jìn)行處理,再將得到的詞串提供給索引模塊并建立索引。當(dāng)用戶通過(guò)查詢界面進(jìn)行關(guān)鍵詞查詢時(shí),依次進(jìn)行查詢器的初次處理、分詞處理,之后得到關(guān)鍵詞串并將這些關(guān)鍵詞串傳輸?shù)綑z索器,檢索結(jié)果經(jīng)過(guò)排序后返回給用戶。
3.2 分布式網(wǎng)絡(luò)爬蟲(chóng)框架結(jié)構(gòu)設(shè)計(jì)
將分布式網(wǎng)絡(luò)爬蟲(chóng)模塊按照爬蟲(chóng)流程進(jìn)行劃分,劃分成五個(gè)模塊,分別為:URL分割注入模塊、網(wǎng)頁(yè)獲取模塊、網(wǎng)頁(yè)解析模塊、鏈接過(guò)濾模塊和數(shù)據(jù)存儲(chǔ)模塊。模塊圖如圖5所示:
按照模塊之間的聯(lián)系和功能,并遵循廣度遍歷的爬取要求,本分布式網(wǎng)絡(luò)爬蟲(chóng)的詳細(xì)流程如圖6所示:
4 分布式爬蟲(chóng)實(shí)現(xiàn)
4.1 爬蟲(chóng)總體設(shè)計(jì)結(jié)構(gòu)
本爬蟲(chóng)系統(tǒng)在hadoop的基礎(chǔ)上進(jìn)行開(kāi)發(fā)的,依照類的不同功能進(jìn)行劃分,可以分為主類和功能類,關(guān)系圖如圖7所示:
其中,Crawler 類為主類,是整個(gè)網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)的入口,當(dāng) Crawler 類運(yùn)行時(shí),就調(diào)用 log4j 記錄爬行的信息并保存到日志中,當(dāng)準(zhǔn)備好所有爬蟲(chóng)爬取工作后,接著分別調(diào)用五大模塊,分別進(jìn)行相關(guān)任務(wù)和信息處理。
4.2 功能模塊的實(shí)現(xiàn)
1)網(wǎng)頁(yè)獲取模塊
URL 分割注入模塊簡(jiǎn)單,在此就不冗述,執(zhí)行完URL 分割注入模塊后即進(jìn)入網(wǎng)頁(yè)獲取模塊,此模塊充分利用并行處理計(jì)算的能力,是爬蟲(chóng)的關(guān)鍵部分。此模塊涉及四個(gè)類,四個(gè)類之間的關(guān)系如圖8所示:
DownPage 類:實(shí)現(xiàn) Tool 接口,是網(wǎng)頁(yè)獲取模塊的入口,負(fù)責(zé)配置抓取任務(wù)和啟動(dòng) Map/Reduce并行處理任務(wù)。
DownloadMapper 類:實(shí)現(xiàn)了 Mapper 接口中的 map()函數(shù),即啟動(dòng)多個(gè) DownloadThread 線程,將映射數(shù)據(jù)作為中間數(shù)據(jù)輸出。
DownloadReducer 類:實(shí)現(xiàn)Reducer 接口中的 reduce()函數(shù),即可接收 Map 輸出的中間數(shù)據(jù)并對(duì)其進(jìn)行合并。
DownloadThread 類:繼承java.lang.Thread 類并實(shí)現(xiàn)多線程并發(fā)的網(wǎng)頁(yè)下載。
2)網(wǎng)頁(yè)解析模塊
該網(wǎng)頁(yè)解析模塊包括了對(duì)不同類型數(shù)據(jù)的解析,首先進(jìn)行讀取抓獲結(jié)果,然后進(jìn)行類型判斷,然后對(duì)不同的類型進(jìn)行解析,解析類型包括HTML解析、Doc解析、PDF解析、PPT解析和Excel解析。
與網(wǎng)頁(yè)獲取模塊一樣都使用了Map/Reduce 計(jì)算模式,由三個(gè)類構(gòu)成,分別是HtmlParser 類、ParseMapper 類和ParseReducer 類。 HtmlParser 類實(shí)現(xiàn)了tool接口,ParseMapper 類實(shí)現(xiàn)Mapper接口,ParseReducer 類實(shí)現(xiàn)reducer接口,其具體工作實(shí)現(xiàn)和網(wǎng)頁(yè)獲取模塊類似。
3)鏈接去重過(guò)濾模塊
由于檢索到的網(wǎng)頁(yè)中有很多是不合乎標(biāo)準(zhǔn)規(guī)范的鏈接,必須對(duì)這些鏈接進(jìn)行相應(yīng)處理,對(duì)不標(biāo)準(zhǔn)的鏈接進(jìn)行規(guī)范化處理,對(duì)重復(fù)的鏈接進(jìn)行去重處理。每一個(gè)過(guò)濾模塊都包含這兩個(gè)功能,且由單獨(dú)的過(guò)濾器實(shí)現(xiàn)。其中規(guī)范化過(guò)濾是先把所有的字符串進(jìn)行大小寫(xiě)統(tǒng)一轉(zhuǎn)換,即大寫(xiě)轉(zhuǎn)換為小寫(xiě),然后刪除無(wú)意義的字符。
4)數(shù)據(jù)存儲(chǔ)更新模塊
Hadoop 的文件系統(tǒng)HDFS是一個(gè)可以滿足使數(shù)據(jù)存儲(chǔ)在穩(wěn)定且可以并發(fā)訪問(wèn)的系統(tǒng),此模塊包含三個(gè)類,分別是類 Update、類 URLInfo和類 HTMLPage。數(shù)據(jù)庫(kù)的讀寫(xiě)操作封裝在update類中,類 URLInfo和類 HTMLPage實(shí)現(xiàn)Comparable 接口和readFields 、 write 方法。
5 總結(jié)
本文先從目前的海量數(shù)據(jù)搜索入手,闡述基于Hadoop 平臺(tái)的分布式爬蟲(chóng)研究現(xiàn)狀和研究意義,再而研究分析了與此相關(guān)的技術(shù)和理論,并提出了該爬蟲(chóng)技術(shù)的整體布局設(shè)計(jì),并對(duì)系統(tǒng)的模塊進(jìn)行了劃分,并對(duì)各模塊的功能設(shè)計(jì)進(jìn)行實(shí)現(xiàn),用java語(yǔ)言實(shí)現(xiàn)了該分布式網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)的開(kāi)發(fā)。
參考文獻(xiàn):
[1] 陳俊,陳孝威.基于 Hadoop 建立云計(jì)算系統(tǒng)[J].貴州大學(xué)學(xué)報(bào) (自然科學(xué)版),2011, 28(3).
[2] 程錦佳.基于 Hadoop 的分布式爬蟲(chóng)及其實(shí)現(xiàn)[D].北京郵電大學(xué),2010.
[3] Evangelinos C, Hill C. Cloud Computing for parallel Scientific HPC Applications: Feasibility of running Coupled Atmosphere-Ocean Climate Models on Amazons EC2[J]. ratio,2008,2(2.40):2.34.
[4] 王俊生,施運(yùn)梅,張仰森.基于 Hadoop 的分布式搜索引擎關(guān)鍵技術(shù)[J].北京信息科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2011,04:53-56+61.
[5] IBM CLOUD [EB/OL].http://www.ibm.com/cloud-computing/us/en/