按數據形態,我們把數據分為結構化數據和非結構化數據兩種。
結構化數據如傳統的Data Warehouse數據,欄位有固定的長度和語義,計算機程序可以直接處理
非結構化數據有文本數據、圖像數據、自然語言數據等,計算機程序無法直接進行處理,需要進行格式轉換或信息提取。
常見的信息獲取組件包括電信特有的探針技術,為獲取網頁數據常用的爬蟲,採集日誌數據的組件Flume,以及用於消息轉發的Kafka消息中間件
2.1 探針在電信運營商領域,從電信的路由器、交換機上把數據採集上來的專有設備是探針
2.2 網路爬蟲網路爬蟲的主要目的是將互聯網上的網頁下載到本地,形成一個或聯網內容的鏡像備份。
2.2.1 基本原理
下圖是一個典型的網路爬蟲框架
網路爬蟲的工作流程如下:
1)首先人工選取一部分種子URL
2)將這些URL放入待抓取URL隊列
3)從待抓取URL隊列中取出待抓取URL,解析DNS得到主機IP,並將URL對應的網頁下載下來,存儲到自己的網頁庫中。將這些已抓取的URL放入已抓取URL隊列中
4)分析已抓取網頁中的其他URL,並將URL放入待抓取的URL隊列中,進行下一個循環。
2.2.2 抓取策略
1)深度優先遍歷策略
2)廣度悠閑遍歷策略
3)反向鏈接數策略策略
反向鏈接數是指一個網頁被其他網頁鏈接指向的數量。反向鏈接數表示的是一個網頁的內容受到其他人的推薦的程度。因此,很多時候搜索引擎的抓取系統會使用這個指標來評價網頁的重要程度,從而決定不同網頁的抓取先後順序。
4)PartialPageRank策略
Partial PageRank演算法借鑒了PageRank演算法的思想:對於已經下載的網頁,連同待抓取URL隊列中的URL,形成網頁集合,計算每個頁面的PageRank值,計算完之後,將待抓取URL隊列中的URL按照PageRank值的大小排列,並按照該順序抓取頁面。如果每次抓取一個頁面,就重新計算PageRank值,一種折中方案是:每抓取K個頁面后,重新計算一次PageRank值。但是這種情況還會有一個問題:對於已經下載下來的頁面中分析出的鏈接,也就是我們之前提到的未知網頁那一部分,暫時是沒有PageRank值的。為了解決這個問題,會給這些頁面一個臨時的PageRank值:將這個網頁所有入鏈傳遞進來的PageRank值進行匯總,這樣就形成了該未知頁面的PageRank值,從而參與排序。
5)OPIC策略
該演算法實際上也是對頁面進行一個重要性打分。在演算法開始前,給所有頁面一個相同的初始現金(cash)。當下載了某個頁面P之後,將P的現金分攤給所有從P中分析出的鏈接,並且將P的現金清空。對於待抓取URL隊列中的所有頁面按照現金數進行排序。
6)大站優先策略
對於待抓取URL隊列中的所有網頁,根據所屬的網站進行分類。對於待下載頁面數多的網站,優先下載。這個策略也因此叫做大站優先策略。
2.2.3 兩個Python爬蟲實例
2.3 日誌收集(Flume)任何一個系統在運行過程中都會產生大量有用的數據。
Flume是一款分散式日誌收集系統。
Flume的邏輯架構如下所示:
Flume採用了分層架構:分別為agent,collector和storage
1)agent的作用是將數據源的數據發送給collector,數據源包括文件,網路埠等
2)collector的作用是將多個agent的數據匯總後,載入到storage中
3)storage是存儲系統,可以是一個普通file,也可以是HDFS,HIVE,HBase,分散式存儲等
4)Master是管理協調agent和collector的配置等信息,是flume集群的控制器
2.4 數據分發中間件(Kafka)數據採集上來后,需要送到後端組件進一步分析,為了簡化傳送邏輯、增強靈活度,在前端和後端的處理之需要一個消息中間件,以保障消息可靠性、匹配前後端的速度差。
Kafka架構如下圖所示