數(shù)據(jù)中臺(tái)怎么選型?終于有人講明白了
01數(shù)據(jù)倉庫選型
數(shù)據(jù)倉庫選型是整個(gè)數(shù)據(jù)中臺(tái)項(xiàng)目的重中之重,是一切開發(fā)和應(yīng)用的基礎(chǔ)。而數(shù)據(jù)倉庫的選型,其實(shí)就是Hive數(shù)倉和非Hive數(shù)倉的較量。Hive數(shù)倉以Hive為核心,搭建數(shù)據(jù)ETL流程,配合Kylin、Presto、HAWQ、Spark、ClickHouse等查詢引擎完成數(shù)據(jù)的最終展現(xiàn)。而非Hive數(shù)倉則以Greenplum、Doris、GaussDB、HANA(基于SAP BW構(gòu)建的數(shù)據(jù)倉庫一般以HANA作為底層數(shù)據(jù)庫)等支持分布式擴(kuò)展的OLAP數(shù)據(jù)庫為主,支持?jǐn)?shù)據(jù)ETL加工和OLAP查詢。
自從Facebook開源Hive以來,Hive逐漸占領(lǐng)了市場(chǎng)。Hive背靠Hadoop體系,基于HDFS的數(shù)據(jù)存儲(chǔ),安全穩(wěn)定、讀取高效,同時(shí)借助Yarn資源管理器和Spark計(jì)算引擎,可以很方便地?cái)U(kuò)展集群規(guī)模,實(shí)現(xiàn)穩(wěn)定地批處理。Hive數(shù)據(jù)倉庫的優(yōu)勢(shì)在于可擴(kuò)展性強(qiáng),有大規(guī)模集群的應(yīng)用案例,受到廣大架構(gòu)師的推崇。
雖然Hive應(yīng)用廣泛,但是其缺點(diǎn)也是不容忽視的。
Hive的開源生態(tài)已經(jīng)完全分化,各大互聯(lián)網(wǎng)公司和云廠商都是基于早期的開源版本進(jìn)行個(gè)性化修改以后投入生產(chǎn)使用的,很難再回到開源體系。Hive現(xiàn)在的3個(gè)版本方向1.2.x、2.1.x、3.1.x都有非常廣泛的應(yīng)用,無法形成合力。
開源社區(qū)發(fā)布的Hive版本過于粗糙,漏洞太多。最典型的就是Hive 3.1.0版本里面的Timestamp類型自動(dòng)存儲(chǔ)為格林尼治時(shí)間的問題,無論怎么調(diào)整參數(shù)和系統(tǒng)變量都不能解決。據(jù)HDP官方說明,需要升級(jí)到3.1.2版才能解決。根據(jù)筆者實(shí)際應(yīng)用的情況,Hive 3.1.2版在大表關(guān)聯(lián)時(shí)又偶爾出現(xiàn)inert overwrite數(shù)據(jù)丟失的情況。
Hive最影響查詢性能的計(jì)算引擎也不能讓人省心。Hive支持的查詢引擎主要有MR、Spark、Tez。MR是一如既往的性能慢,升級(jí)到3.0版也沒有任何提升?;趦?nèi)存的Spark引擎性能有了大幅提升,3.x版本的穩(wěn)定性雖然也有所加強(qiáng),但是對(duì)JDBC的支持還是比較弱?;贛R優(yōu)化的Tez引擎雖然是集成最好的,但是需要根據(jù)Hadoop和Hive版本自行編譯,部署和升級(jí)都十分復(fù)雜。
Hive對(duì)更新和刪除操作的支持并不友好,導(dǎo)致在數(shù)據(jù)湖時(shí)代和實(shí)時(shí)數(shù)倉時(shí)代被迅速拋棄。
Hive的查詢引擎也很難讓用戶滿意,最典型的就是以下查詢引擎。
1)Spark支持SQL查詢,需要啟動(dòng)Thrift Server,表現(xiàn)不穩(wěn)定,查詢速度一般為幾秒到幾分鐘。
2)Impala是CDH公司推出的產(chǎn)品,一般用在CDH平臺(tái)中,查詢速度比Spark快,由于是C++開發(fā)的,因此非CDH平臺(tái)安裝Impala比較困難。
3)Presto和Hive一樣,也是Facebook開源的,語法不兼容Hive,查詢速度一般為幾秒到幾分鐘。
4)Kylin是國(guó)人開源的MOLAP軟件,基于Spark引擎對(duì)Hive數(shù)據(jù)做預(yù)算并保存在Hbase或其他存儲(chǔ)中,查詢速度非??觳⑶曳€(wěn)定,一般在10s以下。但是模型構(gòu)建復(fù)雜,使用和運(yùn)維都不太方便。
5)ClickHouse是目前最火的OLAP查詢軟件,特點(diǎn)是查詢速度快,集成了各大數(shù)據(jù)庫的精華引擎,獨(dú)立于Hadoop平臺(tái),需要把Hive數(shù)據(jù)同步遷移過去,提供有限的SQL支持,幾乎不支持關(guān)聯(lián)操作。
以Hadoop為核心的Hive數(shù)據(jù)倉庫的頹勢(shì)已經(jīng)是無法扭轉(zhuǎn)的了,MapReduce早已被市場(chǎng)拋棄,HDFS在各大云平臺(tái)也已經(jīng)逐步被對(duì)象存儲(chǔ)替代,Yarn被Kubernetes替代也是早晚的事。
我們把視野擴(kuò)展到Hive體系以外,就會(huì)發(fā)現(xiàn)MPP架構(gòu)的分布式數(shù)據(jù)庫正在蓬勃發(fā)展,大有取代Hive數(shù)倉的趨勢(shì)。
其中技術(shù)最成熟、生態(tài)最完善的當(dāng)屬Greenplum體系。Greenplum自2015年開源以來,經(jīng)歷了4.x、5.x、6.x三個(gè)大版本的升級(jí),功能已經(jīng)非常全面和穩(wěn)定了,也受到市場(chǎng)的廣泛推崇?;贕reenplum提供商業(yè)版本的,除了研發(fā)Greenplum的母公司Pivotal,還有中國(guó)本地團(tuán)隊(duì)的創(chuàng)業(yè)公司四維縱橫。此外,還有阿里云提供的云數(shù)據(jù)庫AnalyticDB for PostgreSQL、百度云FusionDB和京東云提供的JDW,都是基于Greenplum進(jìn)行云化的產(chǎn)品。華為的GaussDB在設(shè)計(jì)中也參考了Greenplum數(shù)據(jù)庫。
OLAP查詢性能最強(qiáng)悍的當(dāng)屬SAP商業(yè)數(shù)據(jù)庫HANA,這是數(shù)據(jù)庫領(lǐng)域當(dāng)之無愧的王者。HANA是一個(gè)軟硬件結(jié)合體,提供高性能的數(shù)據(jù)查詢功能,用戶可以直接對(duì)大量實(shí)時(shí)業(yè)務(wù)數(shù)據(jù)進(jìn)行查詢和分析。
HANA唯一的缺點(diǎn)就是太貴,軟件和硬件成本高昂。HANA是一個(gè)基于列式存儲(chǔ)的內(nèi)存數(shù)據(jù)庫,主要具有以下優(yōu)勢(shì)。
- 把數(shù)據(jù)保存在內(nèi)存中,通過對(duì)比我們發(fā)現(xiàn),內(nèi)存的訪問速度比磁盤快1000000倍,比SSD和閃存快1000倍。傳統(tǒng)磁盤讀取時(shí)間是5ms,內(nèi)存讀取時(shí)間是5ns。
- 服務(wù)器采用多核架構(gòu)(每個(gè)刀片8×8核心CPU),多刀片大規(guī)模并行擴(kuò)展,刀片服務(wù)器價(jià)格低廉,采用64位地址空間—單臺(tái)服務(wù)器容量為2TB,100GB/s的數(shù)據(jù)吞吐量,價(jià)格迅速下降,性能迅速提升。
- 數(shù)據(jù)存儲(chǔ)可以選擇行存儲(chǔ)或者列存儲(chǔ),同時(shí)對(duì)數(shù)據(jù)進(jìn)行壓縮。SAP HANA采用數(shù)據(jù)字典的方法對(duì)數(shù)據(jù)進(jìn)行壓縮,用整數(shù)代表相應(yīng)的文本,數(shù)據(jù)庫可以進(jìn)一步壓縮數(shù)據(jù)和減少數(shù)據(jù)傳輸。
百度開源的Doris也在迎頭趕上,并且在百度云中提供云原生部署。Apache Doris是一款架構(gòu)領(lǐng)先的MPP分析型數(shù)據(jù)庫產(chǎn)品,僅須亞秒級(jí)響應(yīng)時(shí)間即可獲得查詢結(jié)果,高效支持實(shí)時(shí)數(shù)據(jù)和批處理數(shù)據(jù)。Apache Doris的分布式架構(gòu)非常簡(jiǎn)潔,易于運(yùn)維,并且支持10PB以上的超大數(shù)據(jù)集,可以滿足多種數(shù)據(jù)分析需求,例如固定歷史報(bào)表,實(shí)時(shí)數(shù)據(jù)分析,交互式數(shù)據(jù)分析和探索式數(shù)據(jù)分析等。Apache Doris支持AGGREGATE、UNIQUE、DUPLICATE三種表模型,同時(shí)支持ROLLUP和MATERIALIZED VIEW兩種向上聚合方式,可以更好地支撐OLAP查詢請(qǐng)求。另外,Doris也支持快速插入和刪除數(shù)據(jù),是未來實(shí)時(shí)數(shù)倉或者數(shù)據(jù)湖產(chǎn)品的有力競(jìng)爭(zhēng)者。
嘗試在OLTP的基礎(chǔ)上融合OLAP的數(shù)據(jù)庫TiDB、騰訊TBase(云平臺(tái)上已改名為TDSQL PostgreSQL版)、阿里的OceanBase都在架構(gòu)上做了大膽的突破。TiDB采用行存儲(chǔ)、列存儲(chǔ)兩種數(shù)據(jù)格式各保存一份數(shù)據(jù)的方式,分別支持快速OLTP交易和OLAP查詢。TBase則是分別針對(duì)OLAP業(yè)務(wù)和OLTP業(yè)務(wù)設(shè)置不同的計(jì)算引擎和數(shù)據(jù)服務(wù)接口,滿足HTAP場(chǎng)景應(yīng)用需求。OceanBase數(shù)據(jù)庫使用基于LSM-Tree的存儲(chǔ)引擎,能夠有效地對(duì)數(shù)據(jù)進(jìn)行壓縮,并且不影響性能,可以降低用戶的存儲(chǔ)成本。
02ETL工具選型
目前,業(yè)界比較領(lǐng)先的開源ETL數(shù)據(jù)抽取工具主要有Kettle、DataX和Waterdrop。商業(yè)版本的DataStage、Informatica和Data Services三款軟件不僅配置復(fù)雜、開發(fā)效率低,執(zhí)行大數(shù)據(jù)加載也非常慢。
Kettle(正式名為Pentaho Data Integration)是一款基于Java開發(fā)的開源ETL工具,具有圖形化界面,可以以工作流的形式流轉(zhuǎn),有效減少研發(fā)工作量,提高工作效率。Kettle支持不同來源的數(shù)據(jù),包括不同數(shù)據(jù)庫、Excel/CSV等文件、郵件、網(wǎng)站爬蟲等。除了數(shù)據(jù)的抽取與轉(zhuǎn)換,還支持文件操作、收發(fā)郵件等,通過圖形化界面來創(chuàng)建、設(shè)計(jì)轉(zhuǎn)換和工作流任務(wù)。
DataX是阿里巴巴集團(tuán)內(nèi)部廣泛使用的離線數(shù)據(jù)同步工具/平臺(tái),實(shí)現(xiàn)包括MySQL、Oracle、SQL Server、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute (ODPS)、DRDS等各種異構(gòu)數(shù)據(jù)源之間高效的數(shù)據(jù)同步功能。
Waterdrop是一款易用、高性能、支持實(shí)時(shí)流式和離線批處理的海量數(shù)據(jù)處理工具,程序運(yùn)行在Apache Spark和Apache Flink之上。Waterdrop簡(jiǎn)單易用、靈活配置、無需開發(fā),可運(yùn)行在單機(jī)、Spark Standalone集群、Yarn集群、Mesos集群之上。Waterdrop支持實(shí)時(shí)流式處理,擁有高性能、海量數(shù)據(jù)處理能力,支持模塊化和插件化,易于擴(kuò)展。用戶可根據(jù)需要來擴(kuò)展插件,支持Java/Scala實(shí)現(xiàn)的Input、Filter、Output插件。
總的來說,Kettle適合中小企業(yè)ETL任務(wù)比較少并且單表數(shù)據(jù)量在百萬以下的項(xiàng)目,開發(fā)速度快,支持的數(shù)據(jù)來源豐富,方便快速達(dá)成項(xiàng)目目標(biāo)。DataX支持需要批處理抽取數(shù)據(jù)的項(xiàng)目,支持千萬級(jí)、億級(jí)數(shù)據(jù)的快速同步,性能高效、運(yùn)維穩(wěn)定。Waterdrop是后起之秀,在DataX的基礎(chǔ)上還支持流式數(shù)據(jù)處理,是DataX的有力競(jìng)爭(zhēng)者和潛在替代產(chǎn)品。
03調(diào)度平臺(tái)選型
調(diào)度平臺(tái)可以串聯(lián)ETL任務(wù)并按照指定的依賴和順序自動(dòng)執(zhí)行。調(diào)度平臺(tái)一般用Java語言開發(fā),平臺(tái)實(shí)現(xiàn)難度小,大多數(shù)數(shù)據(jù)倉庫實(shí)時(shí)廠商都有自研的調(diào)度平臺(tái)。
在早期銀行業(yè)的數(shù)據(jù)倉庫項(xiàng)目中,大多數(shù)據(jù)ETL過程都是通過DataStage、Informatica或者存儲(chǔ)過程實(shí)現(xiàn)的。筆者接觸過最好用的產(chǎn)品就是先進(jìn)數(shù)通公司的Moia Control。Moia Control定位于企業(yè)統(tǒng)一調(diào)度管理平臺(tái),致力于為企業(yè)的批處理作業(yè)制定統(tǒng)一的開發(fā)規(guī)范、運(yùn)維方法,對(duì)各系統(tǒng)的批量作業(yè)進(jìn)行統(tǒng)一管理、調(diào)度和監(jiān)控。Moia Control的系統(tǒng)架構(gòu)如
圖1所示,系統(tǒng)分為管理節(jié)點(diǎn)和Agent節(jié)點(diǎn),管理節(jié)點(diǎn)負(fù)責(zé)調(diào)度任務(wù)的配置和分發(fā)作業(yè),Agent節(jié)點(diǎn)負(fù)責(zé)任務(wù)的執(zhí)行和監(jiān)控。Moia Control在金融領(lǐng)域具有非常廣泛的應(yīng)用。
圖1 Moia Control系統(tǒng)架構(gòu)
在開源領(lǐng)域,伴隨著大數(shù)據(jù)平臺(tái)的崛起,雖然先后涌現(xiàn)了Oozie、Azkaban、AirFlow等深度融合Hadoop生態(tài)的產(chǎn)品,但都是曇花一現(xiàn),目前已經(jīng)逐步被DolphinScheduler取代。DolphinScheduler于2019年8月29日由易觀科技捐贈(zèng)給Apache啟動(dòng)孵化。DolphinScheduler的產(chǎn)品架構(gòu)如圖2所示。
圖2 DolphinScheduler 產(chǎn)品架構(gòu)
DolphinScheduler是全球頂尖架構(gòu)師與社區(qū)認(rèn)可的數(shù)據(jù)調(diào)度平臺(tái),把復(fù)雜性留給自己,易用性留給用戶,具有如下特征。
1)云原生設(shè)計(jì):支持多云、多數(shù)據(jù)中心的跨端調(diào)度,同時(shí)也支持Kubernetes Docker的部署與擴(kuò)展,性能上可以線性增長(zhǎng),在用戶測(cè)試情況下最高可支持10萬級(jí)的并行任務(wù)控制。
2)高可用:去中心化的多主從節(jié)點(diǎn)工作模式,可以自動(dòng)平衡任務(wù)負(fù)載,自動(dòng)高可用,確保任務(wù)在任何節(jié)點(diǎn)死機(jī)的情況下都可以完成整體調(diào)度。
3)用戶友好的界面:可視化DAG圖,包括子任務(wù)、條件調(diào)度、腳本管理、多租戶等功能,可以讓運(yùn)行任務(wù)實(shí)例與任務(wù)模板分開,提供給平臺(tái)維護(hù)人員和數(shù)據(jù)科學(xué)家一個(gè)方便易用的開發(fā)和管理平臺(tái)。
4)支持多種數(shù)據(jù)場(chǎng)景:支持流數(shù)據(jù)處理,批數(shù)據(jù)處理,暫停、恢復(fù)、多租戶等,對(duì)于Spark、Hive、MR、Flink、ClickHouse等平臺(tái)都可以直接調(diào)用。
此外,Kettle本身包含調(diào)度平臺(tái)的功能,我們可以直接在KJB文件中定義定時(shí)調(diào)度任務(wù),也可以通過操作系統(tǒng)定時(shí)任務(wù)來啟動(dòng)Kettle,還可以去Kettle中文網(wǎng)申請(qǐng)KettleOnline在線調(diào)度管理系統(tǒng)。
Kettle通過KJB任務(wù)里面的START組件可以設(shè)置定時(shí)調(diào)度器,操作界面如圖3所示。
圖3 Kettle定時(shí)頁面
此外,在Kettle中文網(wǎng)還提供了功能更為強(qiáng)大的KettleOnline工具,非常適合較大型Kettle項(xiàng)目使用,具體功能這里就不展開介紹了。
除了上述調(diào)度工具之外,還有一些小眾的Web調(diào)度工具,例如Taskctl、XXL-JOB等??偟膩碚f,都能滿足基本的需求。有研發(fā)實(shí)力的公司可以在開源版本的基礎(chǔ)上進(jìn)一步完善功能,打造屬于自己的調(diào)度平臺(tái)。
04BI工具選型
BI是一套完整的商業(yè)解決方案,用于將企業(yè)現(xiàn)有的數(shù)據(jù)進(jìn)行有效的整合,快速、準(zhǔn)確地提供報(bào)表并提出決策依據(jù),幫助企業(yè)做出明智的業(yè)務(wù)經(jīng)營(yíng)決策。BI工具是指可以快速完成報(bào)表創(chuàng)建的集成開發(fā)平臺(tái)。
和調(diào)度平臺(tái)不一樣,BI領(lǐng)域商業(yè)化產(chǎn)品百花齊放,而開源做成功的產(chǎn)品卻基本沒有。這也和產(chǎn)品的定位有關(guān),調(diào)度平臺(tái)重點(diǎn)關(guān)注功能實(shí)現(xiàn),整體邏輯簡(jiǎn)單通用,便于快速研發(fā)出滿足基本功能的產(chǎn)品。而BI則需要精心打磨,不斷完善和優(yōu)化,才能獲得市場(chǎng)的認(rèn)可。
在早期Oracle稱霸數(shù)據(jù)庫市場(chǎng)的年代,BI領(lǐng)域有3個(gè)巨頭,分別是IBM Cognos、Oracle BIEE和SAP BO。在早期BI領(lǐng)域,IBM 50億美元收購(gòu)Cognos、SAP 68億美元收購(gòu)BO都曾創(chuàng)造了軟件行業(yè)的收購(gòu)紀(jì)錄。這兩起收購(gòu)發(fā)生分別發(fā)生在2007年和2008年。此后是傳統(tǒng)BI的黃金十年,這三大軟件占領(lǐng)了國(guó)內(nèi)BI市場(chǎng)超過80%的份額。筆者參加工作的第一個(gè)崗位就是BIEE開發(fā)工程師,而后又兼職做過兩年的Cognos報(bào)表開發(fā),對(duì)二者都有比較深刻的認(rèn)識(shí)。
在傳統(tǒng)BI時(shí)代,主要按照星形模型和雪花模型構(gòu)建BI應(yīng)用,在開發(fā)BI報(bào)表之前,必須先定義各種維度表和事實(shí)表,然后通過各BI軟件配套的客戶端工具完成數(shù)據(jù)建模,即事實(shí)表和維度表的關(guān)聯(lián),以及部分指標(biāo)邏輯的計(jì)算(例如環(huán)比、同比、年累計(jì)等)。最后在Web頁面上定制報(bào)表樣式,開發(fā)出基于不同篩選條件下,相同樣式展現(xiàn)不同數(shù)據(jù)的固定報(bào)表。整個(gè)開發(fā)過程邏輯清晰,模塊劃分明確,系統(tǒng)運(yùn)行也比較穩(wěn)定,作為整個(gè)數(shù)據(jù)分析項(xiàng)目的“臉面”,贏得了較高的客戶滿意度。
傳統(tǒng)BI以固定表格展現(xiàn)為主,輔以少量的圖形。雖然模型和頁面的分離讓開發(fā)變得簡(jiǎn)單,目前廣泛應(yīng)用于金融行業(yè)和大型國(guó)企管理系統(tǒng)中,但是也有不少缺點(diǎn),例如,星形模型的結(jié)構(gòu)在大數(shù)據(jù)場(chǎng)景下查詢速度非常慢、模型與頁面的分離造成版本難以管控、模型中內(nèi)嵌函數(shù)導(dǎo)致查找數(shù)據(jù)問題變得困難等。
2017年前后,Tableau強(qiáng)勢(shì)崛起,以“敏捷BI”的概念攪動(dòng)了整個(gè)BI市場(chǎng),引領(lǐng)BI進(jìn)入一個(gè)全新的時(shí)代。
Tableau最大的特點(diǎn)是以可視化為核心,強(qiáng)調(diào)BI應(yīng)用構(gòu)建的敏捷性。Tableau拋棄了傳統(tǒng)BI的模型層,可以直接基于數(shù)據(jù)庫的表或者查詢來構(gòu)建報(bào)表模塊,大大降低了開發(fā)難度,提升了報(bào)表的開發(fā)效率和查詢性能。曾經(jīng)需要一天才能完成的報(bào)表開發(fā),現(xiàn)在可能一個(gè)小時(shí)不到就可以完成,極大提升了產(chǎn)出效率。
在傳統(tǒng)BI時(shí)代,國(guó)產(chǎn)BI軟件雖然也在發(fā)展,但是不夠強(qiáng)大。在敏捷BI時(shí)代,F(xiàn)ineBI、永洪BI、SmartBI、觀遠(yuǎn)BI等商業(yè)化產(chǎn)品順勢(shì)崛起,開始搶占國(guó)內(nèi)BI市場(chǎng)。帆軟公司的Fine Report和FineBI更是其中的佼佼者,穩(wěn)坐國(guó)產(chǎn)BI軟件的頭把交椅,將產(chǎn)品鋪向了廣大中小企業(yè)。國(guó)產(chǎn)BI在培訓(xùn)體系上做得更為完善,以至于筆者發(fā)現(xiàn)在最近半年的面試中,差不多有一半的應(yīng)聘者使用過帆軟公司的產(chǎn)品。
在國(guó)產(chǎn)化BI之外,跨國(guó)軟件公司也在敏捷BI方向上做出了調(diào)整,其中筆者接觸過的就有微軟的Power BI和微策略的新一代MSTR Desktop。同時(shí),云廠商也加入BI市場(chǎng)的爭(zhēng)奪,其中百度云Sugar、阿里云QuickBI都是內(nèi)部產(chǎn)品對(duì)外提供服務(wù)的案例。
總的來說,在敏捷BI領(lǐng)域,國(guó)外廠商的軟件成熟度高,版本兼容性好。國(guó)內(nèi)廠商的軟件迭代比較快,也容易出現(xiàn)Bug。從實(shí)現(xiàn)效果上看,以上軟件的差異并不大,BI戰(zhàn)場(chǎng)已經(jīng)變成了UI的較量了,只要UI能設(shè)計(jì)出好的樣式,絕大多數(shù)BI軟件都可以實(shí)現(xiàn)近似的效果。
關(guān)于作者:王春波,資深架構(gòu)師和數(shù)據(jù)倉庫專家,現(xiàn)任上海啟高信息科技有限公司大數(shù)據(jù)架構(gòu)師,Apache Doris和openGauss貢獻(xiàn)者,Greenplum中文社區(qū)參與者。 公眾號(hào)“數(shù)據(jù)中臺(tái)研習(xí)社”運(yùn)營(yíng)者。
本文摘編于《高效使用Greenplum:入門、進(jìn)階與數(shù)據(jù)中臺(tái)》,經(jīng)出版方授權(quán)發(fā)布。(書號(hào):9787111696490)轉(zhuǎn)載請(qǐng)保留文章來源。