隨著數字化進程的不斷提升,智慧城市建設需求越來越迫切,中移物聯OneNET城市物聯網平臺的(de)落地項目也越(yue)(yue)來越(yue)(yue)多。同(tong)時(shi),接入城市物聯網平臺的(de)設備增多,平臺上的(de)數據(ju)量(liang)也越(yue)(yue)來越(yue)(yue)大(da)。面對(dui)(dui)這么多復雜海量(liang)的(de)數據(ju),我(wo)(wo)們如何有效利用(yong)它們,達到不浪費(fei)資源,對(dui)(dui)這些數據(ju)進行統一(yi)管理(li)成為我(wo)(wo)們應該考慮的(de)問題,于是大(da)數據(ju)技術應運(yun)而生。
大數(shu)(shu)據(ju)(ju)(ju)技術就是對(dui)數(shu)(shu)據(ju)(ju)(ju)進行收集,經過(guo)分析后來做一些有意義的事情,其中包括數(shu)(shu)據(ju)(ju)(ju)采集、數(shu)(shu)據(ju)(ju)(ju)存儲、數(shu)(shu)據(ju)(ju)(ju)處理、數(shu)(shu)據(ju)(ju)(ju)共享等。
數據采集
數據采集是什么?
大數據(ju)(ju)(ju)采(cai)集(ji)(ji)技術就是指對(dui)數據(ju)(ju)(ju)進行(xing)提取、轉(zhuan)換、加載,通過這些操作將不同數據(ju)(ju)(ju)源的(de)數據(ju)(ju)(ju)整合成一個(ge)新的(de)數據(ju)(ju)(ju)集(ji)(ji),為后面的(de)數據(ju)(ju)(ju)分(fen)析(xi)提供依據(ju)(ju)(ju)。城市物聯網平臺的(de)數據(ju)(ju)(ju)主要(yao)包括離線數據(ju)(ju)(ju)和實時數據(ju)(ju)(ju)兩(liang)個(ge)部分(fen),現在需要(yao)對(dui)這兩(liang)個(ge)部分(fen)的(de)數據(ju)(ju)(ju)進行(xing)采(cai)集(ji)(ji)。
離線數據采集
離線數據主要來源(yuan)于MongoDB、MySQL、Postgresql,采用(yong)的(de)方法是將(jiang)數據庫(ku)中(zhong)的(de)數據導(dao)出為Bson、CSV、Txt文件(jian),再統一對導(dao)出的(de)文件(jian)進行管(guan)理。
實時數據采集
實(shi)時數(shu)據主要來源于Kafka,采(cai)用Flume進行采(cai)集(ji)。Flume由Source(數(shu)據源)、Sink(數(shu)據接收方(fang))、Channel(緩沖區)幾部分組成。Flume是一個分布式(shi)、可(ke)(ke)靠(kao)(kao)、高(gao)可(ke)(ke)用的(de)海量日志采(cai)集(ji)系統,具有可(ke)(ke)橫(heng)向擴展、延展性、可(ke)(ke)靠(kao)(kao)性等優勢,此外Flume 針對(dui)特殊場(chang)景也具備良好(hao)的(de)自定義擴展能(neng)力(li),因(yin)此Flume可(ke)(ke)以適用于大部分的(de)日常數(shu)據采(cai)集(ji)場(chang)景。平臺通(tong)過對(dui)Flume進行簡單(dan)配置(zhi)實(shi)現(xian)Kafka的(de)數(shu)據采(cai)集(ji)。
數據存儲
數據存儲是什么?
大數據(ju)存(cun)儲是非常關鍵一步(bu),將采集的(de)(de)數據(ju)進(jin)行存(cun)儲,再進(jin)行后(hou)續的(de)(de)加工分析。平臺數據(ju)量(liang)大,單機容量(liang)無法存(cun)儲大量(liang)數據(ju),需要多個機器儲存(cun),HDFS具有高容錯性、適(shi)合批處(chu)理(li)、流(liu)式訪問、大數據(ju)處(chu)理(li)等優點(dian),因此采用(yong)分布式文件系統HDFS對數據(ju)進(jin)行存(cun)儲。
數倉規范
數(shu)(shu)倉模(mo)型中(zhong)有原始數(shu)(shu)據(ju)(ju)層(ceng)(ODS)、維表層(ceng)(DIM)、數(shu)(shu)據(ju)(ju)匯(hui)總層(ceng)(DW)、數(shu)(shu)據(ju)(ju)應(ying)用層(ceng)(ADS)。層(ceng)次加(jia)工順序:按照ODS清洗->DW、DIM加(jia)工->ADS數(shu)(shu)據(ju)(ju)應(ying)用層(ceng)的(de)層(ceng)次順序依序加(jia)工數(shu)(shu)據(ju)(ju),禁止數(shu)(shu)據(ju)(ju)逆向流動。
當數據倉庫表(biao)創建、修(xiu)改時(shi)需(xu)要說明用(yong)途(tu)和字(zi)段含(han)義。表(biao)名(ming)(ming)統(tong)一采(cai)用(yong)蛇(she)形命名(ming)(ming)法(snake_case_naming_style),并由以下三部分(fen)組成(cheng):
{所在分層}_{業務模型名稱}_{表后(hou)綴名}
其中,業務模型名稱不超(chao)過20個字(zi)符,當(dang)字(zi)符數量超(chao)過可采(cai)用縮寫,表(biao)后綴由數據加(jia)工頻(pin)率和數據加(jia)工類型各一(yi)個英(ying)文字(zi)母共同構成。

數倉分層結構
數據處理
DolphinScheduler是什么?
DolphinScheduler是一個分布式易擴展的可視(shi)化(hua)DAG工(gong)作流(liu)任務調(diao)度開源系統。
DolphinScheduler的優勢
DolphinScheduler是一個分(fen)布式(shi)去(qu)中心化(hua),易擴展(zhan)的可(ke)視(shi)化(hua)DAG工作流(liu)(liu)任(ren)務(wu)(wu)調(diao)度(du)平臺(tai),采用(yong)DAG監控(kong)界面,所有(you)流(liu)(liu)程定(ding)義都(dou)是可(ke)視(shi)化(hua),一鍵部(bu)署;去(qu)中心化(hua)的多(duo)Master和多(duo)Worker, 自身支(zhi)持HA功能, 采用(yong)任(ren)務(wu)(wu)隊列來避免過載,不會造成機器卡死;支(zhi)持暫停恢復(fu)操(cao)作,支(zhi)持多(duo)租戶,更好的應對大(da)數據(ju)的使用(yong)場(chang)景.,支(zhi)持更多(duo)的任(ren)務(wu)(wu)類(lei)型(xing);支(zhi)持自定(ding)義任(ren)務(wu)(wu)類(lei)型(xing),調(diao)度(du)器使用(yong)分(fen)布式(shi)調(diao)度(du),調(diao)度(du)能力隨集群線性增(zeng)長,Master和Worker支(zhi)持動(dong)態上下線。
選用DolphinScheduler原因
DolphinScheduler可以解決(jue)數據(ju)研發ETL 錯綜(zong)復雜的依賴關系,不能直(zhi)觀監(jian)(jian)控任務健康狀態等問題(ti)。DolphinScheduler以DAG流式的方(fang)式將Task組(zu)裝起來(lai),可實時監(jian)(jian)控任務的運行狀態,同時支持(chi)重試(shi)、從指定節點恢復失敗、暫(zan)停及Kill任務等操(cao)作。因此平臺采用DolphinScheduler對大數據(ju)進(jin)行分析加工(gong)。
數據開發流程
1.基于(yu)ETL工具采集物聯(lian)網(wang)基礎信息(xi)數(shu)據至ODS層,主要包含平臺用戶(hu)信息(xi)、產(chan)品(pin)信息(xi)、設備檔案信息(xi)、告(gao)警(jing)配(pei)置等信息(xi)。
2.基于Flume+Kafka,實時采集設備上報屬性(xing)與事件數據(ju),存儲到(dao)ODS層。
3.基于(yu)質量校(xiao)驗(yan)規則(ze),定期對業務基礎數(shu)據進行(xing)質量校(xiao)驗(yan)(如設備(bei)經緯度信息(xi)、歸屬組織、編(bian)碼(ma)規范進行(xing)校(xiao)驗(yan));實時(shi)對設備(bei)上(shang)報(bao)數(shu)據進行(xing)校(xiao)驗(yan)(如設備(bei)上(shang)報(bao)數(shu)據取值范圍、數(shu)值正(zheng)則(ze)匹配)。
4.將ODS層的(de)數(shu)(shu)據(ju)進行清洗轉(zhuan)換,對MongoDB JSON格式的(de)數(shu)(shu)據(ju)字段(duan)進行提取(qu),關(guan)聯(lian)聚合產(chan)品設備信息(xi)形成寬表(biao),將數(shu)(shu)據(ju)存入(ru)DW層。
5.根據(ju)業務(wu)邏(luo)輯編寫(xie)Python、Shell、SQL腳(jiao)本(ben),通過DolphinScheduler定(ding)時(shi)調度(du)工(gong)作(zuo)流(liu),對DW層的數據(ju)進(jin)行業務(wu)處理,形成每日用(yong)戶新增、設備日活(huo)、設備上(shang)報數據(ju)量、上(shang)下行消息數等(deng)指標(biao),將結果寫(xie)入(ru)ADS層。
6.通過數(shu)(shu)據(ju)服務,基(ji)于API接口,結合用戶權限,將ADS層數(shu)(shu)據(ju)共享開放給領(ling)導(dao)駕駛艙、數(shu)(shu)據(ju)市場等,實(shi)現數(shu)(shu)據(ju)治理(li)價值。