版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Nutch:從搜索引擎到網(wǎng)絡(luò)爬蟲楊尚川獨(dú)立咨詢顧問(wèn),專注于大數(shù)據(jù)和搜索引擎2013年度優(yōu)秀開源項(xiàng)目APDPlat發(fā)起人
1
大綱:
1、Nutch是什么2、Nutch可以做什么3、為什么要學(xué)習(xí)Nutch
4、Nutch的設(shè)計(jì)初衷5、Nutch的設(shè)計(jì)目標(biāo)6、Nutch的發(fā)展歷程7、Nutch3大分支版本8、Nutch的整體架構(gòu)9、Nutch的使用10、一些優(yōu)化技巧2
1、Nutch是什么Nutch是Apache旗下的Java開源項(xiàng)目,最初是一個(gè)搜索引擎,現(xiàn)在是一個(gè)網(wǎng)絡(luò)爬蟲。下圖為發(fā)起人DougCuttingDougCutting同時(shí)也是Lucene和Hadoop的發(fā)起人3
Nutch的特性插件架構(gòu),高度模塊化大多數(shù)功能都可以通過(guò)插件來(lái)實(shí)現(xiàn)和改變易擴(kuò)展,極強(qiáng)的伸縮性增加機(jī)器即可,不用修改代碼,從一臺(tái)可擴(kuò)展到成千上萬(wàn)臺(tái)高可用性,健壯容錯(cuò)容忍宕機(jī)情況的出現(xiàn)靈活可配置提供了162個(gè)配置參數(shù)4
Nutch的不足所有文件都是只能寫一次批量處理架構(gòu)導(dǎo)致無(wú)實(shí)時(shí)性沒有用戶管理圖形界面,只有命令行接口web2.0的普及導(dǎo)致的js分析和身份認(rèn)證等問(wèn)題5
Nutch和其他項(xiàng)目的關(guān)系LuceneCore(全文檢索庫(kù))Solr(企業(yè)搜索平臺(tái))ElasticSearch(分布式的支持RESTFULL的實(shí)時(shí)搜索和實(shí)時(shí)分析)Hadoop(分布式計(jì)算和分布式存儲(chǔ))Tika(MIME類型檢測(cè)、語(yǔ)言檢測(cè)、元數(shù)據(jù)和文本自動(dòng)提取)Gora(對(duì)象到NOSQL的映射)6
2、Nutch可以做什么站內(nèi)搜索引擎OregonStateUniversity全網(wǎng)搜索引擎即刻搜索(可能)
垂直搜索引擎InternetArchive,CreativeCommons數(shù)據(jù)采集……7
3、為什么要學(xué)習(xí)Nutch
Hadoop是大數(shù)據(jù)的核心技術(shù)之一,而Nutch集Hadoop之大成,是Hadoop的源頭。學(xué)習(xí)Hadoop,沒有數(shù)據(jù)怎么辦?用Nutch抓!學(xué)了Hadoop的MapReduce以及HDFS,沒有實(shí)用案例怎么辦?學(xué)習(xí)Nutch!Nutch的很多代碼是用MapReduce和HDFS寫的,哪里還能找到比Nutch更好的Hadoop應(yīng)用案例呢?8
大數(shù)據(jù)這個(gè)術(shù)語(yǔ)最早的引用可追溯到Nutch。當(dāng)時(shí),大數(shù)據(jù)用來(lái)描述為更新網(wǎng)絡(luò)搜索索引需要同時(shí)進(jìn)行批量處理或分析的大量數(shù)據(jù)集?,F(xiàn)在,大數(shù)據(jù)的含義已經(jīng)被極大地發(fā)展了,業(yè)界將大數(shù)據(jù)的特性歸納為4個(gè)“V”。Volume數(shù)據(jù)體量巨大,Variety數(shù)據(jù)類型繁多,Value價(jià)值密度低,商業(yè)價(jià)值高,Velocity處理速度快。9
4、Nutch的設(shè)計(jì)初衷商業(yè)搜索引擎不開源,搜索結(jié)果不純粹是根據(jù)網(wǎng)頁(yè)本身的價(jià)值進(jìn)行排序,而是有眾多商業(yè)利益考慮。Nutch提供了開源的解決方案,幫助人們很容易地建立一個(gè)搜索引擎,為用戶提供優(yōu)質(zhì)的搜索結(jié)果,并能從一臺(tái)機(jī)器擴(kuò)展到成百上千臺(tái)。10
5、Nutch的設(shè)計(jì)目標(biāo)并行運(yùn)行在成千上萬(wàn)臺(tái)服務(wù)器上每個(gè)月抓取幾十億網(wǎng)頁(yè)為這些網(wǎng)頁(yè)維護(hù)一個(gè)索引對(duì)索引文件執(zhí)行每秒上千次的搜索提供高質(zhì)量的搜索結(jié)果以最小的成本運(yùn)作11
如何才能達(dá)成這樣的目標(biāo)呢?1、需要一個(gè)分布式文件系統(tǒng)2、需要一個(gè)分布式計(jì)算平臺(tái)對(duì)分布式文件系統(tǒng)的要求:?jiǎn)我还蚕淼拿臻g容錯(cuò)(磁盤及節(jié)點(diǎn))使用用于計(jì)算的節(jié)點(diǎn)上面的磁盤(計(jì)算和數(shù)據(jù)放到一起,減小網(wǎng)絡(luò)開銷)不用重啟系統(tǒng)就能增加移除磁盤及節(jié)點(diǎn)12
Google發(fā)布了GFS論文滿足所有要求一個(gè)NameNode文件名和塊的映射:name→<blockId>*塊和主機(jī)及端口的映射:blockId→<host:port>replication_level多個(gè)DataNode塊和字節(jié)的映射:blockId→<byte>*輪詢NameNode進(jìn)行復(fù)制,刪除等請(qǐng)求客戶端同時(shí)和NameNode和DataNode進(jìn)行交互13
于是有了NutchDistributedFileSystem(NDFS)GFS的JAVA開源實(shí)現(xiàn)2003年由MikeCafarella完成作為Nutch的一部分14
對(duì)分布式計(jì)算平臺(tái)的要求:把一項(xiàng)工作(job)分解為多個(gè)任務(wù)(task)對(duì)于每一個(gè)任務(wù):分配主機(jī)(host)啟動(dòng)任務(wù)監(jiān)控任務(wù)執(zhí)行宕機(jī)的時(shí)候終止任務(wù)任務(wù)執(zhí)行失敗后能重新啟動(dòng)任務(wù)順序執(zhí)行一項(xiàng)工作(job)完成后執(zhí)行下一項(xiàng)工作(job)15
Google發(fā)布了MapReduce論文MapReduce是一個(gè)可靠,可擴(kuò)展的分布式計(jì)算平臺(tái)所有的數(shù)據(jù)都是順序的<key,value>對(duì)程序員只需要實(shí)現(xiàn)兩個(gè)特定的方法map(k,v)→<k',v'>*reduce(k',<v'>*)→<k',v'>*所有有相同k'的v'都有序地聚集在一起于是Nutch開始采用MapReduce16
17
如何并行處理同一個(gè)大文件?18
SequenceFile的結(jié)構(gòu)19
20
MapFile?可以當(dāng)成SequenceFile來(lái)使用對(duì)KEY進(jìn)行了排序和索引21
6、Nutch的發(fā)展歷程2002年8月由DougCutting發(fā)起,托管于Sourceforge,之后發(fā)布了0.4、0.5、0.6三個(gè)版本2004年9月OregonStateUniversity(俄勒岡州立大學(xué))采用Nutch2004年9月CreativeCommons(知識(shí)共享)推出基于Nutch的搜索服務(wù)2005年1月加入Apache的孵化器2005年6月孵化結(jié)束成為L(zhǎng)ucene的子項(xiàng)目2005年8月發(fā)布版本0.7(
ApacheLucenesub-project)2005年10月發(fā)布版本0.7.12006年3月發(fā)布版本0.7.22006年7月發(fā)布版本0.8(全新的架構(gòu),基于Hadoop
0.4,Hadoop誕生)2006年9月發(fā)布版本0.8.12007年4月發(fā)布版本0.92009年3月發(fā)布版本1.0(Tika誕生,0.1-incubating)2010年4月Nutch成為Apache頂級(jí)項(xiàng)目2010年6月發(fā)布版本1.12010年9月發(fā)布版本1.22011年6月發(fā)布版本1.3(
從搜索引擎到網(wǎng)絡(luò)爬蟲)22
2011年11月發(fā)布版本1.42012年6月發(fā)布版本1.52012年7月發(fā)布版本2.0(2.XGora誕生,table-basedarchitecture)2012年7月發(fā)布版本1.5.12012年8月Nutch誕生十周年2012年10月發(fā)布版本2.1(2.X開始支持elasticsearch)2012年12月發(fā)布版本1.62013年6月發(fā)布版本2.2(mons誕生)2013年6月發(fā)布版本1.7(mons誕生)2013年7月發(fā)布版本2.2.111年發(fā)展歷程,3大分支版本強(qiáng)調(diào)重用,誕生了Java開源項(xiàng)目Hadoop、Tika、Gora不重新發(fā)明輪子,使用了大量第三方開源項(xiàng)目23
Nutch1.3是從搜索引擎到網(wǎng)絡(luò)爬蟲的轉(zhuǎn)折點(diǎn)RemovedLucene-basedindexingandsearchwebappdelegateindexing/searchremotelytoSOLRchangeoffocus:“Websearchapplication”→“Crawler”RemoveddeprecatedparsepluginsdelegatemostparsingtoTikaSeparatelocal/distributedruntimesIvy-baseddependencymanagement24
25
26
27
28
297、Nutch3大分支版本Nutch1.2是一個(gè)完整的搜索引擎Nutch1.7是一個(gè)基于HDFS的網(wǎng)絡(luò)爬蟲Nutch2.2.1是一個(gè)基于Gora的網(wǎng)絡(luò)爬蟲1.X系列可用于生產(chǎn)環(huán)境、2.X系列還不成熟
8、Nutch的整體架構(gòu)
30
31seedi=1i=2i=3
32
33
34
8.1Injector(注入)35
36
37
38
39CrawlDB是MapFile<Text,CrawlDatum>CrawlDatum結(jié)構(gòu)如右圖所示
8.2Generator(產(chǎn)生抓取列表)40
41
42
43
44
45
8.3Fetcher(抓取網(wǎng)頁(yè))46
47
48
49
50
51
52content是MapFile<Text,Content>Content結(jié)構(gòu)如右圖所示
8.4Parsesegment(解析)53
54
55
56
57parse_text是MapFile<Text,ParseText>ParseText結(jié)構(gòu)如右圖所示parse_data是MapFile<Text,ParseData>ParseData結(jié)構(gòu)如下圖所示
8.5UpdateCrawlDB(更新crawldb)58
59
60
8.6InvertLinks(鏈接反轉(zhuǎn))61
62
63
64
65
66LinkDB是MapFile<Text,Inlinks>Inlinks結(jié)構(gòu)如下圖所示
67
8.7Indexer(建立索引)68
69
70
8.8IndexDedup(索引去重)71
72注意:這里的KEY是頁(yè)面的數(shù)字簽名(digest),因此這種去重方法會(huì)存在一個(gè)網(wǎng)頁(yè)的多個(gè)版本
8.9插件機(jī)制默認(rèn)使用的插件如下圖所示:73parse-html成功就不會(huì)調(diào)用pase-tika挨個(gè)調(diào)用,可以同時(shí)寫到多個(gè)索引服務(wù)器挨個(gè)調(diào)用多協(xié)議支持挨個(gè)調(diào)用挨個(gè)調(diào)用挨個(gè)調(diào)用
系統(tǒng)提供的可插接點(diǎn):74
75在parse-html和parse-tika插件中調(diào)用
76
77
78
79
80
81
828.10OPIC(On-linePageImportanceCalculation)
83
84
85
86
9、Nutch的使用一些具體的實(shí)踐方法及演示
9.1、下載并解壓eclipse(集成開發(fā)環(huán)境)
下載地址:,下載EclipseIDEforJavaEEDevelopers
9.2、安裝Subclipse插件(SVN客戶端)
插件地址:,
9.3、安裝IvyDE插件(下載依賴Jar)
插件地址:87
9.4、簽出代碼
File>New>Project>SVN>從SVN檢出項(xiàng)目
創(chuàng)建新的資源庫(kù)位置>URL:>選中URL>Finish
彈出NewProject向?qū)?,選擇JavaProject>Next,輸入Projectname:nutch1.7>Finish88
9.5、配置構(gòu)建路徑
在左部PackageExplorer的nutch1.7文件夾上單擊右鍵>BuildPath>ConfigureBuildPath...
>選中Source選項(xiàng)>選擇src>Remove>AddFolder...>選擇src/bin,src/java,src/test和src/testresources【對(duì)于插件,需要選中src/plugin目錄下的每一個(gè)插件目錄下的src/java,src/test文件夾】
切換到Libraries選項(xiàng)>
AddClassFolder...>選中nutch1.7/conf
AddLibrary...>IvyDEManagedDependencies>Next>Main>IvyFile>Browse>ivy/ivy.xml>Finish
【如需要在開發(fā)環(huán)境中對(duì)插件進(jìn)行開發(fā)調(diào)試,需要加入插件特定的ivy.xml】
切換到OrderandExport選項(xiàng)>
選中conf>Top>OK89
9.6、執(zhí)行ANT
在左部PackageExplorer的nutch1.7文件夾下的build.xml文件上單擊右鍵>RunAs>AntBuild
在左部PackageExplorer的nutch1.7文件夾上單擊右鍵>Refresh
在左部PackageExplorer的nutch1.7文件夾上單擊右鍵>BuildPath>ConfigureBuildPath...
>
選中Libraries選項(xiàng)>AddClassFolder...>
選中build
>OK為什么加入build?90
91
92
93
9.7、修改配置文件nutch-site.xml和regex-urlfilter.txt
將nutch-site.xml.template改名為nutch-site.xml
將regex-urlfilter.txt.template改名為regex-urlfilter.txt
在左部PackageExplorer的nutch1.7文件夾上單擊右鍵>Refresh
將如下配置項(xiàng)加入文件nutch-site.xml:
<property>
<name></name>
<value>nutch</value>
</property>
<property>
<name>http.content.limit</name>
<value>-1</value>
</property>
修改regex-urlfilter.txt,將
#acceptanythingelse
+.
替換為:
+^http://([a-z0-9]*\.)*/(注意最后要有反斜杠且不能有空格)
-.94
9.8、開發(fā)調(diào)試
在左部PackageExplorer的nutch1.7文件夾上單擊右鍵>New>Folder>Foldername:urls
在剛新建的urls目錄下新建一個(gè)文本文件url,文本內(nèi)容為:
打開src/java下的org.apache.nutch.crawl.Crawl.java類,單擊右鍵RunAs>RunConfigurations>Arguments>在Programarguments輸入框中輸入:urls-dirdata-depth3>Run
在需要調(diào)試的地方打上斷點(diǎn)DebugAs>JavaApplicaton95
9.9、查看結(jié)果
查看segments目錄:
打開src/java下的org.apache.nutch.segment.SegmentReader.java類
單擊右鍵RunAs>JavaApplicaton,控制臺(tái)會(huì)輸出該命令的使用方法
單擊右鍵RunAs>RunConfigurations>Arguments>在Programarguments輸入框中輸入:-dumpdata/segments/*
data/segments/dump
用文本編輯器打開文件data/segments/dump/dump查看segments中存儲(chǔ)的信息96
查看crawldb目錄:
打開src/java下的org.apache.nutch.crawl.CrawlDbReader.java類
單擊右鍵RunAs>JavaApplicaton,控制臺(tái)會(huì)輸出該命令的使用方法
單擊右鍵RunAs>RunConfigurations>Arguments
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025下半年浙江省湖州市屬事業(yè)單位招聘40人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年四川省自貢沿灘區(qū)事業(yè)單位招聘64人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年四川涼山州會(huì)東縣招聘小學(xué)教師10人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上海金山區(qū)社區(qū)工作者招聘94人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024年科研機(jī)構(gòu)項(xiàng)目研發(fā)合作合同
- 2025上半年遼寧事業(yè)單位聯(lián)考招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川達(dá)州事業(yè)單位考試招聘工作人員1651人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川瀘州市龍馬潭區(qū)事業(yè)單位招聘工作人員29人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川樂(lè)山高新區(qū)事業(yè)單位招聘3人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 展覽館監(jiān)控系統(tǒng)安裝施工合同范本
- 《綠色化學(xué)化工技術(shù)》課件
- 民法典中的勞動(dòng)法與勞動(dòng)糾紛解決的法律適用
- 廣東省廣州市黃埔區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期末生物試卷+
- 四川省達(dá)州市2023-2024學(xué)年八年級(jí)上學(xué)期期末歷史試題(含答案)
- 國(guó)開電大??啤侗O(jiān)督學(xué)》期末紙質(zhì)考試總題庫(kù)2024版
- 合伙開學(xué)校協(xié)議
- 武漢理工大學(xué)2019-2020學(xué)年第一學(xué)期2018級(jí)軟件工程專業(yè)《Java語(yǔ)言程序設(shè)計(jì)》期末考試-
- GB/T 26334-2023燃?xì)獗戆惭b配件
- 五年級(jí)中隊(duì)日志全解
- 公司合同審批流程
- 質(zhì)量守恒定律評(píng)課稿
評(píng)論
0/150
提交評(píng)論