Nutch教程——準備篇 by 逼格DATA
實在是看不下去Nutch官方的坑爹教程了,總結一套看完能懂的Nutch教程,持續更新中。
開發環境和基礎:
學習Nutch,必須滿足以下幾個條件,缺一不可:
1)Linux環境,實在是沒辦法就在Windows上裝Linux虛擬機器。
2)熟悉JAVA。
3)有hadoop基礎,能夠編寫hadoop下map reduce程式。
4)能夠看懂Linux Shell。
下面來解釋以下為什麼需要滿足這些條件。Nutch是在hadoop上執行的,windows下跑hadoop有一定的問題。並且Nutch中流程的控制使用的是Linux Shell,在windows上實現也比較麻煩。如果看不懂Linux Shell,就看不懂Nutch的流程。Nutch被切分成幾個流程,每個流程都由Map Reduce完成,如果沒有Map Reduce程式設計的基礎,就看不懂Nutch原始碼。
原始碼閱讀:
千萬不要拿Nutch原始碼作為爬蟲入門的教程。在學習Nutch之前最好先找一個單機爬蟲熟悉爬蟲的流程和基礎。如果連Http請求、網頁資訊抽取這些最基礎的技術細節都搞不清楚,閱讀Nutch原始碼是沒有用的,雖然說Nutch的http請求、網頁解析是通過外掛來完成的,但是我可以告訴你,如果你對Nutch的工作流程不是非常瞭解,是寫不了Nutch外掛的,哪怕是最簡單的外掛,所以不要想通過閱讀Nutch外掛的方法,來學習怎麼傳送http請求這種基礎。更重要的是,在閱讀Nutch原始碼之前,一定要了解爬蟲的流程。Nutch中每個流程的輸入輸出都存放在hadoop檔案中,檔案是SequenceFIle,直接無法正確閱讀檔案的內容,如果想通過觀察SequenceFile來了解爬蟲的流程,是比較困難的。JAVA開源的單機爬蟲有很多種,和Nutch流程最相似的是WebCollector。WebCollector和Nutch一樣,都是將完整廣度遍歷切分成一層一層的爬取(每一層對應樹的一層),有相同的連結儲存、更新機制,採用相同的執行緒池,可以通過閱讀WebCollector的原始碼來作為學習Nutch的基礎。
分散式:
亂碼?索引?:
開發工具:
二次開發:
版本:
除了文件欠缺、版本不穩定之外,Nutch2.x的持久化也是一個大問題。先說Nutch2.x利用mysql做持久化,這就是一個搞笑的設定。在hadoop上跑程式,用mysql作為輸入輸出,效率大家都懂得。而且選用Nutch作為爬蟲,一般都是要處理幾千萬以上的資料。Mysql存一般多萬網頁已經可以崩潰了。其實我一直覺得官方也不想給出Nutch2.x持久化到mysql這種設定,我覺得官方只是想告訴大家,Nutch2.x使用的gora可以通過配置,將資料持久化到各種資料庫。
很多人衝著Nutch 2.x可以持久化到hbase,而選用Nutch 2.x,當然配成功的很少,最後使用的更少。對於Nutch2.x與hbase,需要了解下面幾點:
1)hbase的宗旨是提供一個無窮大的儲存,hbase中每行資料都有一個唯一的key,在hbase中對資料的查詢最好是在已知key的情況下進行,但是很多使用者的需求,是想通過與sql中select操作類似的方法來查詢資料,這種不可取。
2)Nutch 2.x所謂的儲存資料到hbase,是將一些爬取輔助資訊(歷史爬取歷史)、網頁原始碼和連結分析資訊儲存到hbase中。如果你想用爬蟲完成一邊爬去一邊抽取精資料,然後放入hbase,你需要自己去寫插入hbase的操作,並不能通過Nutch 2.x自帶的功能完成。
3)hbase如果崩潰,修復並不是很容易。很有可能爬了一個月的資料就救不回來了。
根據我的經驗,Nutch 1.x可以為企業提供一個非常穩定的爬蟲。雖然他並沒有使用資料庫來維護資料,但是它的穩定性卻遠遠高於目前的Nutch 2.x版本。Nutch使用檔案來維護所有的爬取資訊(hdfs中的檔案),Nutch 1.x將每個任務的資料都分別新建一個(或者多個)資料夾來管理(預設資料夾名是當前時間),並且對檔案有一定的備份機制,本身就很少出致命錯誤(導致檔案損壞不能用的錯誤)。如果遇到極端情況,導致檔案損壞,可以通過刪除損壞檔案來輕鬆恢復,因為每次任務只會影響到當時新建的資料夾(這裡描述並不是非常準確,後面教程中解釋)。
有一些工程師不能接受這種設定,他們原來是做基於關係型資料庫的系統出生的,對於用檔案儲存資料這種設定不是很能接受。這種習慣要改改了,至少目前,做hadoop這套東西,基於hdfs中檔案去儲存、管理海量資料,還是一個比較穩定的方案。hdfs中有一種檔案叫SequenceFile,這種檔案將java物件儲存到檔案中,也就是說,可以利用檔案儲存結構化資訊,所以不用擔心用檔案儲存不了複雜結構的資料。Nutch 1.x中所有的資料都是用SequenceFIle的形式來儲存的。
最後說個題外話,Nutch 2.x之所以用hbase作為儲存,有一個很重要的原因是,Nutch是為搜尋引擎設計的爬蟲,用hbase可以完成mysql實現不了的連結分析的功能。我們知道網際網路中的連結資訊,用mysql無法實現大量的儲存,入口網站一個頁面就有幾十個外鏈,隨便幾十萬個網頁就可以把mysql弄報廢,而且資料量一大查詢效率你懂得。但是hbase就可以很好地完成這個功能。Nutch 2.x的hbase中,有一個列族叫outlink,這個列族用來儲存每個頁面的所有外鏈資訊,列名是連結的url,列值是連結的錨文字。例如一個網頁http://www.abc.com有2個外鏈,一個指向百度首頁,一個指向新浪首頁。在hbase裡就是:
row_key:"http://www.abc.com: outlink:http://www.baidu.com:百度一下,你就知道
row_key:"http://www.abc.com: outlink:http://www.sina.com:新浪首頁
這裡注意一下,http://www.baidu.com和http://www.sina.com並不是值,而是列名。hbase中列族不可以隨便增加,但是列是可以隨意新增的。可想而知,當爬蟲爬取後,hbase的outlink列族中,會有幾百萬個列(有多少不同的連結url,就有多少列)。這樣儲存,我們就可以很快地查詢網際網路中兩個頁面之間的關係。例如我們想查詢http://www.abc.com和http://ww.baidu.com這兩個頁面之間的關係,只需要查詢hbase中,row_key為http://www.abc.com的行中,列族為outlink,列名為http://www.abc.com的單元的值即可。這種查詢操作在搜尋引擎的連結分析中有非常重要的作用。但是如果一個企業只是想對網際網路中的新聞進行爬取、輿情分析,極少會有這種需求。
所以如果企業想使用分散式爬蟲,並且不是為了專門做搜尋引擎,最好使用Nutch 1.x。不要為了使用”高階“的nosql(hbase),而去強行使用Nutch 2.x。
相關文章
- 盛哥學習 Data Guard 第二篇《物理standby準備和建立》
- Python 快速教程(標準庫):學習準備Python
- egg商城--專案準備篇
- JavaScript入門篇--請做好準備JavaScript
- 自己動手搭建有逼格的部落格
- 計算機求職總結--準備篇計算機求職
- Nutch入門教程,第一部分
- Hadoop2原始碼分析-準備篇Hadoop原始碼
- 全文索引-lucene,solr,nutch,hadoop之nutch與hadoop索引SolrHadoop
- PHP基礎教程-02 搭建環境準備PHP
- BCSphere入門教程:導言和知識準備
- [教學] LPI 考試準備系列教程(轉)
- 提升逼格的兩個函式函式
- 程式設計師高逼格指南程式設計師
- PS教程:教你製作一個高逼格人物主題復古海報
- 樂2評測:昔日的價格今日的逼格
- 怎樣準備一場面試:候選人篇面試
- PyQt5開發實踐(一、準備篇)QT
- vsphere實戰攻略1:基礎準備篇
- 2025年前端面試準備html篇前端面試HTML
- Nutch外掛系統
- 20 個為設計師準備的 Photoshop 教程
- Promise 讓你的專案更有逼格Promise
- Flink系列(0)——準備篇(流處理基礎)
- 高逼格財務報表模板!無程式碼自動套用,免費教程來了
- [nodejs] nodejs開發個人部落格(一)準備工作NodeJS
- nutch2.2.1安裝部署
- 為初學者準備的 Linux rmdir 命令案例教程Linux
- 為初學者準備的 ln 命令教程(5 個示例)
- PIC微控制器入門教程(一)—— 準備工作
- 原創|高逼格企業級MySQL資料庫備份方案,原來是這樣....MySql資料庫
- Vue電商專案-提升逼格玩轉svgVueSVG
- JS陣列的幾個有逼格操作JS陣列
- GMGC數娛節前瞻,好玩好看有逼格GC
- grep——高逼格 Linux文字搜尋神器Linux
- 前端工程師技能之photoshop巧用系列第一篇——準備篇前端工程師
- JAVA準備Java
- bq準備