基於hadoop 網路爬蟲
一。用hadoop作網路爬蟲的原因
爬蟲程式的海量計算特性要求必須要用分散式方式來實現。一般爬蟲爬取的是整個網際網路上的所有或部分資料,這個資料量一般是P byte級,至少也是T byte級,因此用分散式的方式來獲取這是不二之選。在眾多的分散式計算框架裡hadoop絕對是個中翹楚,從hadoop的使用者名稱單中可以看出hadoop的應用範圍已經非常廣泛,hadoop本身已經接近成熟。因此hadoop是首選。
hadoop提供了自動的叢集管理,任務分配,負載平衡。因此在hadoop之上構建爬蟲程式可以省略這部分程式碼,這將極大的減少程式碼量。
二。主要思路
1.遍歷整個網路的演算法:網頁之間是通過link連線起來的,link把所有的頁面連線成了一個網,這個網可以用資料結構裡的圖來表示,用遍歷圖的演算法就可以遍歷整個網路了。
2任務切分:以站點為單位來切分爬取工作,每個站點對應一個map任務。系統要維護一個全域性站點表,站點表用來記錄那些站點已經爬取過,那些尚未爬取,那些正在爬取,並且還要向其中加入新發現的站點。
3.map階段:每個map完成一個站點的爬取任務,同時把發現的新站點加入到全域性站點表。生成的<k,v>就是<url ,url對應的頁面資料>。此時要維護一個url的hashtable用來記錄已經爬取到的頁面,並防止相同的頁面被重複爬取。
4.reduce階段:主要任務是把所有的<url ,url對應的頁面資料>儲存到hdfs貨hbase種去。
三。心得
爬蟲程式並不是hadoop典型應用場景。hadoop一般應用於海量資料分析和挖掘,這種場景中首先存在著海量輸入資料,並且最終得產出物事一個數據量很小的分析資料,在map過程中對海量資料進行劃分成小塊並進行分散式處理,在reduce的過程中將大量的中間資料進行合併,並最終得到較小的分析結果。
爬蟲程式幾乎沒有輸入,並且最終的產出物是海量資料,這和hadoop的典型應用完全是相反的。在爬蟲程式的應用場景中reduce階段幾乎是多餘的,幾乎可以把reduce階段的工作放到map的末尾來做。
雖然不符合hadoop的典型應用場景,但爬蟲程式一樣可以從hadoop上獲得極大的好處(自動的叢集管理,任務分配,負載平衡)。
相關推薦
基於hadoop 網路爬蟲
一。用hadoop作網路爬蟲的原因 爬蟲程式的海量計算特性要求必須要用分散式方式來實現。一般爬蟲爬取的是整個網際網路上的所有或部分資料,這個資料量一般是P byte級,至少也是T byte級,因此用分散式的方式來獲取這是不二之選。在眾多的分散式計算框架裡hadoop絕對
基於HtmlUnit網路爬蟲(一)
由於時間關係,我不知道下一集會什麼時候寫,但是歡迎大家交流。 很多網路爬蟲新手肯定會遇到的2個問題:執行JavaScript和處理Ajax請求。 好了,我先貼一些關鍵配置的程式碼,使得我們模擬的瀏覽器可以執行CSS和JavaScript。 BrowserVersion
自己動手搭建一個簡單的基於Hadoop的離線分析系統之一——網路爬蟲
自己動手搭建一個簡單的基於Hadoop的離線分析系統之一——網路爬蟲 之前對大資料頗感興趣,在學習了一個月的相關原理和應用後,感覺自己需要動手一個實戰專案來鞏固之前學到的東西,加之很早之前就接觸過一些爬蟲知識,因此利用手上現有的資源(一臺膝上型電腦)來搭建一個關於房屋租賃的簡
基於Hadoop 的分散式網路爬蟲技術學習筆記
遍歷的路徑:A-F-G E-H-I B C D 2.寬度優先遍歷策略 寬度優先遍歷策略的基本思路是,將新下載網頁中發現的連結直接插入待抓取URL佇列的末尾。也就是指網路爬蟲會先抓取起始網頁中連結的所有網頁,然後再選擇其中的一個連結網頁,繼續抓取在此網頁中連結的所有網頁。還是以上面的圖為例: 遍歷路徑:A-B
mahout demo——本質上是基於Hadoop的分步式算法實現,比如多節點的數據合並,數據排序,網路通信的效率,節點宕機重算,數據分步式存儲
fin urn [] return uid content 3.0 stock blank 摘自:http://blog.fens.me/mahout-recommendation-api/ 測試程序:RecommenderTest.java 測試數據集:item.csv
Java基於httpclient獲取網頁資料,實現簡單網路爬蟲
1、pom檔案引入httpclient依賴 <dependency> <groupId>org.apache.httpcompon
基於Jsoup的網路爬蟲的使用以及網頁分析的基本方法
至於網路爬蟲是什麼我在此就不再多做介紹,本篇部落格主要講解 Jsoup的實現原理以及使用 如何通過對網頁分析實現爬蟲 通過一個例項具體演示以上介紹的方法 Jsoup是什麼? 官方對它的解釋是:一個HTML解析器。 它可以從URL、檔案、字串中提取並解析H
FreeBook 基於 MVP 模式開發的帶快取網路爬蟲,採用最流行框架搭建,乾貨多多
用到的主流框架 RxJava+Retrofit2+Okhttp+RxCache 實現 API 資料請求以及快取(快取不區分 GET&POST 快取策略可根據自己要求修改) RxJava+jsoup+RxCache 實現 HTMl 頁面爬蟲資料的請求以及快取 快取實現與 API 一致 不需要另寫
基於HttpClient4.5實現網路爬蟲
個人部落格站已經上線了,網址 www.llwjy.com ~歡迎各位吐槽~-------------------------------------------------------------------------------------------------
基於Hadoop開發網路雲盤系統架構設計方案第一稿
引言 雲端計算技術的發展,各種網路雲盤技術如雨後春筍,層出不窮,百度、新浪、網易都推出了自己的雲盤系統,本文基於開源框架Hadoop設計實現了一套自己的網路雲盤系統,方案為初步設計方案,不斷完善中。 一、總體架構 二、方案說明 2.1 系統切分 從使用者角度,整個系統劃分為ECDisk客戶端、EC
Hadoop學習之自己動手做搜尋引擎【網路爬蟲+倒排索引+中文分詞】
一、使用技術 Http協議 正則表示式 佇列模式 Lucenne中文分詞 MapReduce 二、網路爬蟲 專案目的 通過制定url爬取介面原始碼,通過正則表示式匹配出其中所需的資源(這裡是爬取csdn部落格url及部落格名),將爬到的資源存
基於Jsoup實現的簡單網路爬蟲
之前是完全不會爬蟲的,但是新專案中需要從網頁上爬一大堆的資料,所以就花了一天時間學習了下。主題部分還是很簡單的。 * 既然想要寫博文,那我就要寫的細緻點,對自己對讀者都是一種負責! 什麼是爬蟲? 我所理解的爬蟲就是從網際網路上獲取Url,順著U
基於網路爬蟲的小湖知識圖譜系統 測試心得
組名:SE真香隊 專案:基於網路爬蟲的小湖知識圖譜系統 組:軟體1602班第6組 在這個學期,我們組做了基於網路爬蟲的小湖知識圖譜系統,在做專案的過程中,團隊成員都覺的很完美,然而,最後一個周進行測試的時候(雖然是手動測試)發現我們的這個系統仍然存在很多bug,有些bug及時
基於網路爬蟲的小湖知識圖譜系統測試心得
和很多組比起來,我們組的功能可能算是比較少的,當然裡面是涉及到了網路爬蟲和知識圖譜這種比較高深的技術問題,但是可能整體來說功能沒有那麼多花裡胡哨的東西。 這可能也和我們總的定位有關,我們做的是小湖聊天機器人的二期專案,這次並不是對於整個專案進行推進,而是著重於聊天機器人的知識庫的構建,也由此,本學期我們小組
總結一下五種實現網路爬蟲的方法(一,基於socket通訊編寫爬蟲)
最近呢,由於實習需要呢,複習一遍爬蟲,前斷時間閉關刷題去了,也會把刷題心得總結成部落格分享給大家,比如java集合類特性及原始碼解析,作業系統資料結構的一些演算法,設計模式等,放心,肯定不會鴿的,雖然可能會晚一點寫。言歸正傳,java實現網路爬蟲一般有五種方法(據我所知,要是
基於HttpClient實現網路爬蟲~以百度新聞為例
在以前的工作中,實現過簡單的網路爬蟲,沒有系統的介紹過,這篇部落格就係統的介紹以下如何使用java的HttpClient實現網路爬蟲。 關於網路爬蟲的一些理論知識、實現思想以及策略問題,可以參考百度百科“網路爬蟲”,那裡已經介紹的十分詳細,這裡也不再囉嗦
網路爬蟲_網頁登入(蘇寧 有驗證碼)—基於HtmlUnit
輸入驗證碼: public static String getCode(){ System.out.println("請輸入驗證碼:"); Scanner sc = new Scanner(System.in); String code = s
Hadoop學習之網路爬蟲+分詞+倒排索引實現搜尋引擎案例
本專案實現的是:自己寫一個網路爬蟲,對搜狐(或者csdn)爬取新聞(部落格)標題,然後把這些新聞標題和它的連結地址上傳到hdfs多個檔案上,一個檔案對應一個標題和連結地址,然後通過分詞技術對每個檔案中的標題進行分詞,分詞後建立倒排索引以此來實現搜尋引擎的功能,建
基於Python的網路爬蟲入門
1.網頁抓取入門 (1)簡單的抓取:直接從url抓網頁資料 (2)傳遞資料:post或者get方式 post: get: (3)設定header 2.cookie的使用 (1)儲存cookie到變數: (2)儲存cookie到檔案: (3)從檔案中獲取cook
爬蟲學習之基於Scrapy的網路爬蟲
在上一篇文章《爬蟲學習之一個簡單的網路爬蟲》中我們對爬蟲的概念有了一個初步的認識,並且通過Python的一些第三方庫很方便的提取了我們想要的內容,但是通常面對工作當作複雜的需求,如果都按照那樣的方式來處理效率非常的低,這通常需要你自己去定義並實現很多非常基礎的爬蟲框架上的功能,或者需要組合很多Python第