目錄
1 前言
2 關鍵模塊
2.1 數(shù)據(jù)倉庫的搭建
2.2 ETL
2.3 Kylin數(shù)據(jù)分析系統(tǒng)
2.4 數(shù)據(jù)可視化系統(tǒng)
2.5 報表模塊
3 最終成果
4 遇到問題
?文章來源地址http://www.zghlxwxcb.cn/news/detail-728637.html
?文章來源:http://www.zghlxwxcb.cn/news/detail-728637.html
1 前言
????????這是在公司云平臺部門做的一個項目,總體包括云上數(shù)據(jù)統(tǒng)計平臺的架構設計和組件開發(fā),在此只做技術分享,不涉及其他用途。該項目為搭建數(shù)據(jù)平臺以便開發(fā)數(shù)據(jù)倉庫和數(shù)據(jù)應用,支持對云上設備數(shù)據(jù)做管理和分析,并使用kylin框架、cube多維分析對數(shù)據(jù)倉庫的數(shù)據(jù)做統(tǒng)計和計算,以空間換時間和預計算的思想,每日自動化統(tǒng)計分析生成計算結果立方體(cube)數(shù)據(jù),對接到報表系統(tǒng)和數(shù)據(jù)可視化系統(tǒng),供領導和業(yè)務部門查看,以及便于觀察設備數(shù)據(jù)的歷史趨勢,讓業(yè)務部門更好地做業(yè)務決策。整體的架構與數(shù)據(jù)流向如下圖所示,包括Hive做數(shù)據(jù)倉庫、Spark實現(xiàn)的ETL組件、kylin、報表模塊和數(shù)據(jù)可視化系統(tǒng)等應用。每天Hive新增數(shù)據(jù)20多個G,kylin預計算之后的數(shù)據(jù)壓縮比為5%左右。
2 關鍵模塊
2.1 數(shù)據(jù)倉庫的搭建
? ? ? ?選擇Hive作為數(shù)據(jù)倉庫組件,存儲主要分為三類數(shù)據(jù),包括設備、用戶和生產(chǎn)數(shù)據(jù)。表的設計采用星型模型,維度表有model表,事實表有設備首次連接時間、設備在線狀態(tài)表等。每天全量拉取線上數(shù)據(jù)庫的數(shù)據(jù),數(shù)據(jù)倉庫保留最近兩天的數(shù)據(jù)。對于個別大數(shù)據(jù)量的表采用冷熱數(shù)據(jù)分離的方式,設置冷熱數(shù)據(jù)分割時間線,每次只拉取熱數(shù)據(jù),更新被update的冷數(shù)據(jù),再將冷熱數(shù)據(jù)合并。定時任務腳本定時清理過期分區(qū)的數(shù)據(jù)。
2.2 ETL
? ? ? ?ETL是將業(yè)務系統(tǒng)的數(shù)據(jù)經(jīng)過抽取、清洗轉換之后加載到數(shù)據(jù)倉庫的過程。ETL組件使用Spark框架,從線上數(shù)據(jù)庫和備份庫抽取數(shù)據(jù)到內(nèi)存中做計算和轉換,然后加載到數(shù)據(jù)倉庫Hive。ETL一方面做數(shù)據(jù)清洗,過濾掉不合法的值,一方面做數(shù)據(jù)粒度的轉換,例如時間字段轉換成粒度小的衍生字段。由于整體線上數(shù)據(jù)庫數(shù)據(jù)量不是特別大,所以選擇全量抽取。
2.3 Kylin數(shù)據(jù)分析系統(tǒng)
? ? ? ?原先采用的是使用spark內(nèi)存計算技術對數(shù)據(jù)做各種維度組合做聚合計算,將統(tǒng)計值存于mysql中,用戶從mysql中做二次聚合查詢結果耗時過長,所以調研一種OLAP引擎旨在提高查詢效率。kylin是國內(nèi)開發(fā)的一款開源的OLAP引擎,支持對數(shù)據(jù)做多維度的預計算,利用以空間換時間的思想,根據(jù)用戶建立的用戶模型做聚合計算,生成對應的多個數(shù)據(jù)集合cubeid,提供sql的方式查詢,提高數(shù)據(jù)查詢效率。數(shù)據(jù)模型主要包括設備數(shù)據(jù)、用戶數(shù)據(jù)和設備生產(chǎn)數(shù)據(jù)。維度眾多情況下預計算后的數(shù)據(jù)量龐大,需要對cube構建做優(yōu)化,主要通過兩方面優(yōu)化。一是使用聚合組,聚合組是通過分組的方式劃分維度,同一組中的維度才能被聚合計算,減少維度組合的情況,從而減少cubeid。二是使用cubeplanner進行優(yōu)化,該方式需要開啟dashboard對歷史統(tǒng)計請求監(jiān)控統(tǒng)計,根據(jù)統(tǒng)計數(shù)據(jù)包括cubei命中頻率以及采用貪心算法,經(jīng)過多輪計算,因為有些cubeid可以根據(jù)其他cubeid計算,每一輪計算效益比最大的cubeid,最終到達膨脹率閾值后停止。
?
2.4 數(shù)據(jù)可視化系統(tǒng)
? ? ?數(shù)據(jù)可視化系統(tǒng)用python(Django)構建,前端使用vue,前端接受用戶選擇的查詢維度,以表格和折線圖的形式展示結果數(shù)據(jù)。
?
?
2.5 報表模塊
? ? ? 報表模塊是一個python模塊,根據(jù)定義好的數(shù)據(jù)度量,獲取kylin統(tǒng)計數(shù)據(jù),生成Excel。度量數(shù)據(jù)主要設備和用戶數(shù)據(jù)在多維度下的各個場景下的聚合值,如設備24小時內(nèi)活躍數(shù)量、綁定賬號數(shù)量等。生成的Excel表格包含了全部報表數(shù)據(jù),每日郵件定時發(fā)出。另外還有定制報表,這一部分是業(yè)務部門根據(jù)自己的特定需求提出,不包含在上面的常規(guī)報表模塊,需要定制化開發(fā)。
3 最終成果
? ? ?最終實現(xiàn)了千萬設備數(shù)量每日自動化地統(tǒng)計分析,支持數(shù)據(jù)可視化系統(tǒng)查詢多維度數(shù)據(jù),數(shù)據(jù)查詢效率相比于原來的mysql查詢提高10倍左右。
4 數(shù)據(jù)平臺研發(fā)經(jīng)驗
?數(shù)據(jù)平臺的研發(fā)經(jīng)驗是:
1、選用或者打造一款適合ETL組件,能夠對線上數(shù)據(jù)做清洗和計算的處理;
2、選用一款數(shù)據(jù)倉庫的組件,如hive,然后進行數(shù)據(jù)倉庫的建設,可以參考業(yè)界通用的eds,dim,dw層分層架構;
3、對數(shù)據(jù)的分析可以考慮采用kylin或clinkhouse,對數(shù)據(jù)做多維度的分析和預計算;
4、 根據(jù)業(yè)務對數(shù)據(jù)的需求設計數(shù)據(jù)應用,如數(shù)據(jù)報表、數(shù)據(jù)可視化系統(tǒng),推薦系統(tǒng)等,更高級的數(shù)據(jù)應用使用數(shù)據(jù)挖掘和機器學習等人工智能技術進行數(shù)據(jù)處理和開發(fā)數(shù)據(jù)產(chǎn)品。整個數(shù)據(jù)平臺的建設過程包括架構設計、組件調研和研發(fā)、業(yè)務調研和數(shù)據(jù)產(chǎn)品規(guī)劃等過程,架構設計和業(yè)務需求是重點,決定于組件的選型和功能。????????
4 遇到問題
- 因系統(tǒng)重啟并且誤用tmp臨時目錄作為hdfs的存儲目錄,導致hdfs和kylin的所有元數(shù)據(jù)和業(yè)務數(shù)據(jù)都丟失,解決方案為重新創(chuàng)建kylin model和cube等信息,hdfs重新建立數(shù)據(jù)倉庫表,已生成的統(tǒng)計數(shù)據(jù)丟失了,可視化系統(tǒng)改為從舊數(shù)據(jù)統(tǒng)計系統(tǒng)獲取數(shù)據(jù)。
- 數(shù)據(jù)分析任務失敗沒能及時發(fā)現(xiàn),需要人工檢查,有時候需要外部門反饋才發(fā)現(xiàn),恢復數(shù)據(jù)困難。解決方案為增加任務執(zhí)行失敗告警,監(jiān)控各個任務的執(zhí)行時間和結果,建立超時和失敗等告警,及時發(fā)現(xiàn)問題,及時恢復數(shù)據(jù)。
- 數(shù)據(jù)構建任務執(zhí)行過程中失敗,查看kylin相關日志,報OOM錯誤,再查看Hadoop的DataNode、resourcemanager的相關日志查看具體job的報錯信息,通過調整mapreduce.map.java.opts和mapreduce.reduce.java.opts的值修改map和reduce線程的jvm配置。
?
?
?
到了這里,關于基于Kylin的數(shù)據(jù)統(tǒng)計分析平臺架構設計與實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!