【轉載】大資料線上離線一體化解決方案最佳實踐
簡介:本文重點介紹大資料產品集通用解決方案,即大資料線上計算+離線計算一體化解決方案,並通過真實案例模擬來說明此通用解決方案在具體專案中是如何落地的。
概述
本方案重點要落地的業務是中央網信辦網路安全應急指揮中心相關業務,由於需要處理的網路資料流量巨大,而且對實時和離線大資料計算分析均有要求,所以提供此線上離線一體化解決方案。
混合雲某專案主要業務簡介如下:
- 流量採集
流量採集技術是監控網路流量的關鍵技術之一,為流量分析提供資料來源。為了能夠在複雜企業網中有效的分析網路流量。
- 網路探針
網際網路探針(NET probe),偵聽網路資料包的網路探針稱為網際網路探針。資料包捕獲、過濾、分析都能在“網際網路探針”上實現。
本文主要針對流量採集業務來構建場景。
適用場景
- 既要資料實時分析又要資料離線分析的業務。
- 資料量計算較大且分析實時性要求較高的業務。
- 需要備份長期大量資料且能支援查詢的業務。
- 資料來源多種多樣需要進行大量同步和處理的業務。
技術架構
首先來看看業務架構:由於資料量比較龐大,涉及產品眾多,資料鏈路也比較複雜。
本實踐方案基於業務架構圖抽象,得出如下圖所示的技術架構和主要流程,並依據此編寫操作步驟:
從抽象的業務流程圖中,可以看出線上計算和離線計算兩條主鏈路,因此可通過本文大資料線上離線一體化解決方案來實施。
方案優勢
- 支援離線EB量級資料計算,2w以上併發作業,支援靈活排程多工併發。
- 實時計算延遲到秒級乃至毫秒級,單個作業吞吐量可達到百萬級別。
- 支援冷熱資料備份,降低運營成本。
- 支援無縫對接各類資料來源進行分析和查詢,10億+資料聚合亞秒級響應。
方案實施
資料建模
業務資料量比較龐大,為了便於處理和分析,首先進行數倉建模,並進行資料分層處理,方便實施多維分析並提升整個系統查詢效率,降低查詢穿透率。
雪花模型建模
根據對流量採集業務分析,比較適合資料倉庫常用建模方法——雪花模型。依據業務特徵和雪花模型建模原則,完成數倉建模,具體如下:
從以上模型看出,存在兩個事實表,分別描述採集機流量資訊和採集機規則事件資訊,另外三個維度表分別記錄運營商,採集機和地域維度,方便後續的業務分析。
資料分層
離線和線上引擎的資料量非常大,如果直接對接BI做資料分析,會導致查詢效率很低。因此需要進行資料分層,將海量的資料來源經過ETL,清洗,根據資料域和應用域抽取到ADS層,交給BI做分析,通用方法如下圖:
針對當前業務,可以進行資料分層,具體如下:
資料分層後,資料建模完成,後續重點用於離線鏈路實施中。
離線鏈路實施
本例中離線鏈路主要滿足的應用域客戶場景有以下兩個:
- 各個省每日的採集機事件總和統計線圖。
- 各運營商每日採集機位元組速率平均值看板 (可通過下拉列表分別檢視每個運營商的情況)。
離線鏈路主要針對大量資料進行批量處理和分析,並進行冷熱資料儲存,實時性要求不高。離線鏈路實施主要以base這個產品為核心來開發和串聯,資料鏈路情況如下,本文通過自建資料來模擬datahub資料來源。
具體實施步驟如下:
1.建立odps專案
首先新建odps任務雲賬號和配額組,並建立odps專案。
2.建立base專案
建立base專案,建立工作空間,並繫結剛剛建立的odps專案。
3.離線計算實施
a.根據資料建模部分的設計,完成相關資料表建立。
由於要建立的表比較多,這裡貼一個ods層事實表的ddl:
CREATE TABLE IF NOT EXISTS ods_wa_collector_flow_mpp
(
c_pcg INT COMMENT '網路',
c_pc INT COMMENT '省',
c_isp STRING COMMENT 'isp',
c_iao INT COMMENT '出入口',
c_ch BIGINT COMMENT '採集機',
c_pps BIGINT COMMENT '包速率',
c_bps BIGINT COMMENT '位元組速率',
c_time TIMESTAMP COMMENT '時間'
) ;
接著用同樣的方法依次建立各個資料層的資料表。
然後建立維度表,ddl示例如下:
CREATE TABLE IF NOT EXISTS dim_province
(
c_pc INT COMMENT '省程式碼',
c_name STRING COMMENT '省名稱'
) ;
接著用同樣的方法依次建立其他維度表。
b.通過資料加工,完成資料建模和資料分層
首先通過資料清洗操作,對貼源層資料進行處理,程式碼示例如下:
INSERT OVERWRITE TABLE dwd_wa_collector_flow_mpp
SELECT c_pcg
,c_pc
,c_isp
,c_iao
,c_ch
,c_pps
,c_bps
,c_time
FROM ods_wa_collector_flow_mpp
WHERE c_ch >= 0
AND c_pps >= 0
AND c_bps >= 0
;
接下來針對dwd層的資料,完成資料匯聚,程式碼示例如下:
INSERT OVERWRITE TABLE dws_wa_union
SELECT a.c_ch
,c_pcg
,c_pc
,c_isp
,c_iao
,c_pps
,c_bps
,c_rule_id
,c_events
,a.c_time
FROM
(
SELECT c_pcg,c_pc,c_isp,c_iao,c_ch,c_pps,c_bps,c_time FROM dwd_wa_collector_flow_mpp WHERE c_time = cast(to_char(getdate(),'yyyy-mm-dd 00:00:00') as timestamp)
)a
FULL OUTER JOIN
(
SELECT c_ch,c_rule_id,c_events,c_time FROM dwd_wa_collector_rule_event_mpp WHERE c_time = cast(to_char(getdate(),'yyyy-mm-dd 00:00:00') as timestamp)
)b
ON a.c_ch = b.c_ch;
接下來構造應用域的資料表,用於應用域的分析和查詢,示例為統計各個省採集機事件總數表:
INSERT OVERWRITE TABLE ads_province_rule_event
SELECT c_ch
,c_pc
,c_rule_id
,c_events
,c_time
FROM dws_wa_union;
SELECT * FROM ads_province_rule_event;
最後,通過離線同步將應用域的資料同步到互動引擎adb3.0中,如下:
完成後,通過base的工作流任務圖將各個節點串聯起來,點選run按鈕即可觸發例項執行,並生成應用域資料,用於後續分析和查詢,具體任務圖如下:
可以看到執行成功了,之後將該任務圖提交到生產環境中,就可以做到每日自動生產資料用於生產分析了。
4.結果分析實施
最終產出的應用域資料,一般會離線同步到互動式引擎中用於查詢分析,這裡選擇的互動式引擎是adb3.0。
a.配置資料來源和資料集
資料來源配置
資料集配置
可以看到,我們在資料集裡面配置了維表和事實表的關聯。
b.生成儀表板圖
基於配置的資料集,通過簡單的配置便可以得出:各個省每日的採集機事件總和線圖,各運營商每日採集機位元組速率平均值看板。
客戶可以通過儀表板的資料,分析採集機網路流量情況,以上就是離線鏈路總體實施情況。
實時鏈路實施
本例中實時鏈路主要滿足的應用域客戶場景如下:
每日實時採集機事件總和統計
區別於離線鏈路,實時鏈路重點滿足客戶對於資訊處理分析的高時效性和可操作性的要求,例如客戶就想看分鐘級別的資料波動和資料大盤變化,方便及時做出決策,此時就需要實時計算來滿足需求,實時計算鏈路大致如下圖所示:
1.實時計算資料構造實時計算資料量相對離線計算要小一些,在本例中就不做複雜的資料建模了。
a.datahub實時資料生成
由於是實時鏈路,本文采用組內ase工具來持續生產實時資料傳入datahub,並讓flink訂閱datahub的資料,進行實時計算,ase會自動建立一個datahub的topic(ase_dr_datahub_topic01)用於傳輸資料。如下圖所示,ase_dr_datahub_topic01在持續的接收實時資料。
接下來需要再建立一個topic(ase_dr_datahub_topic02),用於接收flink處理後的資料。
b.datahub實時資料訂閱
datahub的topic(ase_dr_datahub_topic01)建好並接收資料後,需要建立訂閱來讓其他應用實時獲取datahub的資料。
2.實時計算實施接收到實時資料後,flink需要實時對資料進行計算處理,具體實施步驟如下:
a.建立flink作業
進入realtime compute flink產品,新建實時計算作業。
b.實時計算
通過flink對源資料進行計算處理,本例主要是完成資料清洗操作,相關程式碼如下:
create TEMPORARY TABLE datahub_source (
c_ch BIGINT COMMENT '採集機',
c_rule_id BIGINT COMMENT '規則id',
c_events BIGINT COMMENT '事件數',
c_time BIGINT COMMENT '時間'
) with (
'connector' = 'datahub',
'endpoint' = 'https://datahub.xxxx.com',
'project' = 'ase_datahub_pj_61232508463140',
'topic' = 'ase_dr_datahub_topic01',
'accessId' = 'xxxx',
'accessKey' = 'xxxx',
'subId' ='xxxx'
);
CREATE TEMPORARY TABLE datahub_des (
c_ch BIGINT COMMENT '採集機',
c_rule_id BIGINT COMMENT '規則id',
c_events BIGINT COMMENT '事件數',
c_time BIGINT COMMENT '時間'
)
with (
'connector' = 'datahub',
'endpoint' = 'https://datahub.xxxx.com',
'project' = 'ase_datahub_pj_61232508463140',
'topic' = 'ase_dr_datahub_topic02',
'accessId' = 'xxxx',
'accessKey' = 'xxxx'
);
insert into odps_des
select * from datahub_source
where c_ch != 0
and c_events >= 0;
接下來在ase_dr_datahub_topic02中建立同步任務,將實時計算的結果資料同步到ADB3.0中。
看到對應的互動引擎ADB3.0相應的表中存在資料,即說明同步成功。
3.結果分析實施
實時計算鏈路採用datav進行實時大屏展示和分析,進入datav產品介面。
a.新增資料來源
輸入基本資訊後,完成資料來源的新增和資料集的建立。
資料來源新增:
資料集建立:
b.建立並配置應用大屏分析器
通過建立和配置應用大屏分析器,可以繫結實時資料來源,並配置大屏展現內容和形式。
c.切換到普通大屏模式,觀察計算結果的實時變化
在分析模式下完成資料來源和展示內容配置後,切換到普通大屏模式進行展示配置,並設定實時重新整理間隔。
接下來切換到預覽模式下,就可以看到結果實時變化了,除錯沒問題後,點擊發布即可。
以上就是大資料線上和離線兩條最通用的計算鏈路,在實際客戶場景下具體應用落地。
本文為阿里雲原創內容,未經允許不得轉載。