01
如何從0到1搭建大數(shù)據(jù)平臺(tái)
00 架構(gòu)總覽

通常大數(shù)據(jù)平臺(tái)的架構(gòu)如上,從外部采集數(shù)據(jù)到數(shù)據(jù)處理,數(shù)據(jù)顯現(xiàn),應(yīng)用等模塊。
01
數(shù)據(jù)采集

用戶訪問(wèn)我們的產(chǎn)品會(huì)產(chǎn)生大量的行為日志,因此我們需要特定的日志采集系統(tǒng)來(lái)采集并輸送這些日志。Flume是目前常用的開源選擇,F(xiàn)lume是Cloudera提供的一個(gè)高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸?shù)南到y(tǒng),F(xiàn)lume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時(shí),F(xiàn)lume提供對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單處理,并寫到各種數(shù)據(jù)接受方的能力。




02
數(shù)據(jù)存儲(chǔ)
無(wú)論上層采用何種的大規(guī)模數(shù)據(jù)計(jì)算引擎,底層的數(shù)據(jù)存儲(chǔ)系統(tǒng)基本還是以HDFS為主。HDFS(Hadoop Distributed File System)是Hadoop項(xiàng)目的核心子項(xiàng)目,是分布式計(jì)算中數(shù)據(jù)存儲(chǔ)管理的基礎(chǔ)。具備高容錯(cuò)性、高可靠、高吞吐等特點(diǎn)。

HDFS存儲(chǔ)的是一個(gè)個(gè)的文本,而我們?cè)谧龇治鼋y(tǒng)計(jì)時(shí),結(jié)構(gòu)化會(huì)方便需要。因此,在HDFS的基礎(chǔ)上,會(huì)使用Hive來(lái)將數(shù)據(jù)文件映射為結(jié)構(gòu)化的表結(jié)構(gòu),以便后續(xù)對(duì)數(shù)據(jù)進(jìn)行類SQL的查詢和管理。
03 數(shù)據(jù)處理
數(shù)據(jù)處理就是我們常說(shuō)的ETL。在這部分,我們需要三樣?xùn)|西:計(jì)算引擎、調(diào)度系統(tǒng)、元數(shù)據(jù)管理。
對(duì)于大規(guī)模的非實(shí)時(shí)數(shù)據(jù)計(jì)算來(lái)講,目前一樣采用Hive和spark引擎。Hive是基于MapReduce的架構(gòu),穩(wěn)定可靠,但是計(jì)算速度較慢;Spark則是基于內(nèi)存型的計(jì)算,一般認(rèn)為比MapReduce的速度快很多,但是其對(duì)內(nèi)存性能的要求較高,且存在內(nèi)存溢出的風(fēng)險(xiǎn)。Spark同時(shí)兼容hive數(shù)據(jù)源。從穩(wěn)定的角度考慮,一般建議以Hive作為日常ETL的主要計(jì)算引擎,特別是對(duì)于一些實(shí)時(shí)要求不高的數(shù)據(jù)。Spark等其他引擎根據(jù)場(chǎng)景搭配使用。
實(shí)時(shí)計(jì)算引擎方面,目前大體經(jīng)過(guò)了三代,依次是:storm、spark streaming、Flink。Flink已被阿里收購(gòu),大廠一直在推,社區(qū)活躍度很好,國(guó)內(nèi)也有很多資源。
調(diào)度系統(tǒng)上,建議采用輕量級(jí)的Azkaban,Azkaban是由Linkedin開源的一個(gè)批量工作流任務(wù)調(diào)度器。https://azkaban.github.io/
一般需要自己開發(fā)一套元數(shù)據(jù)管理系統(tǒng),用來(lái)規(guī)劃數(shù)據(jù)倉(cāng)庫(kù)和ETL流程中的元數(shù)據(jù)。元數(shù)據(jù)分為業(yè)務(wù)元數(shù)據(jù)和技術(shù)元數(shù)據(jù)。
業(yè)務(wù)元數(shù)據(jù),主要用于支撐數(shù)據(jù)服務(wù)平臺(tái)Web UI上面的各種業(yè)務(wù)條件選項(xiàng),比如,常用的有如下一些:移動(dòng)設(shè)備機(jī)型、品牌、運(yùn)營(yíng)商、網(wǎng)絡(luò)、價(jià)格范圍、設(shè)備物理特性、應(yīng)用名稱等。這些元數(shù)據(jù),有些來(lái)自于基礎(chǔ)數(shù)據(jù)部門提供的標(biāo)準(zhǔn)庫(kù),比如品牌、價(jià)格范圍等,可以從對(duì)應(yīng)的數(shù)據(jù)表中同步或直接讀取;而有些具有時(shí)間含義的元數(shù)據(jù),需要每天通過(guò)ETL處理生成,比如應(yīng)用信息。為支撐應(yīng)用計(jì)算使用,被存儲(chǔ)在MySQL數(shù)據(jù)庫(kù)中;而對(duì)于填充頁(yè)面上對(duì)應(yīng)的條件選擇的數(shù)據(jù),則使用Redis存儲(chǔ),每天/月會(huì)根據(jù)MySQL中的數(shù)據(jù)進(jìn)行加工處理,生成易于快速查詢的鍵值對(duì)類數(shù)據(jù),存儲(chǔ)到Redis中。
技術(shù)元數(shù)據(jù),主要包括數(shù)據(jù)倉(cāng)庫(kù)中的模型說(shuō)明、血緣關(guān)系、變更記錄、需求來(lái)源、模型字段信息等,詳細(xì)的可以查看數(shù)據(jù)分析師應(yīng)該了解的數(shù)據(jù)倉(cāng)庫(kù)(3)

04 數(shù)據(jù)流轉(zhuǎn)

通過(guò)上面一張圖了解數(shù)據(jù)采集,數(shù)據(jù)處理,到數(shù)據(jù)展現(xiàn)的數(shù)據(jù)流轉(zhuǎn)。通常我們?cè)趯?shí)際工作中,從數(shù)據(jù)源到分析報(bào)告或系統(tǒng)應(yīng)用的過(guò)程中,主要包括數(shù)據(jù)采集同步、數(shù)據(jù)倉(cāng)庫(kù)存儲(chǔ)、ETL、統(tǒng)計(jì)分析、寫入上層應(yīng)用數(shù)據(jù)庫(kù)進(jìn)行指標(biāo)展示。這是最基礎(chǔ)的一條線,現(xiàn)在還有基于數(shù)據(jù)倉(cāng)庫(kù)進(jìn)行的數(shù)據(jù)分析挖掘工作,會(huì)基于機(jī)器學(xué)習(xí)和深度學(xué)習(xí)對(duì)已有模型數(shù)據(jù)進(jìn)一步挖掘分析,形成更深層的數(shù)據(jù)應(yīng)用產(chǎn)品。
05 數(shù)據(jù)應(yīng)用

俗話說(shuō)的好,“酒香也怕巷子深”。數(shù)據(jù)應(yīng)用前面我們做了那么多工作為了什么,對(duì)于企業(yè)來(lái)說(shuō),我們做的每一件事情都需要體現(xiàn)出價(jià)值,而此時(shí)的數(shù)據(jù)應(yīng)用就是大數(shù)據(jù)的價(jià)值體現(xiàn)。數(shù)據(jù)應(yīng)用包括輔助經(jīng)營(yíng)分析的一些報(bào)表指標(biāo),商城上基于用戶畫像的個(gè)性化推送,還有各種數(shù)據(jù)分析報(bào)告等等。
02
數(shù)據(jù)采集系統(tǒng)
01 “大”數(shù)據(jù)

當(dāng)你需要搭建大數(shù)據(jù)平臺(tái)的時(shí)候一定是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)無(wú)法滿足業(yè)務(wù)的存儲(chǔ)計(jì)算要求了,所以首先我們面臨的是海量的數(shù)據(jù)。
復(fù)雜數(shù)據(jù)的概念和理想數(shù)據(jù)完全相反。所有數(shù)據(jù)集都有一定的復(fù)雜性,但有一些天生更難處理。通常這些復(fù)雜數(shù)據(jù)集沒(méi)有定義結(jié)構(gòu)(沒(méi)有行列結(jié)構(gòu)),經(jīng)常變化,數(shù)據(jù)質(zhì)量很差。比如更新的網(wǎng)頁(yè)日志,json數(shù)據(jù),xml數(shù)據(jù)等。
高速數(shù)據(jù)通常被認(rèn)為是實(shí)時(shí)的或是準(zhǔn)實(shí)時(shí)的數(shù)據(jù)流。數(shù)據(jù)流本質(zhì)上是在生成后就發(fā)給處理器的數(shù)據(jù)包,比如物聯(lián)網(wǎng)的穿戴設(shè)備,制造業(yè)的傳感器,車聯(lián)網(wǎng)的終端芯片等等。處理實(shí)時(shí)數(shù)據(jù)流有很多挑戰(zhàn),包括在采集時(shí)不丟失數(shù)據(jù)、處理數(shù)據(jù)流中的重復(fù)記錄、數(shù)據(jù)如何實(shí)時(shí)寫入磁盤存儲(chǔ)、以及如何進(jìn)行實(shí)時(shí)分析。
02 采集工具
我們業(yè)務(wù)平臺(tái)每天都會(huì)有大量用戶訪問(wèn),會(huì)產(chǎn)生大量的訪問(wèn)日志數(shù)據(jù),比如電商系統(tǒng)的瀏覽,加入購(gòu)物車,下訂單,付款等一系列流程我們都可以通過(guò)埋點(diǎn)獲取到用戶的訪問(wèn)路徑以及訪問(wèn)時(shí)長(zhǎng)這些數(shù)據(jù);再比智能穿戴設(shè)備,實(shí)時(shí)都會(huì)采集我們的血壓、脈搏、心率等數(shù)據(jù)實(shí)時(shí)上報(bào)到云端。通過(guò)分析這些日志信息,我們可以得到出很多業(yè)務(wù)價(jià)值。通過(guò)對(duì)這些日志信息進(jìn)行日志采集、收集,然后進(jìn)行數(shù)據(jù)分析,挖掘公司業(yè)務(wù)平臺(tái)日志數(shù)據(jù)中的潛在價(jià)值。為公司決策和公司后臺(tái)服務(wù)器平臺(tái)性能評(píng)估提高可靠的數(shù)據(jù)保證。系統(tǒng)日志采集系統(tǒng)做的事情就是收集日志數(shù)據(jù)提供離線和在線的實(shí)時(shí)分析使用。目前常用的開源日志收集系統(tǒng)有Flume、Logstash、Filebeat。可以根據(jù)自己公司的技術(shù)棧儲(chǔ)備或者組件的優(yōu)缺點(diǎn)選擇合適的日志采集系統(tǒng),目前了解到的Flume使用的比較多。各個(gè)采集工具的對(duì)比如下:

具體組件的相關(guān)配置可以參考之前的文章《日志收集組件—Flume、Logstash、Filebeat對(duì)比》

企業(yè)一般都會(huì)會(huì)使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)MySQL或Oracle等來(lái)存儲(chǔ)業(yè)務(wù)系統(tǒng)數(shù)據(jù)。每時(shí)每刻產(chǎn)生的業(yè)務(wù)數(shù)據(jù),以數(shù)據(jù)庫(kù)一行記錄的形式被直接寫入到數(shù)據(jù)庫(kù)中保存。
大數(shù)據(jù)分析一般是基于歷史海量數(shù)據(jù),多維度分析,我們不能直接在原始的業(yè)務(wù)數(shù)據(jù)庫(kù)上直接操作,因?yàn)榉治龅囊恍?fù)雜SQL查詢會(huì)明顯的影響業(yè)務(wù)數(shù)據(jù)庫(kù)的效率,導(dǎo)致業(yè)務(wù)系統(tǒng)不可用。所以我們通常通過(guò)數(shù)據(jù)庫(kù)采集系統(tǒng)直接與企業(yè)業(yè)務(wù)后臺(tái)數(shù)據(jù)庫(kù)服務(wù)器結(jié)合,在業(yè)務(wù)不那么繁忙的凌晨,抽取我們想要的數(shù)據(jù)到分析數(shù)據(jù)庫(kù)或者到HDFS上,最后有大數(shù)據(jù)處理系統(tǒng)對(duì)這些數(shù)據(jù)進(jìn)行清洗、組合進(jìn)行數(shù)據(jù)分析。
常用數(shù)據(jù)庫(kù)抽取工具:
阿里開源軟件:DataX
DataX 是一個(gè)異構(gòu)數(shù)據(jù)源離線同步工具,致力于實(shí)現(xiàn)包括關(guān)系型數(shù)據(jù)庫(kù)(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各種異構(gòu)數(shù)據(jù)源之間穩(wěn)定高效的數(shù)據(jù)同步功能。開源的DataX貌似只能單機(jī)部署。
Apache開源軟件:Sqoop
Sqoop(發(fā)音:skup)是一款開源的工具,主要用于在HADOOP(Hive)與傳統(tǒng)的數(shù)據(jù)庫(kù)(mysql、postgresql...)間進(jìn)行數(shù)據(jù)的傳遞,可以將一個(gè)關(guān)系型數(shù)據(jù)庫(kù)(例如 : MySQL ,Oracle ,Postgres等)中的數(shù)據(jù)導(dǎo)進(jìn)到Hadoop的HDFS中,也可以將HDFS的數(shù)據(jù)導(dǎo)進(jìn)到關(guān)系型數(shù)據(jù)庫(kù)中。可以集群化部署。
有很多外部數(shù)據(jù),比如天氣、IP地址等數(shù)據(jù),我們通常會(huì)爬取相應(yīng)的網(wǎng)站數(shù)據(jù)存儲(chǔ)。目前常用的爬蟲工具是Scrapy,它是一個(gè)爬蟲框架,提供給開發(fā)人員便利的爬蟲API接口。開發(fā)人員只需要關(guān)心爬蟲API接口的實(shí)現(xiàn),不需要關(guān)心具體框架怎么爬取數(shù)據(jù)。Scrapy框架大大降低了開發(fā)人員開發(fā)速率,開發(fā)人員可以很快的完成一個(gè)爬蟲系統(tǒng)的開發(fā)。
03 數(shù)據(jù)存儲(chǔ)

2003年,Google發(fā)布論文GFS,啟發(fā)Apache Nutch開發(fā)了HDFS。2004年,Google 又發(fā)布了論文《MapReduce: Simplified Data Processing on Large Clusters》,Doug Cutting等人實(shí)現(xiàn)計(jì)算框架MapReduce ,并與HDFS結(jié)合來(lái)更好的支持該框架。2006年項(xiàng)目從Butch搜索引擎中獨(dú)立出來(lái),成為了現(xiàn)在的Hadoop。
GFS隱藏了底層的負(fù)載均衡,切片備份等細(xì)節(jié),使復(fù)雜性透明化,并提供統(tǒng)一的文件系統(tǒng)接口。其成本低,容錯(cuò)高,高吞吐,適合超大數(shù)據(jù)集應(yīng)用場(chǎng)景。
HDFS原理:橫向擴(kuò)展,增加“數(shù)據(jù)節(jié)點(diǎn)”就能增加容量。
增加協(xié)調(diào)部門,“命名節(jié)點(diǎn)”維護(hù)元數(shù)據(jù),負(fù)責(zé)文件系統(tǒng)的命名空間,控
外部訪問(wèn),將數(shù)據(jù)塊映射到數(shù)據(jù)節(jié)點(diǎn)。還會(huì)備份元數(shù)據(jù)從命名節(jié)點(diǎn),它只與命名節(jié)點(diǎn)通信。
數(shù)據(jù)在多個(gè)數(shù)據(jù)節(jié)點(diǎn)備份。
通常關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)的都是結(jié)構(gòu)化的數(shù)據(jù),我們抽取后會(huì)直接放到HDFS上作為離線分析的數(shù)據(jù)源。
在實(shí)際應(yīng)用中,我們有很多數(shù)據(jù)可能不需要復(fù)雜的分析,只需要我們能存儲(chǔ),并且提供快速查詢的功能。HBase在HDFS基礎(chǔ)上提供了Bigtable的能力; 并且基于列的模式進(jìn)行存儲(chǔ)。列存儲(chǔ)設(shè)計(jì)的優(yōu)勢(shì)是減少不必要的字段占用存儲(chǔ),同時(shí)查詢的時(shí)候也可以只對(duì)查詢的指定列有IO操作。HBase可以存儲(chǔ)海量的數(shù)據(jù),并且可以根據(jù)rowkey提供快速的查詢性能,是非常好的明細(xì)數(shù)據(jù)存儲(chǔ)方案,比如電商的訂單數(shù)據(jù)就可以放入HBase提供高效的查詢。
當(dāng)然還有其他的存儲(chǔ)引擎,比如ES適合文本搜索查詢等。
04 總結(jié)
了解了上面的技術(shù)棧后,在實(shí)際數(shù)據(jù)接入中,你還會(huì)面臨各種問(wèn)題,比如如何考慮確保數(shù)據(jù)一致性,保障數(shù)據(jù)不能丟失,數(shù)據(jù)采集存儲(chǔ)的效率,不能產(chǎn)生數(shù)據(jù)積壓等,這些都需要對(duì)每個(gè)組件進(jìn)行研究,適配適合你自己業(yè)務(wù)系統(tǒng)的參數(shù),用最少的資源,達(dá)到最好的結(jié)果。
03
調(diào)度系統(tǒng)
目前大數(shù)據(jù)平臺(tái)經(jīng)常會(huì)用來(lái)跑一些批任務(wù),跑批處理當(dāng)然就離不開定時(shí)任務(wù)。比如定時(shí)抽取業(yè)務(wù)數(shù)據(jù)庫(kù)的數(shù)據(jù),定時(shí)跑hive/spark任務(wù),定時(shí)推送日?qǐng)?bào)、月報(bào)指標(biāo)數(shù)據(jù)。任務(wù)調(diào)度系統(tǒng)已經(jīng)儼然成為了大數(shù)據(jù)處理平臺(tái)不可或缺的一部分,可以說(shuō)是ETL任務(wù)的靈魂。
01 原始任務(wù)調(diào)度

記得第一次參與大數(shù)據(jù)平臺(tái)從無(wú)到有的搭建,最開始任務(wù)調(diào)度就是用的Crontab,分時(shí)日月周,各種任務(wù)腳本配置在一臺(tái)主機(jī)上。Crontab 使用非常方便,配置也很簡(jiǎn)單。剛開始任務(wù)很少,用著還可以,每天起床巡檢一下日志。隨著任務(wù)越來(lái)越多,出現(xiàn)了任務(wù)不能在原來(lái)計(jì)劃的時(shí)間完成,出現(xiàn)了上級(jí)任務(wù)跑完前,后面依賴的任務(wù)已經(jīng)起來(lái)了,這時(shí)候沒(méi)有數(shù)據(jù),任務(wù)就會(huì)報(bào)錯(cuò),或者兩個(gè)任務(wù)并行跑了,出現(xiàn)了錯(cuò)誤的結(jié)果。排查任務(wù)錯(cuò)誤原因越來(lái)麻煩,各種任務(wù)的依賴關(guān)系越來(lái)越復(fù)雜,最后排查任務(wù)問(wèn)題就行從一團(tuán)亂麻中,一根一根梳理出每天麻繩。crontab雖然簡(jiǎn)單,穩(wěn)定,但是隨著任務(wù)的增加和依賴關(guān)系越來(lái)越復(fù)雜,已經(jīng)完全不能滿足我們的需求了,這時(shí)候就需要建設(shè)自己的調(diào)度系統(tǒng)了。
02 調(diào)度系統(tǒng)
調(diào)度系統(tǒng),關(guān)注的首要重點(diǎn)是在正確的時(shí)間點(diǎn)啟動(dòng)正確的作業(yè),確保作業(yè)按照正確的依賴關(guān)系及時(shí)準(zhǔn)確的執(zhí)行。資源的利用率通常不是第一關(guān)注要點(diǎn),業(yè)務(wù)流程的正確性才是最重要的。(但是到隨著業(yè)務(wù)的發(fā)展,ETL任務(wù)越來(lái)越多,你會(huì)發(fā)現(xiàn)經(jīng)常有任務(wù)因?yàn)橘Y源問(wèn)題沒(méi)有按時(shí)啟動(dòng)!)
實(shí)際調(diào)度中,多個(gè)任務(wù)單元之間往往有著強(qiáng)依賴關(guān)系,上游任務(wù)執(zhí)行并成功,下游任務(wù)才可以執(zhí)行。比如上游任務(wù)1結(jié)束后拿到結(jié)果,下游任務(wù)2、任務(wù)3需結(jié)合任務(wù)1的結(jié)果才能執(zhí)行,因此下游任務(wù)的開始一定是在上游任務(wù)成功運(yùn)行拿到結(jié)果之后才可以開始。而為了保證數(shù)據(jù)處理結(jié)果的準(zhǔn)確性,就必須要求這些任務(wù)按照上下游依賴關(guān)系有序、高效的執(zhí)行,最終確保能按時(shí)正常生成業(yè)務(wù)指標(biāo)。

一款成熟易用,便于管理和維護(hù)的作業(yè)調(diào)度系統(tǒng),需要和大量的周邊組件對(duì)接,要處理或使用到包括:血緣管理,權(quán)限控制,負(fù)載流控,監(jiān)控報(bào)警,質(zhì)量分析等各種服務(wù)或事務(wù)。
03 調(diào)度系統(tǒng)分類
調(diào)度系統(tǒng)一般分為兩類:定時(shí)分片類作業(yè)調(diào)度系統(tǒng)和DAG工作流類作業(yè)調(diào)度系統(tǒng)
定時(shí)分片類作業(yè)調(diào)度系統(tǒng)
這種功能定位的作業(yè)調(diào)度系統(tǒng),其最早的需要來(lái)源和出發(fā)點(diǎn)往往是做一個(gè)分布式的Crontab。
核心:
將一個(gè)大的任務(wù)拆成多個(gè)小任務(wù)分配到不同的服務(wù)器上執(zhí)行, 難點(diǎn)在于要做到不漏,不重,保證負(fù)載平衡,節(jié)點(diǎn)崩潰時(shí)自動(dòng)進(jìn)行任務(wù)遷移等。
保證任務(wù)觸發(fā)的強(qiáng)實(shí)時(shí)和可靠性
所以,負(fù)載均衡,彈性擴(kuò)容,狀態(tài)同步和失效轉(zhuǎn)移通常是這類調(diào)度系統(tǒng)在架構(gòu)設(shè)計(jì)時(shí)重點(diǎn)考慮的特性。
DGA工作流調(diào)度系統(tǒng)
這一類系統(tǒng)的方向,重點(diǎn)定位于任務(wù)的調(diào)度依賴關(guān)系的正確處理,分片執(zhí)行的邏輯通常不是系統(tǒng)關(guān)注的核心,或者不是系統(tǒng)核心流程的關(guān)鍵組成部分。
核心:
足夠豐富和靈活的依賴觸發(fā)機(jī)制:比如時(shí)間觸發(fā)任務(wù),依賴觸發(fā)任務(wù),混合觸發(fā)任務(wù)
作業(yè)的計(jì)劃,變更和執(zhí)行流水的管理和同步
任務(wù)的優(yōu)先級(jí)管理,業(yè)務(wù)隔離,權(quán)限管理等
各種特殊流程的處理,比如暫停任務(wù),重刷歷史數(shù)據(jù),人工標(biāo)注失敗/成功,臨時(shí)任務(wù)和周期任務(wù)的協(xié)同等
完備的監(jiān)控報(bào)警通知機(jī)制
04 幾個(gè)調(diào)度系統(tǒng)
Airflow
Apache Airflow是一種功能強(qiáng)大的工具,可作為任務(wù)的有向無(wú)環(huán)圖(DAG)編排、任務(wù)調(diào)度和任務(wù)監(jiān)控的工作流工具。Airflow在DAG中管理作業(yè)之間的執(zhí)行依賴,并可以處理作業(yè)失敗,重試和警報(bào)。開發(fā)人員可以編寫Python代碼以將數(shù)據(jù)轉(zhuǎn)換為工作流中的操作。

主要有如下幾種組件構(gòu)成:
web server: 主要包括工作流配置,監(jiān)控,管理等操作
scheduler: 工作流調(diào)度進(jìn)程,觸發(fā)工作流執(zhí)行,狀態(tài)更新等操作
消息隊(duì)列:存放任務(wù)執(zhí)行命令和任務(wù)執(zhí)行狀態(tài)報(bào)告
worker: 執(zhí)行任務(wù)和匯報(bào)狀態(tài)
mysql: 存放工作流,任務(wù)元數(shù)據(jù)信息
具體執(zhí)行流程:
scheduler掃描dag文件存入數(shù)據(jù)庫(kù),判斷是否觸發(fā)執(zhí)行
到達(dá)觸發(fā)執(zhí)行時(shí)間的dag,生成dag_run,task_instance 存入數(shù)據(jù)庫(kù)
發(fā)送執(zhí)行任務(wù)命令到消息隊(duì)列
worker從隊(duì)列獲取任務(wù)執(zhí)行命令執(zhí)行任務(wù)
worker匯報(bào)任務(wù)執(zhí)行狀態(tài)到消息隊(duì)列
schduler獲取任務(wù)執(zhí)行狀態(tài),并做下一步操作
schduler根據(jù)狀態(tài)更新數(shù)據(jù)庫(kù)
Kettle
將各個(gè)任務(wù)操作組件拖放到工作區(qū),kettle支持各種常見的數(shù)據(jù)轉(zhuǎn)換。此外,用戶可以將Python,Java,JavaScript和SQL中的自定義腳本拖放到畫布上。kettle可以接受許多文件類型作為輸入,還可以通過(guò)JDBC,ODBC連接到40多個(gè)數(shù)據(jù)庫(kù),作為源或目標(biāo)。社區(qū)版本是免費(fèi)的,但提供的功能比付費(fèi)版本少。


XXL-JOB
XXL-JOB是一個(gè)分布式任務(wù)調(diào)度平臺(tái),其核心設(shè)計(jì)目標(biāo)是開發(fā)迅速、學(xué)習(xí)簡(jiǎn)單、輕量級(jí)、易擴(kuò)展。將調(diào)度行為抽象形成“調(diào)度中心”公共平臺(tái),而平臺(tái)自身并不承擔(dān)業(yè)務(wù)邏輯,“調(diào)度中心”負(fù)責(zé)發(fā)起調(diào)度請(qǐng)求;將任務(wù)抽象成分散的JobHandler,交由“執(zhí)行器”統(tǒng)一管理,“執(zhí)行器”負(fù)責(zé)接收調(diào)度請(qǐng)求并執(zhí)行對(duì)應(yīng)的JobHandler中業(yè)務(wù)邏輯;因此,“調(diào)度”和“任務(wù)”兩部分可以相互解耦,提高系統(tǒng)整體穩(wěn)定性和擴(kuò)展性。(后來(lái)才知道XXL是作者名字拼音首字母縮寫)

調(diào)度系統(tǒng)開源工具有很多,可以結(jié)合自己公司人員的熟悉程度和需求選擇合適的進(jìn)行改進(jìn)。
海豚調(diào)度
Apache DolphinScheduler是一個(gè)分布式去中心化,易擴(kuò)展的可視化DAG工作流任務(wù)調(diào)度平臺(tái)。致力于解決數(shù)據(jù)處理流程中錯(cuò)綜復(fù)雜的依賴關(guān)系,使調(diào)度系統(tǒng)在數(shù)據(jù)處理流程中開箱即用。

高可靠性
去中心化的多Master和多Worker服務(wù)對(duì)等架構(gòu), 避免單Master壓力過(guò)大,另外采用任務(wù)緩沖隊(duì)列來(lái)避免過(guò)載
簡(jiǎn)單易用
DAG監(jiān)控界面,所有流程定義都是可視化,通過(guò)拖拽任務(wù)完成定制DAG,通過(guò)API方式與第三方系統(tǒng)集成, 一鍵部署
豐富的使用場(chǎng)景
支持多租戶,支持暫停恢復(fù)操作. 緊密貼合大數(shù)據(jù)生態(tài),提供Spark, Hive, M/R, Python, Sub_process, Shell等近20種任務(wù)類型
高擴(kuò)展性
支持自定義任務(wù)類型,調(diào)度器使用分布式調(diào)度,調(diào)度能力隨集群線性增長(zhǎng),Master和Worker支持動(dòng)態(tài)上下線
05 如何自己開發(fā)一個(gè)調(diào)度系統(tǒng)
調(diào)度平臺(tái)其實(shí)需要解決三個(gè)問(wèn)題:任務(wù)編排、任務(wù)執(zhí)行和任務(wù)監(jiān)控。

任務(wù)編排,采用調(diào)用外部編排服務(wù)的方式,主要考慮的是編排需要根據(jù)業(yè)務(wù)的一些屬性進(jìn)行實(shí)現(xiàn),所以將易變的業(yè)務(wù)部分從作業(yè)調(diào)度平臺(tái)分離出去。如果后續(xù)有對(duì)編排邏輯進(jìn)行調(diào)整和修改,都無(wú)需操作業(yè)務(wù)作業(yè)調(diào)度平臺(tái)。
任務(wù)排隊(duì),支持多隊(duì)列排隊(duì)配置,后期根據(jù)不同類型的開發(fā)人員可以配置不同的隊(duì)列和資源,比如面向不同的開發(fā)人員需要有不同的服務(wù)隊(duì)列,面向不同的任務(wù)也需要有不同的隊(duì)列優(yōu)先級(jí)支持。通過(guò)隊(duì)列來(lái)隔離調(diào)度,能夠更好地滿足具有不同需求的用戶。不同隊(duì)列的資源不同,合理的利用資源,達(dá)到業(yè)務(wù)價(jià)值最大化。
任務(wù)調(diào)度,是對(duì)任務(wù)、以及屬于該任務(wù)的一組子任務(wù)進(jìn)行調(diào)度,為了簡(jiǎn)單可控起見,每個(gè)任務(wù)經(jīng)過(guò)編排后會(huì)得到一組有序的任務(wù)列表,然后對(duì)每個(gè)任務(wù)進(jìn)行調(diào)度。這里面,稍有點(diǎn)復(fù)雜的是,任務(wù)里還有子任務(wù),子任務(wù)是一些處理組件,比如字段轉(zhuǎn)換、數(shù)據(jù)抽取,子任務(wù)需要在上層任務(wù)中引用實(shí)現(xiàn)調(diào)度。任務(wù)是調(diào)度運(yùn)行的基本單位。被調(diào)度運(yùn)行的任務(wù)會(huì)發(fā)送到消息隊(duì)列中,然后等待任務(wù)協(xié)調(diào)計(jì)算平臺(tái)消費(fèi)并運(yùn)行任務(wù),這時(shí)調(diào)度平臺(tái)只需要等待任務(wù)運(yùn)行完成的結(jié)果消息到達(dá),然后對(duì)作業(yè)和任務(wù)的狀態(tài)進(jìn)行更新,根據(jù)實(shí)際狀態(tài)確定下一次調(diào)度的任務(wù)。
調(diào)度平臺(tái)設(shè)計(jì)中還需要注意以下幾項(xiàng):
調(diào)度運(yùn)行的任務(wù)需要進(jìn)行超時(shí)處理,比如某個(gè)任務(wù)由于開發(fā)人員設(shè)計(jì)不合理導(dǎo)致運(yùn)行時(shí)間過(guò)長(zhǎng),可以設(shè)置任務(wù)最大的執(zhí)行時(shí)長(zhǎng),超過(guò)最大時(shí)長(zhǎng)的任務(wù)需要及時(shí)kill掉,以免占用大量資源,影響正常的任務(wù)運(yùn)行。
控制同時(shí)能夠被調(diào)度的作業(yè)的數(shù)量,集群資源是有限的,我們需要控制任務(wù)的并發(fā)量,后期任務(wù)上千上萬(wàn)后我們要及時(shí)調(diào)整任務(wù)的啟動(dòng)時(shí)間,避免同時(shí)啟動(dòng)大量的任務(wù),減少調(diào)度資源和計(jì)算資源壓力;
作業(yè)優(yōu)先級(jí)控制,每個(gè)業(yè)務(wù)都有一定的重要級(jí)別,我們要有限保障最重要的業(yè)務(wù)優(yōu)先執(zhí)行,優(yōu)先給與調(diào)度資源分配。在任務(wù)積壓時(shí)候,先執(zhí)行優(yōu)先級(jí)高的任務(wù),保障業(yè)務(wù)影響最小化。
06 總結(jié)與展望
ETL 開發(fā)是數(shù)據(jù)工程師必備的技能之一,在數(shù)據(jù)倉(cāng)庫(kù)、BI等場(chǎng)景中起到重要的作用。但很多從業(yè)者連 ETL 對(duì)應(yīng)的英文是什么都不了解,更不要談對(duì) ETL 的深入解析,這無(wú)疑是非常不稱職的。做ETL 你可以用任何的編程語(yǔ)言來(lái)完成開發(fā),無(wú)論是 shell、python、java 甚至數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程,只要它最終是讓數(shù)據(jù)完成抽取(E)、轉(zhuǎn)化(T)、加載(L)的效果即可。由于ETL是極為復(fù)雜的過(guò)程,而手寫程序不易管理,所以越來(lái)越多的可視化調(diào)度編排工具出現(xiàn)了。
調(diào)度系統(tǒng)作為大數(shù)據(jù)平臺(tái)的核心部分之一,牽扯的業(yè)務(wù)邏輯比較復(fù)雜,場(chǎng)景不同,也許需求就會(huì)差別很多,所以,有自研能力的公司都會(huì)選擇市面上開源系統(tǒng)二次開發(fā)或者完全自研一套調(diào)度系統(tǒng),已滿足自身ETL任務(wù)調(diào)度需求。
不管是哪種工具,只要具備高效運(yùn)行、穩(wěn)定可靠、易于維護(hù)特點(diǎn),都是一款好工具。
04
計(jì)算存儲(chǔ)系統(tǒng)01 傳統(tǒng)的計(jì)算平臺(tái)
我們都知道,沒(méi)有大數(shù)據(jù)之前,我們計(jì)算平臺(tái)基本是依賴數(shù)據(jù)庫(kù),大數(shù)據(jù)量的計(jì)算基本依賴Oracle數(shù)據(jù)庫(kù)。Oracle很強(qiáng)大,支撐了很多年銀行、電信業(yè)務(wù)數(shù)據(jù)的計(jì)算存儲(chǔ)。Oracle多以集中式架構(gòu)為主,最大特點(diǎn)就是將所有的數(shù)據(jù)都集中在一個(gè)數(shù)據(jù)庫(kù)中,依靠大型高端設(shè)備來(lái)提供高處理能力和擴(kuò)展性。集中式數(shù)據(jù)庫(kù)的擴(kuò)展性主要采用向上擴(kuò)展的方式,通過(guò)增加CPU,內(nèi)存,磁盤等方式提高處理能力。這種集中式數(shù)據(jù)庫(kù)的架構(gòu),使得數(shù)據(jù)庫(kù)成為了整個(gè)系統(tǒng)的瓶頸,已經(jīng)越來(lái)越不適應(yīng)海量數(shù)據(jù)對(duì)計(jì)算能力的巨大需求。同時(shí)傳統(tǒng)數(shù)據(jù)庫(kù)架構(gòu)對(duì)高端設(shè)備的依賴,無(wú)疑將直接導(dǎo)致系統(tǒng)成本的大幅度增加,甚至可能會(huì)導(dǎo)致系統(tǒng)被主機(jī)和硬件廠商所“綁架”,不得不持續(xù)增加投入成本。

02 Hadoop的崛起
隨著互聯(lián)網(wǎng)行業(yè)的發(fā)展,特別是移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,傳統(tǒng)數(shù)據(jù)庫(kù)面臨著海量數(shù)據(jù)的存儲(chǔ)成本、有限的擴(kuò)展能力等問(wèn)題。新的計(jì)算框架MapReduce出現(xiàn)了,新的存儲(chǔ)編碼方式HDFS出現(xiàn)了,二者合起來(lái),我們一般稱之為Hadoop。
Hadoop很快憑借其高可靠性、高擴(kuò)展性、成本低、高效計(jì)算等優(yōu)勢(shì)在各個(gè)領(lǐng)域得到了廣泛應(yīng)用。

03 Hive的應(yīng)用
Hive最初是Facebook開源的,我們來(lái)看看Hive的特點(diǎn):
Hive是一個(gè)構(gòu)建于Hadoop頂層的數(shù)據(jù)倉(cāng)庫(kù)工具,可以查詢和管理PB級(jí)別的分布式數(shù)據(jù)。
支持類SQL語(yǔ)音。
可以看作為用戶編程接口,本身不存儲(chǔ)和處理數(shù)據(jù)
依賴HDFS作為存儲(chǔ)
我們看到Hive支持類SQL語(yǔ)法,我們可以很容易的把傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)建立的數(shù)據(jù)倉(cāng)庫(kù)任務(wù)遷移到Hadoop平臺(tái)上。
Hive的架構(gòu):

我們可以看到hive提供了多種連接方式:JDBC、ODBC、Thrift。
那么我們以前使用Oracle的存儲(chǔ)過(guò)程怎么遷移到Hive中呢?用過(guò)Hive的同學(xué)可能都知道,Hive是沒(méi)有想Oracle那樣的游標(biāo)循環(huán)呀,所以我們必須借助其他語(yǔ)言來(lái)配合hive一起完成數(shù)據(jù)倉(cāng)庫(kù)的ETL過(guò)程。比如這個(gè)項(xiàng)目:PyHive(https://github.com/dropbox/PyHive)

借助Python,我們可以很好的彌補(bǔ)Hive在復(fù)雜處理的一些缺陷,同時(shí)也能更好的開發(fā)ETL任務(wù)。

所以,通過(guò)Hive我們就可以搭建起一套大數(shù)據(jù)計(jì)算平臺(tái)。
04 Spark的應(yīng)用
Hive在剛開始使用過(guò)程中很好用,對(duì)大數(shù)據(jù)量的處理確實(shí)比以前傳統(tǒng)數(shù)據(jù)庫(kù)要好,但是隨著業(yè)務(wù)的增長(zhǎng),公司越來(lái)越多的數(shù)據(jù)工程師反饋查詢慢,同時(shí)業(yè)務(wù)側(cè)也紛紛提出,我們的數(shù)據(jù)能不能早點(diǎn)出,不要老是等到早上8點(diǎn)才刷新。我們需要更強(qiáng)大的計(jì)算引擎,Spark使用了十分之一的計(jì)算資源,獲得了比Hadoop快3倍的速度,Spark為什么這么快呢?
我們來(lái)看看Spark的特點(diǎn):
速度快,使用DGA(有向無(wú)環(huán)圖)。
支持內(nèi)存計(jì)算。
低延遲、高容錯(cuò)。
Spark提供了存計(jì)算,可以將計(jì)算結(jié)果存放到內(nèi)存中,我們都知道MR是將數(shù)據(jù)存儲(chǔ)在磁盤,對(duì)磁盤讀寫,勢(shì)必會(huì)增加IO操作,計(jì)算時(shí)間過(guò)長(zhǎng)。之前我也做過(guò)一個(gè)Hive和Spark的一個(gè)執(zhí)行效率的對(duì)比,當(dāng)時(shí)使用的是Spark1.6,數(shù)據(jù)是千萬(wàn)級(jí)別的表。

還是可以看出Spark比Hive快了很多,現(xiàn)在Spark2.0以后,會(huì)更快了。而且,Spark同樣提供的有JDBC、ODBC 、Thrift連接方式。

我們可以從Hive環(huán)境直接遷移到Spark環(huán)境,提高執(zhí)行效率。

05 MPP的應(yīng)用
用了Spark還是不夠快,每次查詢提交任務(wù)后,都得等著任務(wù)啟動(dòng)然后看著任務(wù)執(zhí)行進(jìn)度一直等著。

MPP(Massively Parallel Processing)是指多個(gè)處理器(或獨(dú)立的計(jì)算機(jī))并行處理一組協(xié)同計(jì)算。為了保證各節(jié)點(diǎn)的獨(dú)立計(jì)算能力,MPP數(shù)據(jù)庫(kù)通常采用ShareNothing架構(gòu)。比較有代表性大家熟知的比如:GPDB、Vertica。

MPP具備以下特點(diǎn):
低成本的硬件、和Hadoop一樣,使用x86架構(gòu)的PC就可以
數(shù)據(jù)存儲(chǔ)采用不同的壓縮算法,減少使用空間,提高IO性能
數(shù)據(jù)加載高效,并行加載、數(shù)據(jù)加載的速度取決于帶寬
易擴(kuò)展,容易對(duì)集群節(jié)點(diǎn)進(jìn)行增減
列存儲(chǔ),很多MPP支持列存儲(chǔ)架構(gòu),能夠更高效的訪問(wèn)需要的數(shù)據(jù)
支持標(biāo)準(zhǔn)SQL,MPP比SparkSQL、HiveSQL對(duì)標(biāo)準(zhǔn)SQL支持的更好
從以上MPP的特點(diǎn)和上面我們介紹的Hadoop的特點(diǎn),會(huì)發(fā)現(xiàn)MPP更適合數(shù)據(jù)自助分析、即席查詢等場(chǎng)景、能夠使數(shù)據(jù)人員快速獲取數(shù)據(jù)結(jié)果。
06 搭建自己的計(jì)算平臺(tái)
開源的計(jì)算引擎這么多、我們?nèi)绾芜x擇合適的計(jì)算引擎搭建平臺(tái)呢?
下面分多個(gè)場(chǎng)景來(lái)和大家探討下:
小公司、無(wú)大數(shù)據(jù)平臺(tái)
真正的從無(wú)到有搭建大數(shù)據(jù)平臺(tái),開發(fā)人員較少。可以直接使用CDH搭建起來(lái)你的大數(shù)據(jù)平臺(tái),選用Hive作為數(shù)據(jù)倉(cāng)庫(kù)的計(jì)算引擎。為什么這樣選擇呢?很多小公司沒(méi)有足夠的資金支撐大數(shù)據(jù)平臺(tái)的建設(shè),那么就會(huì)選擇相對(duì)來(lái)說(shuō)的比較穩(wěn)定的開源組件,Hive發(fā)展了很多年,和磁盤的交互MR計(jì)算架構(gòu)中的任務(wù)很少會(huì)出錯(cuò)。Hive對(duì)SQL支持的很好,開發(fā)人員很容易上手,而且維護(hù)成本很低。
小公司、大數(shù)據(jù)平臺(tái)升級(jí)
已經(jīng)有過(guò)一段時(shí)間使用Hive作為計(jì)算引擎后,工程師們對(duì)大數(shù)據(jù)平臺(tái)已經(jīng)有一定的了解和知識(shí)積累,對(duì)Hadoop的運(yùn)維能力也提升了,隨著開發(fā)人員反饋Hive比較慢,領(lǐng)導(dǎo)也考慮升級(jí)平臺(tái),這時(shí)候就可以引入Spark了。上面我們也說(shuō)了Spark是基于內(nèi)存運(yùn)算的,內(nèi)存始終是沒(méi)有磁盤穩(wěn)定,Spark任務(wù)很多時(shí)候會(huì)因?yàn)橘Y源設(shè)置不合理而報(bào)錯(cuò)。而SparkSQL和可以直接共享Hive的metestore,直接從Hive遷移到Spark上很自然,工作流很小。同時(shí)Spark還提供了Streaming功能,可以滿足公司逐漸發(fā)展遇到的實(shí)時(shí)數(shù)據(jù)問(wèn)題,再也不用擔(dān)心以前hive沒(méi)半小時(shí)執(zhí)行一次任務(wù),任務(wù)還偶爾出現(xiàn)執(zhí)行不完的場(chǎng)景了。
大公司
很多傳統(tǒng)行業(yè)的大公司一直依賴傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)來(lái)處理數(shù)據(jù),花了很多錢購(gòu)置硬件和服務(wù)。現(xiàn)在要“降本增效”,必然會(huì)對(duì)IT部門下手。大公司有錢,就可以招聘到專業(yè)的工程師,他們有過(guò)建設(shè)大數(shù)據(jù)平臺(tái)的經(jīng)驗(yàn),在計(jì)算選型上可以根據(jù)自己的技術(shù)棧選擇合適的計(jì)算引擎。
另外,可以買一些MPP數(shù)據(jù)庫(kù)的服務(wù),比如GreenPlum商業(yè)版、Vertica。商業(yè)版的很穩(wěn)定,幾乎不會(huì)碰到棘手的問(wèn)題,平時(shí)只管使用就行了,大大提高的運(yùn)維、開發(fā)效率。對(duì)比下來(lái)會(huì)發(fā)現(xiàn)比以前使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)省了不少錢。

07 總結(jié)
基于多個(gè)計(jì)算引擎搭建大數(shù)據(jù)平臺(tái)是目前的現(xiàn)狀,針對(duì)不同的企業(yè)和團(tuán)隊(duì)選擇適合自己的,同一個(gè)公司不同的業(yè)務(wù)也可以選擇不同的計(jì)算引擎。不考慮商業(yè)方案,就要根據(jù)自己的技術(shù)掌握情況,選擇自己精通的并且適合業(yè)務(wù)的。考慮商業(yè)方案的可以選擇商業(yè)的MPP,給開發(fā)和業(yè)務(wù)人員提供更好的環(huán)境和體驗(yàn)。
05
自助分析系統(tǒng)
自助分析平臺(tái)是構(gòu)建在大數(shù)據(jù)平臺(tái)之上的,依托于大數(shù)據(jù)平臺(tái)的數(shù)據(jù)研發(fā)能力,通過(guò)統(tǒng)一的數(shù)據(jù)服務(wù),實(shí)現(xiàn)對(duì)數(shù)據(jù)查詢、分析的統(tǒng)一管理,為企業(yè)業(yè)務(wù)分析提供高效的數(shù)據(jù)決策支持,同時(shí)也避免數(shù)據(jù)工程師陷入繁雜的提數(shù)需求中。自助分析平臺(tái)是有計(jì)算機(jī)基礎(chǔ)的業(yè)務(wù)人員能夠快速上手的前端產(chǎn)品,既要有大數(shù)據(jù)的處理性能,有需要有簡(jiǎn)單好用的可視化分析能力,只有讓業(yè)務(wù)人員能夠快速掌握使用方法,和公司的業(yè)務(wù)結(jié)合起來(lái),自助分析平臺(tái)才有價(jià)值。其實(shí),一直以來(lái),各大公司的數(shù)據(jù)分析平臺(tái)都只有一個(gè)目標(biāo)——干掉Excel。
02 自助分析平臺(tái)該有哪些模塊

上面已經(jīng)介紹了,自助分析平臺(tái)是用來(lái)查詢數(shù)據(jù),探索數(shù)據(jù)的,需要具備Excel已有的功能,還要比Excel做的更好。
支持多數(shù)據(jù)源接入
自助分析平臺(tái)要能夠支持多種數(shù)據(jù)源、不同數(shù)據(jù)類型文件的接入,能夠讓數(shù)據(jù)工程師和業(yè)務(wù)人員快速的把數(shù)據(jù)導(dǎo)入到自助分析平臺(tái)中。需要支持傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)、Hive、文件導(dǎo)入(Excel、CSV、TXT等)。
多維度分析
能夠?qū)?dǎo)入的數(shù)據(jù)進(jìn)行快速查詢、過(guò)濾、聚合、排序、關(guān)聯(lián)等動(dòng)態(tài)操作。比如業(yè)務(wù)人員已經(jīng)有一些用戶基本信息,它能夠通過(guò)導(dǎo)入用戶名,通過(guò)用戶名關(guān)聯(lián)到對(duì)應(yīng)的用戶分析數(shù)據(jù)。并能夠?qū)Σ煌愋偷挠脩暨M(jìn)行分組聚合操作。以上所有的操作需要實(shí)現(xiàn)拖拽式,不需要讓業(yè)務(wù)人員寫一行代碼。
豐富的可視化
需要支持常用的可視化圖形,如餅狀圖、環(huán)圖、同軸曲線圖、柱狀圖、散點(diǎn)圖等,用戶需要綁定自己導(dǎo)入或者通過(guò)平臺(tái)清洗好的數(shù)據(jù),既可以快速的生產(chǎn)對(duì)應(yīng)的分析圖表,制作可視化報(bào)告。
權(quán)限管控
自助分析平臺(tái)是對(duì)公司所有的業(yè)務(wù)人員使用的,需要有對(duì)應(yīng)的權(quán)限管控。比如A用戶制作的數(shù)據(jù)圖表,B用戶是不能夠查看的,只有A賦權(quán)給B后才能查看。自助分析平臺(tái)中的數(shù)據(jù)也要進(jìn)行權(quán)限管控,比如敏感數(shù)據(jù)不能開放所有用戶,下載數(shù)據(jù)需要有流程審批等等。
高性能
數(shù)據(jù)分析查詢要快、自助分析要快、可視化要快。很多自助分析平臺(tái)最終變成了數(shù)據(jù)下載平臺(tái),其中很大一部分原因就是不夠快,雖說(shuō)大數(shù)據(jù)了比Excel快多了,但是實(shí)際業(yè)務(wù)探索中,很多時(shí)候數(shù)據(jù)量就是百萬(wàn)以內(nèi)的,要是還沒(méi)有Excel快的話,人家為什么要用你的平臺(tái)呢?所以,不管是數(shù)據(jù)量大,還是數(shù)據(jù)量小,都要快!在技術(shù)上是否要考慮大數(shù)據(jù)量和中小數(shù)據(jù)量使用不能的查詢計(jì)算引擎呢?
03 自助分析平臺(tái)架構(gòu)

自助分析引擎
對(duì)于超大數(shù)據(jù)量的復(fù)雜查詢分析,我們可以使用Spark提交任務(wù)的方式來(lái)實(shí)現(xiàn)自助分析。對(duì)于中小數(shù)據(jù)量的數(shù)據(jù)我們使用MPP數(shù)據(jù)庫(kù)實(shí)現(xiàn)快速查詢。
可視化
我們可以使用echarts支撐多種類型圖表展示,或者使用superset等開源自助分析項(xiàng)目進(jìn)行展示。
權(quán)限
為做到相互隔離和數(shù)據(jù)安全,后臺(tái)管控系統(tǒng)通過(guò)條件限制控制數(shù)據(jù)的授權(quán),對(duì)手機(jī)號(hào)、身份證號(hào)、郵箱等敏感信息管控端采用加密算法防止數(shù)據(jù)泄露。
04 總結(jié)
實(shí)際中業(yè)務(wù)人員和IT團(tuán)隊(duì)對(duì)于自助分析平臺(tái)的搭建都有自己的想法,也想通過(guò)數(shù)據(jù)來(lái)給公司去做一些事情,所以在建立自助分析平臺(tái)時(shí),可以和業(yè)務(wù)人員不斷的溝通,先定一些主題數(shù)據(jù),做成果展示,和業(yè)務(wù)人員以及領(lǐng)導(dǎo)分享,讓其參與評(píng)價(jià)和建議,不斷優(yōu)化和改善,當(dāng)相關(guān)人員都有參與感時(shí),自助分析平臺(tái)才會(huì)持久發(fā)展。
最后,還是要提醒一下,自助分析平臺(tái)的目的是“干掉Excel”,讓所有的分析結(jié)果存儲(chǔ)在線上,千萬(wàn)不要讓其淪為數(shù)據(jù)下載平臺(tái)。
(部分內(nèi)容來(lái)源網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系刪除)