1. 程式人生 > >大資料架構簡述(二):資料獲取

大資料架構簡述(二):資料獲取

1.資料分類

按資料形態,我們把資料分為結構化資料和非結構化資料兩種。

結構化資料如傳統的Data Warehouse資料,欄位有固定的長度和語義,計算機程式可以直接處理

非結構化資料有文字資料、影象資料、自然語言資料等,計算機程式無法直接進行處理,需要進行格式轉換或資訊提取。

2.資料獲取元件

常見的資訊獲取元件包括電信特有的探針技術,為獲取網頁資料常用的爬蟲,採集日誌資料的元件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架構如下圖所示


整個架構包括3個角色

1)生產者:訊息和資料產生者

2)代理:快取代理,Kafka的核心功能

3)消費者:訊息和資料消費者

整體架構很簡單,Kafka給Produce和Consumer提供註冊介面,資料從Produce傳送到Broker,Broker承擔一箇中間快取和分發的作用,負責分發註冊到系統中的Consumer