基于hadoop 網絡爬蟲

jopen 10年前發布 | 84K 次閱讀 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上獲得極大的好處(自動的集群管理,任務分配,負載平衡)。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!