幾乎停頓了1年之久,很久沒寫部落格了,一方面是在院裡做專案太忙,另一方面是自己也在摸索大資料領域的技術,終於自己搭起來了個基於kafka的分布式爬蟲程式,可以抓**的影象了,不多說,先看抓的影象資料。
目前儲存在elastic中的影象記錄條數為1.7億條,用了13個節點,具體的影象資料儲存在hbase中。抓取的資料量超過
2t,並
20臺機器同時抓取保持每天
800w
條資料增長,每天這麼大的資料量當然需要乙個可靠的爬蟲系統。
(圖1 elasticsearch中儲存影象的索引) (圖2 hbase中的影象)
在講如何實現這種龐大的資料爬蟲前先看下這個爬蟲系統的整體架構圖,方便大家理解這個爬蟲能幹什麼事,要幹什麼事。
(圖3 分布式爬蟲架構圖)
上圖3的左邊是我們今天要說的爬蟲系統,圖3 的右邊是影象的儲存應用系統。儲存應用系統可以將我們抓的資料做實時的流計算和其他有價值的應用。
影象抓下後可以對這些小影象進行拼接,然後對拼接後的影象做識別,分類。拼接流程如下:
(圖4 影象拼接演算法)
這麼大的圖那不是合成到牛年馬月了,不用擔心用分布式計算,這個用spark就可。演算法原理後面單獨講,今天講分布式爬蟲系統。
將google地圖上的遙感影象抓取下來,進行影象拼接處理,可以做森林植被識別,建築物識別,分析分析,比如某個深山老林新建了乙個房,好傢伙,竟然是違法建築,被我查到了。下圖是通過抓取google很多的小影象,拼接成乙個陸家嘴的大衛星圖,絕對高畫質。
(圖5 影象拼接圖)
要抓資料首先需要知道要抓什麼資料,因此必須有乙個任務的主機來分配要抓的任務。然後,拿到這些任務的機器要能知道這些任務是什麼。最後這些資料抓到了以後如何分類的儲存,已經如何處理失敗的任務,總不能某些任務抓影象失敗後就丟掉了吧。因此我們爬蟲系統主要有3部分組成。(1)任務的發放(2)抓取任務中的資料(3)將任務結果輸出至對應的管道處理
這三部分我還是拆開放到後面的章節講好了。
Kafka分布式訊息系統
什麼是apache kafka?系統應用 使用者的活動資料 請求 資料 互動資料 執行維護資料如效能 監測 伺服器cpu 指標這些大量的資料都在無時無刻的產生,kafka 便是有著一套成熟的訊息處理方案的訊息系統,支援 高吞吐量的 分布式發布訂閱訊息 模式,它可以處理消費者規模的 中的所有動作流資料...
Kafka 分布式流式系統
傳送端 傳送端不能非同步傳送,非同步傳送在傳送失敗的情況下,就沒辦法保證訊息順序。2 即使只有乙個佇列的情況下,會有第2個問題。該機器掛了之後,能否切換到其他機器?也就是高可用問題。比如你當前的機器掛了,上面還有訊息沒有消費完。此時切換到其他機器,可用性保證了。但訊息順序就亂掉了。要想保證,一方面要...
爬蟲 分布式爬蟲
爬蟲的本質 很多搞爬蟲的總愛吹噓分布式爬蟲,彷彿只有分布式才有逼格,不是分布式簡直不配叫爬蟲,這是一種很膚淺的思想。分布式只是提高爬蟲功能和效率的乙個環節而已,它從來不是爬蟲的本質東西。爬蟲的本質是網路請求和資料處理,如何穩定地訪問網頁拿到資料,如何精準地提取出高質量的資料才是核心問題。分布式爬蟲只...