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