摘 要:Nutch作為一個在2002年興起于Apache開源項目的開源搜索引擎,經(jīng)過十多年的發(fā)展,無論在抓取速度、抓取效率還是部署方便性上,都更加成熟,被越來越多的人認可。HBase作為Apache開源項目下的著名分布式的、面向列的開源數(shù)據(jù)庫,有著強大的可擴展性和極高的按行健查找效率。二者與大數(shù)據(jù)這一概念相伴而生,二者的結(jié)合也必將在大數(shù)據(jù)時代有所作為。
關(guān)鍵詞:Nutch;HBase;大數(shù)據(jù)
中圖分類號:TP393.09;TP333
搜索引擎能根據(jù)一定的算法或者規(guī)則,運用計算機程序從互聯(lián)網(wǎng)上抓取信息,并在組織、處理和索引信息之后,為用戶提供檢索類服務(wù)。Nutch2.x版本通過使用Apache Gora處理對象的持久映射,使得存儲從特定的底層數(shù)據(jù)存儲分離出來。這意味著我們可以實現(xiàn)Nutch與眾多NoSQL存儲解決方案相集成。HBase,一種面向列的分布式存儲系統(tǒng),具有高可靠性、高性能、可伸縮的優(yōu)點,利用HBase可在廉價PC上搭建起大規(guī)模集群。在致力于起源于開源項目Nutch的大數(shù)據(jù)處理方面,二者結(jié)合所帶來的優(yōu)勢不言而喻。
1 需求分析
隨著多元化新興媒體形態(tài)不斷出現(xiàn),互聯(lián)網(wǎng)上的數(shù)據(jù)每年將增長50%,并且目前世界上90%以上的數(shù)據(jù)是最近幾年才產(chǎn)生的。搜索引擎作為連接受眾和互聯(lián)網(wǎng)海量信息的窗口,發(fā)揮著重要作用。而傳統(tǒng)通用搜索引擎難以滿足企業(yè)或者個人的定制化需要,難以準確判別用戶感興趣的信息并提供相應(yīng)的搜索服務(wù),為解決這些問題,Nutch應(yīng)運而生。
反觀儲存層面,當代典型的關(guān)系型數(shù)據(jù)庫在大數(shù)據(jù)的應(yīng)用中越來越乏力,例如為巨量文檔建立索引、高流量網(wǎng)站的網(wǎng)頁服務(wù),以及發(fā)送流式媒體等方面。而以HBase為代表的NoSQL能實現(xiàn)數(shù)據(jù)高并發(fā)讀寫,海量數(shù)據(jù)存儲和訪問,高擴展性,這些優(yōu)點使得它在處理Nutch抓取到的海量數(shù)據(jù)時游刃有余。
2 系統(tǒng)體系結(jié)構(gòu)設(shè)計
2.1 系統(tǒng)框架
圖1 系統(tǒng)框架結(jié)構(gòu)圖
如圖1所示,Nutch網(wǎng)絡(luò)爬蟲不斷搜索Internet來搜尋新網(wǎng)頁,或者更新過的網(wǎng)頁,網(wǎng)頁獨立的存儲在HBase中,等待索引。通過MapReduce對抓取到的網(wǎng)頁進行索引,以提高用戶搜索的方便性和準確性。最后用戶通過搜索程序入口提交目標關(guān)鍵詞,通過索引在HBase中找到相關(guān)記錄,并返回給用戶。
2.2 Nutch工作過程
圖2 Nutch工作過程
(1)Injector注入目標URL列表。從用戶指定的urlDir目錄下,獲取URL列表內(nèi)容,并進行格式化、過濾,消除其中的不合法地址,設(shè)定抓取狀態(tài)(fetched和unfetched)和初始分值;將URL及其狀態(tài)、分值存人CrawlDB數(shù)據(jù)庫,或更新已有內(nèi)容成最新的;(2)Generator產(chǎn)生成抓取列表。從CrawlDB數(shù)據(jù)庫中將地址取出,按一定規(guī)則進行過濾和排序;最后將生成的列表寫入segments中;(3)Fetcher抓取網(wǎng)頁。對segments下的抓取列表順序抓取。在抓取過程中,頁面的地址可能會發(fā)生跳轉(zhuǎn),需要重定向。該過程采用多線程方式,獲得頁面源文件后同時進行下一步操作,即解析內(nèi)容;(4)解析網(wǎng)頁內(nèi)容。解析segments目錄中由Fetcher抓取到的頁面,將頁面分解到parse_date和parse_text目錄下。其中,parse_date中保存頁面的標題、輸入輸出鏈接等內(nèi)容;parse_text中保存頁面的文本內(nèi)容;(5)更新CrawlDB及反轉(zhuǎn)鏈接。根據(jù)segments目錄下的crawl_fetch和crawl_parse來更新CrawlDB,增添新的待抓取URL地址。Invert Links統(tǒng)計外部頁面對本頁面鏈接,并更新LinkDB,為建立索引的工作提供準備;(6)Indexer建立索引及索引去重。該過程生成Lucene索引,將本地數(shù)據(jù)轉(zhuǎn)換成文本,并進行分析,并將已分析的文本保存到數(shù)據(jù)庫中。
3 系統(tǒng)部署及實現(xiàn)
3.1 Nutch及HBase安裝部署
(1)Nutch 在Eclipse下的配置過程。使用svn從nutch官方網(wǎng)站直接檢出項目到本地后,配置項目路徑,刪除項目文件夾下src文件夾,隨后添加部分的java和test文件夾。由于Nutch在版本1.2之后,使用ivy來進行依賴管理。因此要添加IvyDE依賴庫,使用ivy下ivy.xml作為依賴庫,最后進行ant;(2)Ubuntu終端下直接配置HBase。在終端下,使用wget工具下載zookeeper,并編輯zoo.cfg文件。為防止在負載壓力過大,linux默認文件句柄數(shù)過低會造成異常,還需要修改nproc值。最后編輯hbase-env.sh、hbase-site.xml、regionservers,添加或修改相關(guān)屬性值;(3)Nutch文件自動儲存到HBase。由于Nutch2.x自身在設(shè)計過程中,已經(jīng)利用Gora將底層數(shù)據(jù)存儲抽象出來,因此只需要在gora.properties中添加了gora.datastore.default屬性,并對nutch-site.xml、ivy.xml進行簡單修改即可。
3.2 Nutch與HBase結(jié)合在大數(shù)據(jù)方面的潛在價值
毫無疑問,大數(shù)據(jù)是一座金礦。Nutch搜索引擎結(jié)合HBase,可以充當在這座金礦中,進行數(shù)據(jù)挖掘以獲取有價值信息的淘金工具。下面舉幾個例子進行詳細說明。
政府部門大都擁有海量數(shù)據(jù),如交通管理部門有路段監(jiān)控、車站監(jiān)控等數(shù)據(jù),衛(wèi)生等有關(guān)部門擁有流感數(shù)據(jù)等數(shù)據(jù),公安部門有大量的身份信息數(shù)據(jù)等數(shù)據(jù)。如果這些數(shù)據(jù)與Nutch的搜索日志記錄以及存儲在HBase中的全網(wǎng)數(shù)據(jù)結(jié)合,則可以輕松科學(xué)地實現(xiàn)路線智能規(guī)劃提醒、流感疾病預(yù)測、嫌疑人信息鎖定等等功能。
大型企業(yè)如金融、通信等行業(yè)也擁有海量數(shù)據(jù)。但同樣沒有大數(shù)據(jù)處理能力,面對海量數(shù)據(jù)也不能為企業(yè)創(chuàng)造更大價值。如果能夠應(yīng)用HBase,則可以對海量數(shù)據(jù)進行低成本且的存儲,再結(jié)合Nutch進行由淺入深的信息挖掘。
4 結(jié)束語
隨著大數(shù)據(jù)越來越深刻的體現(xiàn)在互聯(lián)網(wǎng)的方方面面,搜索引擎需要解決的問題,也變成找到最佳結(jié)果而不是大量結(jié)果,個性化需求凸顯。數(shù)據(jù)庫更加強調(diào)大規(guī)模的數(shù)據(jù)存儲能力以及高并發(fā)訪問。相信提供高質(zhì)量的搜索結(jié)果等強大功能的Nutch,結(jié)合擁有著極好的且廉價的可擴展性,優(yōu)秀海量數(shù)據(jù)存儲能力的HBase,會被越來越多的企業(yè)和個人認可。
參考文獻:
[1]王學(xué)松.Lucene+Nutch搜索引擎開發(fā)[M].北京:人民郵電出版社,2008.
[2]郭匡宇.基于MongoDB的傳感器數(shù)據(jù)分布式存儲的研究與應(yīng)用[D].碩士學(xué)位論文,2013:10-24.
[3]維克托·邁爾-舍爾維恩,肯尼斯·庫克耶.大數(shù)據(jù)時代[M].杭州:浙江人民出版社,2013.
[4]嚴春來.基于Nutch的個性化搜索引擎的研究與探討[J].軟件開發(fā)與設(shè)計,2014(04):4-5.
[5]詹恒飛,楊岳湘,方宏.Nutch分布式網(wǎng)絡(luò)爬蟲研究與優(yōu)化[J].計算機科學(xué)與探索,2011(01):70-71.
[6]Lars George.2012.HBase:The Definitive Guide(影印版)第1版[M],南京:東南大學(xué)出版社,315-384.
作者單位:聊城大學(xué) 計算機學(xué)院,山東聊城 252000