任女爾 魏金津 蔡建軍
摘要:汽車行業(yè)會(huì)產(chǎn)生大量數(shù)據(jù),需要對(duì)這些數(shù)據(jù)進(jìn)行存儲(chǔ)與分析?;贏pacheAmbari搭建大數(shù)據(jù)基礎(chǔ)設(shè)施,通過Nifi可以將各種型式的數(shù)據(jù)進(jìn)行處理、整合并導(dǎo)入大數(shù)據(jù)存儲(chǔ)。通過Kylin可以對(duì)存儲(chǔ)的大數(shù)據(jù)進(jìn)行降維,提高查詢速度?;趕pringCloud與開發(fā)計(jì)算模塊并,對(duì)外提供Rest接口,實(shí)現(xiàn)大數(shù)據(jù)查詢功能。
關(guān)鍵詞:Amabri;Nifi;Kylin;SpringCloud
中圖分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)31-0001-05
1概述
汽車行業(yè)的軟件項(xiàng)目中,經(jīng)常有這樣的業(yè)務(wù)場(chǎng)景。比如新能源汽車數(shù)據(jù)采集,一輛車一天的運(yùn)行數(shù)據(jù)量為0.375G,這樣一年的運(yùn)行數(shù)據(jù)量可達(dá)136.875G,車的數(shù)量越多數(shù)據(jù)量就越多,能達(dá)到T級(jí)甚至更大。這些數(shù)據(jù)經(jīng)常是以txt、CSV等形式提供的,有結(jié)構(gòu)化的也有非結(jié)構(gòu)化的,我們需要對(duì)這些數(shù)據(jù)進(jìn)行存儲(chǔ)和分析。
為了突破數(shù)據(jù)存儲(chǔ)的瓶頸上限,為數(shù)據(jù)資源中心未來的數(shù)據(jù)倉(cāng)庫(kù)構(gòu)建做一定的技術(shù)儲(chǔ)備,所以我們基于Ambari建設(shè)了一個(gè)數(shù)據(jù)處理平臺(tái),實(shí)現(xiàn)了:
1)使用Nifi,數(shù)據(jù)可配置導(dǎo)入,無須開發(fā)即可接入txt、CSV或是其他數(shù)據(jù)源,將CSV文件導(dǎo)入Hive存儲(chǔ);
2)海量數(shù)據(jù)的存儲(chǔ);
3)通過Kvlin將數(shù)據(jù)降維存儲(chǔ)到Hbase,計(jì)算模塊再調(diào)用Kvlin查詢數(shù)據(jù),效率高;
4)代碼開發(fā)計(jì)算模塊實(shí)現(xiàn)SQL的管理,能夠在uI上寫新的查詢語(yǔ)句,直接暴露Rest接口,供外部程序調(diào)用。
計(jì)算模塊基于SpringClould開發(fā),使用JHipster生成微服務(wù)基礎(chǔ)代碼,可連接Kvlin、Groovy執(zhí)行計(jì)算。支持通過docker容器運(yùn)行,方便橫向擴(kuò)展。
目前經(jīng)測(cè)已成功導(dǎo)入一份3500萬行的文件(6.4GB)。
2系統(tǒng)架構(gòu)
2.1系統(tǒng)結(jié)構(gòu)
該項(xiàng)目基于Hortonworks的HDP搭建了大數(shù)據(jù)的基礎(chǔ)設(shè)施?;贖DF實(shí)現(xiàn)基本的數(shù)據(jù)ETL,用于系統(tǒng)問的數(shù)據(jù)集成。通過Kvlin抽取、聚合Hive中的數(shù)據(jù),構(gòu)建低維Cube表存儲(chǔ)與Hbase,形成降維索引層,用于支持MOLAP場(chǎng)景。最后,通過基于SpringClould開發(fā)的計(jì)算模塊,管理計(jì)算,該模塊可連接Postgres、Kvlin、Sqlite、Oracle、Groovy執(zhí)行計(jì)算邏輯,可實(shí)現(xiàn)鏈?zhǔn)接?jì)算,從而滿足復(fù)雜計(jì)算場(chǎng)景,為大數(shù)據(jù)可視化、機(jī)器學(xué)習(xí)、人工智能等提供支持。
2.2功能劃分與流程處理
2.3大數(shù)據(jù)基礎(chǔ)設(shè)施管理
大數(shù)據(jù)基礎(chǔ)設(shè)施的搭建是極為麻煩的,Hadoop的安裝、調(diào)試往往需要苦苦耗費(fèi)好幾天,更別提Hbase、Nifi、Kylin等Ha-doop組件,所以我們通過Apache Ambari去搭建。
Ambari是開源的,作用是創(chuàng)建、管理、監(jiān)控Hadoop整個(gè)生態(tài)圈(例如Hive、Hbase、Zookeeper等)的集群,讓Hadoop以及相關(guān)的大數(shù)據(jù)軟件更容易使用的一個(gè)工具。Ambari現(xiàn)在所支持的平臺(tái)組件也越來越多,例如流行的Spark、Storm等計(jì)算框架,以及資源調(diào)度平臺(tái)ARN等,我們都能輕松地通過Ambari來進(jìn)行部署。通常場(chǎng)景,會(huì)登錄Ambari進(jìn)行故障排查、服務(wù)重啟、配置查找/修改等工作。
Ambari使大數(shù)據(jù)基礎(chǔ)設(shè)施安裝,官方說法是從數(shù)人天降低到一人天,運(yùn)維人數(shù)從數(shù)十人降低到幾人。如圖3所示。
3Nifi
因?yàn)槠髽I(yè)數(shù)據(jù)來源是多元化的,需要經(jīng)過整合后接入ha-doop生態(tài)圈以及各種存儲(chǔ)分析組件,我們希望這個(gè)過程是平滑、可視的。
Nifi是一個(gè)開源的數(shù)據(jù)處理與分發(fā)系統(tǒng),可以通過簡(jiǎn)單的Processor對(duì)數(shù)據(jù)流進(jìn)行處理,他提供可視化的uI界面,各個(gè)模塊組件之間可配置,各個(gè)數(shù)據(jù)處理模塊之間的數(shù)據(jù)流轉(zhuǎn)情況??梢詫⒏鞣N數(shù)據(jù)源的數(shù)據(jù)導(dǎo)入Hive、Hbase存儲(chǔ)。
4KyLin
Kylin簡(jiǎn)單說就是做大數(shù)據(jù)查詢的,可以對(duì)大數(shù)據(jù)進(jìn)行降維,可以幫助我們對(duì)大數(shù)據(jù)進(jìn)行多維度的分析,提高查詢效率。
對(duì)于海量數(shù)據(jù),每增加一個(gè)維度,數(shù)據(jù)量就是笛卡兒積,減少維度能夠大量減少數(shù)據(jù)量,大多數(shù)計(jì)算不需要用到所有維度的。
以近SQL語(yǔ)句,查詢T級(jí)別大數(shù)據(jù)秒級(jí)可完成。
5數(shù)據(jù)集成
5.1創(chuàng)建Hive表
登錄Ambari集群任一服務(wù)器,執(zhí)行hive命令進(jìn)去Hive命令行模式,即可運(yùn)行SQL語(yǔ)句創(chuàng)建/查詢數(shù)據(jù)表。如圖4所示。
5.2創(chuàng)建Nifi數(shù)據(jù)流
Nifi是一個(gè)開放的數(shù)據(jù)集成開發(fā)平臺(tái),數(shù)據(jù)處理平臺(tái)通過Apache Nifi實(shí)現(xiàn)數(shù)據(jù)ETL,通過Ambari的QuickLinks進(jìn)入Nifi-uI界面,通過對(duì)圖形化數(shù)據(jù)處理流程的設(shè)計(jì)及配置,實(shí)現(xiàn)數(shù)據(jù)的ETL流程。
下圖樣例流程實(shí)現(xiàn)了:1)CSV數(shù)據(jù)文件的到達(dá)監(jiān)聽;2)CSV數(shù)據(jù)文件的解析;3)Hive的流導(dǎo)入;41KylinCube的增量構(gòu)建。
如圖5所示。
5.3kylin多維交互查詢
通過Apache Kylin抽取、聚合Hive中的數(shù)據(jù),構(gòu)建低維Cube表存儲(chǔ)與Hbase,形成降維索引層,用于支持MOLAP場(chǎng)景,如圖6所示。
KvlinCube(低維表)的創(chuàng)建過程大致過程為:創(chuàng)建project、同步Hive表、創(chuàng)建Model、創(chuàng)建Cube。
6計(jì)算模塊
6.1系統(tǒng)介紹
計(jì)算模塊可連接Postgres、Kylin、Sqlite、Oracle、Groovy等執(zhí)行計(jì)算邏輯,可實(shí)現(xiàn)鏈?zhǔn)接?jì)算,從而能夠滿足大多數(shù)場(chǎng)景的BI計(jì)算需要。
Kvlin是基于hive構(gòu)建低維表,低維表就是抽取部分列,聚合度量值,形成一個(gè)小的內(nèi)存表,數(shù)據(jù)處理平臺(tái)就可以連Kylin執(zhí)行查詢了,在低維表上運(yùn)行sql,返回結(jié)果,查詢速度快。
計(jì)算模塊通過Rest接口,被外部系統(tǒng)調(diào)用。為了滿足系統(tǒng)對(duì)吞吐量,性能,穩(wěn)定性的需求,而在技術(shù)上選擇基于Spring-Cloud的微服務(wù)架構(gòu)與Docker容器。這個(gè)架構(gòu)的好處是,服務(wù)可以開任意多實(shí)例進(jìn)行橫向擴(kuò)展,還可以保持服務(wù)的獨(dú)立性,屏蔽底層物理平臺(tái)的差異。為了加快開發(fā)速度,我們選用了JHipster,一個(gè)開源的SpringCloud代碼生成腳手架,可以自動(dòng)化生成前后臺(tái)一套完整的微服務(wù)體系代碼,包括監(jiān)控、日志、權(quán)限等,正常情況下可以減少一半以上工作量。
計(jì)算模塊還提供了一個(gè)可輸入Kylin、Groovy等大數(shù)據(jù)操縱腳本的uI界面,將腳本傳遞到Java后臺(tái)執(zhí)行,并返回結(jié)果。
6.2進(jìn)入計(jì)算模塊的數(shù)據(jù)處理界面
進(jìn)人計(jì)算模塊前臺(tái)數(shù)據(jù)處理界面,點(diǎn)擊“添加”按鈕。
如圖7所示。
填寫基本信息:
命名控件:用于將計(jì)算分組,方便排序/搜索。
名稱:中文名稱,方便閱讀。
標(biāo)識(shí)符:需全局唯一,用于外部系統(tǒng)調(diào)用該計(jì)算。
6.3計(jì)算開發(fā)
數(shù)據(jù)處理(計(jì)算)是通過順序執(zhí)行“子處理”實(shí)現(xiàn)的。
uI元素介紹:
1)基本信息:數(shù)據(jù)處理的基本信息;Rest接口決定該數(shù)據(jù)處理是否支持外部系統(tǒng)的Rest調(diào)用;“停用”/“啟用”按鈕可停用/啟用該數(shù)據(jù)處理。
2)測(cè)試參數(shù):方便子處理的開發(fā),可隨時(shí)測(cè)試運(yùn)行。
3)子處理列表:用于添加/排序刪除子處理。
4)子處理信息:
名稱:子處理名稱,在該數(shù)據(jù)處理范圍內(nèi)唯一,計(jì)算結(jié)果中將用該名稱作為結(jié)果鍵值
類型:目前支持以下類型
[Sql-服務(wù)DB]代碼類型為PostgresSQL,用于查詢計(jì)算服務(wù)本身的數(shù)據(jù)庫(kù)。
[Sql-Kylin]代碼為KvlinSQL,用于查詢Kylin中的Cube表。
[Sql-Oracle]代碼為Oracle SQL,用于查詢配置中指定Ora-cle實(shí)例的數(shù)據(jù)表。
[Sql-中間結(jié)果]查詢內(nèi)存Sqlite數(shù)據(jù)庫(kù),前置子處理需開啟“輸出表”,表名為子處理名稱。
[腳本Groovy]前置子處理需開啟“輸出對(duì)象”。
輸出表:若子處理開啟該項(xiàng),結(jié)果將存儲(chǔ)與內(nèi)存sQLite數(shù)據(jù)庫(kù),表明即為該子處理名稱,后續(xù)的“Sql-中間結(jié)果”子處理可編寫sql訪問該數(shù)據(jù)。
輸出對(duì)象:若子處理開啟該項(xiàng),數(shù)據(jù)結(jié)果將存儲(chǔ)與內(nèi)部數(shù)據(jù)結(jié)果(HashMap),鍵值為該子處理名稱,后續(xù)“腳本-Groovy”子處理可編寫Groovy腳本訪問該數(shù)據(jù)集。
輸出結(jié)果:若子處理開啟該項(xiàng),結(jié)果將最終返回給調(diào)用者。
代碼:子處理的具體代碼,根據(jù)子處理“類型”,填寫SQL或Groovy腳本。
如圖8所示。
5)測(cè)試子處理:
測(cè)試子處理將順序執(zhí)行子處理至“當(dāng)前”子處理,傳人參數(shù)為“測(cè)試參數(shù)”,結(jié)果JSON字段說明:
success:是否成功。
error:若失敗,返回具體錯(cuò)誤信息。
results:結(jié)果集,鍵值為子處理名稱,包含開啟了輸出結(jié)果的前置子處理結(jié)果和當(dāng)前子處理結(jié)果。
如圖9所示。
6)外部系統(tǒng)調(diào)用
identNer:數(shù)據(jù)處理的標(biāo)識(shí)符
paramMap:輸人參數(shù),類型為JSON,例:
{“paraml”:“valuel”,“param2”:100}
7總結(jié)
基于Ambari搭建大數(shù)據(jù)基礎(chǔ)設(shè)施,將汽車行業(yè)的大量結(jié)構(gòu)化、非結(jié)構(gòu)化的數(shù)據(jù)經(jīng)處理后導(dǎo)入Hive或Hbase存儲(chǔ)。基于SpringCloud腳手架JHipster開發(fā)計(jì)算模塊,開發(fā)效率可以高出50%,可以發(fā)布為Docker容器根據(jù)訪問量自由做橫向擴(kuò)展。使用Kvlin對(duì)數(shù)據(jù)進(jìn)行降維處理,計(jì)算模塊的大數(shù)據(jù)檢索效率更高。該項(xiàng)目可以被外部系統(tǒng)用來做數(shù)據(jù)分析,大數(shù)據(jù)可視化,機(jī)器學(xué)習(xí),人工智能等。