FEA大數據實踐之億級數據量處理

1、數據源介紹數據庫

某日誌平臺,詳細的記錄了數據庫使用者的下列數據:工具

用戶編號測試

訪問時間日誌

登陸終端內存

訪問模塊ci

訪問內容資源

如:用戶1000001在2016-08-08 08:08:08經過192.168.3.1訪問了A10001系統,查詢了2016-08-01到2016-08-07日的流水記錄;在2016-08-08 18:08:08經過192.167.3.1訪問了A10002系統,查詢了2016-07-01到2016-08-07日的流水記錄;…數據分析

此日誌平臺的特色:it

日誌量大:單日產生1億條數據集羣

數據不均:個別用戶單日數據量百萬級別

2、相關經驗總結

FEA進行數據分析的方式是:把DF二維表格加載進入內存,而後進行計算,優勢是在計算機內存愈來愈大的今天,分析人員能夠構建複雜的數據模型,而無需擔憂工具可否實現,…,

FEA面臨的新困難或者瓶頸是,數據量總會壓爆內存,加載速度也有限制,…,特別是在計算資源有限的狀況下(內存32G,數據量2T),筆者曾經遇到的狀況是:

加載800萬條數據,進行提取關鍵詞、分類彙總操做,FEA總用時10分鐘;可是加載2億條數據的時候,按照處理800萬條數據量的方法,發現目標沒法達成:

數據加載不完,集羣宕機

數據丟失,計算出錯

3、處理思路

數據

FEA節點

如上圖示例,億級數據總共分佈在15*15*4=900數據塊裏面,每塊的數據量大小不一,9個FEA節點,單個節點一次能夠加載200萬條數據(集羣穩定與可靠起見,FEA節點處理200萬條數據是可靠的)

處理思路是這樣的:若是某個5*5數據塊數據量超過某必定值如200萬,就一塊一塊加載,若是某5*5塊數據加起來不超過200萬條數據,就一塊兒加載

4、FEA實現

1. 計算目標

筆者要在此日誌平臺上完成一個操做,在哪一天,哪一個小時,哪一個用戶,哪一個終端,哪一個系統,訪問了多少次

2. 閾值設定

筆者的處理思路是:在一年的時間內,若是單日的數據量小於40萬條,就按日加載,若是單日的數據量大於等於40萬條就分小時加載

3.模型邏輯圖

原始數據須要經過適當的判斷,變成邏輯分片,如2016-01-01 00:00:00-00:59:59,…, 2016-01-01 23:00:00-23:59:59, 2016-01-02, 2016-01-03

邏輯上可行,要FEA實現,加載語句是帶有參數的,因此須要處理

每一次運行的結果須要單獨儲存在硬盤上,分片結果須要按照邏輯分片從新加載,造成最終結果

4. 實現細節

map實現

第一步就是利用es集羣按日統計數據,

已經知道每一天的數據量,下一步就是按照選擇大於等於40萬的日期,進一步按小時細分

第二步

已經對訪問量大於等於40萬的日期,實現了按時細分,下一步是把訪問量小於40萬的日期給合併進來

此表a就是邏輯分片表,no列是添加的編號,便於分片結果的保存,也是reduce實現過程的過程的關鍵

cluster實現

邏輯規則比較複雜的話,FEA實現cluster運算的關鍵是加載語句的不一樣,如面語句實現的核心是,若是某一日不按時加載,$spc就是空格

集羣運算

reduce實現

b表就是咱們要的最終結果

5、數據驗證

筆者在city=3306數據上,測試了2015-12-01,到2016-12-01的數據131,767,357條數據,運行2小時,沒有丟失一條數據,成功達成目標。

相關文章
相關標籤/搜索