徐海嘯+董颯+李翔+于洪梅+吳旗


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