徐海嘯+董颯+李翔+于洪梅+吳旗
摘要 互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展帶了網(wǎng)絡(luò)信息的爆炸式增長(zhǎng),互聯(lián)網(wǎng)已經(jīng)成為了企業(yè),機(jī)構(gòu)和個(gè)人發(fā)布信息的主要平臺(tái)。據(jù)CNNIC(中國(guó)互聯(lián)網(wǎng)絡(luò)信息中心)發(fā)布的2015年中國(guó)網(wǎng)民搜索行為研究報(bào)告中指出,截止到2015年12月,我國(guó)搜索引擎用戶達(dá)到了5.66億,使用率為82.3%,手機(jī)搜索用戶達(dá)4.78億,使用率為77.1%?;ヂ?lián)網(wǎng)的發(fā)展速度日益加快,隨之而來(lái)的是爆炸式的信息體量的增長(zhǎng)。傳統(tǒng)的搜索引擎已經(jīng)不能夠滿足一些企業(yè)和單位內(nèi)部的個(gè)性化檢索的需求。本文將對(duì)通用爬蟲(chóng)框架Crawlzilla做簡(jiǎn)要的分析,并說(shuō)明其在企業(yè)內(nèi)部制定個(gè)性檢索服務(wù)的可行性。
【關(guān)鍵詞】爬蟲(chóng) Crawlzilla 搜索引擎
1引言
互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展帶了網(wǎng)絡(luò)信息的爆炸式增長(zhǎng),互聯(lián)網(wǎng)己經(jīng)成為了企業(yè),機(jī)構(gòu)和個(gè)人發(fā)布信息的主要平臺(tái),隨著互聯(lián)網(wǎng)用戶的激增,網(wǎng)絡(luò)上也充斥這各種虛假、冗余等信息。如何能在如此海量的信息中快速、精確的發(fā)現(xiàn)自己想要的信息是一個(gè)具有挑戰(zhàn)性的工作。網(wǎng)絡(luò)爬蟲(chóng)技術(shù)應(yīng)運(yùn)而生,網(wǎng)絡(luò)爬蟲(chóng)(又被稱為網(wǎng)頁(yè)蝴蛛,網(wǎng)絡(luò)機(jī)器人,在FOAF社區(qū)中間,更經(jīng)常的稱為網(wǎng)頁(yè)追逐者),是一種按照一定的規(guī)則,自動(dòng)地抓取萬(wàn)維網(wǎng)信息的程序或者腳本,簡(jiǎn)單的說(shuō),網(wǎng)絡(luò)爬蟲(chóng)技術(shù)就是可以運(yùn)用自己定義的搜索策略在互聯(lián)網(wǎng)的大數(shù)據(jù)倉(cāng)庫(kù)中找到你想要的信息。網(wǎng)絡(luò)的爬蟲(chóng)的主要功能就是為搜索引擎提供搜索的數(shù)據(jù)源,隨著分布式計(jì)算、網(wǎng)格計(jì)算、云計(jì)算等并行計(jì)算技術(shù)的發(fā)展,使得大規(guī)模數(shù)據(jù)處理和海量數(shù)據(jù)分布式存儲(chǔ)技術(shù)得以發(fā)展,這也對(duì)網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的研究和發(fā)展具有重大意義。首先,互聯(lián)網(wǎng)上的信息都是分散地存儲(chǔ)在不同的網(wǎng)絡(luò)中的不同服務(wù)器上的,其特點(diǎn)是并不集中,為了提高信息的抓取速度可以采用并行抓取的方式,將分散在網(wǎng)絡(luò)上的機(jī)器組成計(jì)算集群分布式抓??;其次,互聯(lián)網(wǎng)上的信息體量比較龐大,網(wǎng)絡(luò)爬蟲(chóng)抓取到的數(shù)據(jù)有可能也很多,需要一個(gè)大的數(shù)據(jù)倉(cāng)庫(kù)來(lái)存儲(chǔ)這些抓取到的數(shù)據(jù),分布式存儲(chǔ)可以很容易的解決這個(gè)問(wèn)題。Crawlzilla底層采用分布式數(shù)據(jù)處理框架Hadoop,Hadoop具有高可靠性、高擴(kuò)展性、高效性、高容錯(cuò)性、低成本的優(yōu)點(diǎn),使得任何一個(gè)機(jī)構(gòu)或者個(gè)人都可以輕松的搭建自己的搜索引擎。
2網(wǎng)絡(luò)爬蟲(chóng)的基本原理
網(wǎng)絡(luò)爬蟲(chóng)從本質(zhì)上來(lái)說(shuō)就是一個(gè)基于HTTP協(xié)議的計(jì)算機(jī)程序,網(wǎng)絡(luò)爬蟲(chóng)需要完成的主要工作就是從互聯(lián)網(wǎng)上抓取網(wǎng)頁(yè),文檔等數(shù)據(jù),并存儲(chǔ)到本地作為搜索引擎的數(shù)據(jù)源,其工作流程如圖一所示。網(wǎng)絡(luò)爬蟲(chóng)作為搜索引擎的核心部分,其在啟動(dòng)前需要選擇一些URL作為種子,這些種子可以人為指定也可以通過(guò)算法篩選出一些可信度較高的URL。當(dāng)網(wǎng)絡(luò)爬蟲(chóng)啟動(dòng)后,就會(huì)按照這些種子去抓取相應(yīng)的網(wǎng)頁(yè),而抓取到的網(wǎng)頁(yè)中還會(huì)包含大量的URL,這些URL與最初的種子之間就有了一定的邏輯關(guān)系,如果要繼續(xù)抓取就涉及到了采用什么抓取策略的問(wèn)題,常用的策略是深度優(yōu)先和廣度優(yōu)先。選定了抓取策略后,就按照這種抓取策略繼續(xù)抓取符合條件的URL,直到遇到空網(wǎng)頁(yè)或者終止條件為止。綜上就是網(wǎng)絡(luò)爬蟲(chóng)工作的原理。
3Crawlzilla介紹
Crawlzilla是一個(gè)基于集群的搜索引擎部署工具。它可以幫助用戶建立集群中的搜索引擎,提供了管理機(jī)制(如:集群管理,爬管理,索引池管理)。它以nutch項(xiàng)目為核心,底層使用Hadoop并行數(shù)據(jù)處理框架,并整合更多相關(guān)套件,系統(tǒng)的架構(gòu)圖如圖2。
3.1Hadoop
Hadoop是Apache的一個(gè)開(kāi)源的可運(yùn)行于大規(guī)模集群上的分布式文件系統(tǒng)和應(yīng)用程序處理基礎(chǔ)框架,Hadoop擅長(zhǎng)于在廉價(jià)機(jī)器搭建的集群上進(jìn)行海量數(shù)據(jù)(結(jié)構(gòu)化與非結(jié)構(gòu)化)的存儲(chǔ)與離線處理。Hadoop框架中最重要的兩個(gè)設(shè)計(jì)師:MapReduce和HDFS。MapReduce的思想就是“分而治之”。HDFS是Hadoop底層文件系統(tǒng)提供了一個(gè)對(duì)用戶來(lái)說(shuō)完全透明的分布式文件系統(tǒng)的架構(gòu)。其實(shí)縱觀Hadoop的框架不難發(fā)現(xiàn),其實(shí)現(xiàn)的根本思想就是遷移計(jì)算。在分布式計(jì)算系統(tǒng)中,遷移數(shù)據(jù)的代價(jià)要比遷移計(jì)算的代價(jià)高得多,Hadoop就是在分布式系統(tǒng)中遷移了計(jì)算任務(wù),也就是“分而治之的思想”,將要處理的數(shù)據(jù)也“分而存儲(chǔ)”,每份存儲(chǔ)利用本地資源進(jìn)行計(jì)算,最終把所有的計(jì)算結(jié)果歸總,充分發(fā)揮了分布式系統(tǒng)的計(jì)算性能,因此而高效。
MapReduce最開(kāi)始的設(shè)計(jì)初衷是用來(lái)分析海量數(shù)據(jù)用的。同時(shí)由于HDFS是Google自己開(kāi)發(fā)的文件系統(tǒng),所以它的設(shè)計(jì)初衷是服務(wù)于搜索引擎的,它們最開(kāi)始都不是用到分布式系統(tǒng)中的,但是由于他們自身的特點(diǎn),最終都被用到了分布式系統(tǒng)中,并取得了非常好的應(yīng)用效果。
3.1.1MapReduce并行編程模型
在MapReduce編程模型中,主要有兩個(gè)操作,一個(gè)是Mapper,一個(gè)是reducer,他們相互配合,最終可以完成理論上任何規(guī)模的并行計(jì)算任務(wù)。下面具體介紹一下這倆個(gè)MapReduce編程模型中最重要的倆個(gè)操作。首先,Mapper,它的作用就是將用戶提交到系統(tǒng)的一個(gè)大作業(yè)分解成為一個(gè)個(gè)可以被每個(gè)計(jì)算接待你處理的小作業(yè),而reducer的功能則是負(fù)責(zé)把mapper處理完成后的輸出文件結(jié)合到一起,最后得出結(jié)果。其實(shí),縱觀整個(gè)Mapreduce模型,其實(shí)它的實(shí)現(xiàn)思想非常的簡(jiǎn)單,就是“分而治之”,再把每部分的結(jié)果匯總成一個(gè)完整的輸出結(jié)果。這不是什么新思想,歸納起來(lái)就是一個(gè)分解再集合的過(guò)程。其實(shí)Mapreduce變成模型做的工作有點(diǎn)像是一個(gè)集中的調(diào)度器做的工作,它首先把可以執(zhí)行作業(yè)的硬件資源看成是一個(gè)可以利用的資源池,然后每個(gè)任務(wù)是需要這些資源池中拿出合適的資源來(lái)提供計(jì)算支持,那么為了能夠充分發(fā)揮硬件資源的效率,也就是更高效的利用底層的硬件資源以達(dá)到最快的執(zhí)行速度,就需要把作業(yè)進(jìn)行分解,然后處理,在集合。綜上的任務(wù)分解、計(jì)算再集合的過(guò)程就是MapReduce的工作流程。
3.1.2HDFS文件系統(tǒng)endprint
整個(gè)HDFS系統(tǒng)中主要有三個(gè)重要部分,這三部分分別是:NameNode、DataNode和Client。其中在HDFS中NameNode是主要的管理員,負(fù)責(zé)整個(gè)系統(tǒng)的協(xié)調(diào)工作,包括域名解析、數(shù)據(jù)同步等。NameNode會(huì)將整個(gè)系統(tǒng)的元數(shù)據(jù)存儲(chǔ)在自己的內(nèi)存中,這也說(shuō)明了為什么Namenode需要一個(gè)內(nèi)存比較大的機(jī)器做比較合適,這些元數(shù)據(jù)主要是為了用戶提交數(shù)據(jù)操作的時(shí)候能夠快速的找到數(shù)據(jù),它里面存儲(chǔ)的主要信息就是每個(gè)文件的頭信息,以及這個(gè)文件被分成了幾分,每一份都被存儲(chǔ)在了那個(gè)datanode上,己經(jīng)這些數(shù)據(jù)副本的存儲(chǔ)位置,由于Hadoop框架中只有一臺(tái)namenode,所以它的穩(wěn)定和安全是至關(guān)重要的,這也是Hadoop框架中唯一的一個(gè)存在單點(diǎn)故障的地方。DataNode是真正的存儲(chǔ)容器,也就是說(shuō)真正的數(shù)據(jù)都是存儲(chǔ)在datanode上的,它的存儲(chǔ)方式是把一個(gè)大文件分成了很多不同的小的blcck保存在底層的HDFS中,如果它的信息發(fā)生了變化,他也會(huì)把自己的信息同步給存儲(chǔ)它元數(shù)據(jù)的namenode。
3.2Nutch
Nutch是一個(gè)開(kāi)源Java實(shí)現(xiàn)的搜索引擎。它提供了我們運(yùn)行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬蟲(chóng)。盡管Web搜索是漫游Internet的基本要求,但是現(xiàn)有web搜索引擎的數(shù)目卻在下降。并且這很有可能進(jìn)一步演變成為一個(gè)公司壟斷了幾乎所有的web搜索為其謀取商業(yè)利益。這顯然不利于廣大Internet用戶。Nutch為我們提供了這樣一個(gè)不同的選擇.,相對(duì)于那些商用的搜索引擎,Nutch作為開(kāi)放源代碼搜索引擎將會(huì)更加透明,從而更值得大家信賴。Nutch初始開(kāi)發(fā)出來(lái)時(shí),是一個(gè)完整的開(kāi)源搜索引擎,在Nutchl.3版本之后,Nutch將搜索部分剔除,保留了網(wǎng)絡(luò)爬蟲(chóng)部分。Nutch的創(chuàng)始人是DougCutting,他同時(shí)也是Lucene、Hadoop和Avro開(kāi)源項(xiàng)目的創(chuàng)始人。在Nutch2.X版本后,Nutch引入了Gom對(duì)象映射存儲(chǔ)框架,從而支持?jǐn)?shù)據(jù)庫(kù)操作。Nutch中的文件操作是基于HDFS,采用MapReduce軟件框架實(shí)現(xiàn)海量網(wǎng)頁(yè)數(shù)據(jù)的處理。另外,Nutch提供了靈活的插件系統(tǒng),開(kāi)發(fā)者可以根據(jù)不同的情況對(duì)Nutch進(jìn)行二次開(kāi)發(fā),構(gòu)造適合不同應(yīng)用場(chǎng)景的網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)。
3.3Lucene
Lucene是apache軟件基金會(huì)jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開(kāi)放源代碼的全文檢索引擎工具包,但它不是一個(gè)完整的全文檢索引擎,而是一個(gè)全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語(yǔ)言)。Lucene的目的是為軟件開(kāi)發(fā)人員提供一個(gè)簡(jiǎn)單易用的工具包,以方便的在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。Lucene是一套用于全文檢索和搜尋的開(kāi)源程式庫(kù),由Apache軟件基金會(huì)支持和提供。Lucene提供了一個(gè)簡(jiǎn)單卻強(qiáng)大的應(yīng)用程式接口,能夠做全文索引和搜尋。在Java開(kāi)發(fā)環(huán)境里L(fēng)ucene是一個(gè)成熟的免費(fèi)開(kāi)源工具。作為一個(gè)開(kāi)放源代碼項(xiàng)目,Lucene從問(wèn)世之后,引發(fā)了開(kāi)放源代碼社群的巨大反響,程序員們不僅使用它構(gòu)建具體的全文檢索應(yīng)用,而且將之集成到各種系統(tǒng)軟件中去,以及構(gòu)建Web應(yīng)用,甚至某些商業(yè)軟件也采用了Lucene作為其內(nèi)部全文檢索子系統(tǒng)的核心。Lucene以其開(kāi)放源代碼的特性、優(yōu)異的索引結(jié)構(gòu)、良好的系統(tǒng)架構(gòu)獲得了越來(lái)越多的應(yīng)用。Lucene是一個(gè)高性能、可伸縮的信息搜索(IR)庫(kù)。它可以為你的應(yīng)用程序添加索引和搜索能力。
4結(jié)語(yǔ)
雖然Google,Yahoo等IT巨頭己經(jīng)提供的比較完善的搜索功能,但是由于涉及到商業(yè)信息等因素,會(huì)搜索到很多冗余和不想要的信息,這并不適合機(jī)構(gòu)內(nèi)部網(wǎng)站。本文對(duì)Crawlzilla的總體框架和各個(gè)主要的組成部分做了介紹,其所有的組成部分都是基于開(kāi)源的項(xiàng)目,對(duì)任何一個(gè)機(jī)構(gòu)或者個(gè)人來(lái)說(shuō)搭建一個(gè)這樣的基于集群的分布式搜索引擎幾乎都是不需要太大的成本的。不過(guò),這并不意味這Crawlzilla就是一個(gè)性能很低劣的網(wǎng)絡(luò)爬蟲(chóng)框架,由于底層采用Hadoop并行數(shù)據(jù)處理框架,使得Crawlzilla也可以高效的運(yùn)行。
參考文獻(xiàn)
[1]何國(guó)正.分布式智能網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)[D].中國(guó)科學(xué)院大學(xué)(工程管理與信息技術(shù)學(xué)院),2016.
[2]王霓虹,張露露.分布式爬蟲(chóng)任務(wù)調(diào)度策略的優(yōu)化[J].黑龍江大學(xué)自然科學(xué)學(xué)報(bào),2016(05):671-675+701.
[3]李松.基于Hadoop的分布式網(wǎng)絡(luò)爬蟲(chóng)研究[D].電子科技大學(xué),2016.
[4]孔濤,曹丙章,邱荷花.基于MapReduce的視頻爬蟲(chóng)系統(tǒng)研究[J].華中科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2015(05):129-132.endprint