Moonbox數(shù)據(jù)虛擬化即服務(wù)(DVtaaS)平臺(tái)解決方案
Moonbox是一個(gè)DVtaaS(Data Virtualization as a Service)平臺(tái)解決方案。
Moonbox基于數(shù)據(jù)虛擬化設(shè)計(jì)思想,致力于提供批量計(jì)算服務(wù)解決方案。Moonbox負(fù)責(zé)屏蔽底層數(shù)據(jù)源的物理和使用細(xì)節(jié),為用戶(hù)帶來(lái)虛擬數(shù)據(jù)庫(kù)般使用體驗(yàn),用戶(hù)只需通過(guò)統(tǒng)一SQL語(yǔ)言,即可透明實(shí)現(xiàn)跨異構(gòu)數(shù)據(jù)系統(tǒng)混算和寫(xiě)出。此外Moonbox還提供數(shù)據(jù)服務(wù)、數(shù)據(jù)管理、數(shù)據(jù)工具、數(shù)據(jù)開(kāi)發(fā)等基礎(chǔ)支持,可支撐更加敏捷和靈活的數(shù)據(jù)應(yīng)用架構(gòu)和邏輯數(shù)倉(cāng)實(shí)踐。
Philosophy
隨著大數(shù)據(jù)技術(shù)在企業(yè)應(yīng)用日益廣泛,以及越來(lái)越多數(shù)據(jù)系統(tǒng)的出現(xiàn)解決各種不同的場(chǎng)景問(wèn)題,基于全景數(shù)據(jù)的快速查詢(xún)計(jì)算成為了迫切的需求和挑戰(zhàn)。目前的主流方式是建立以Hadoop為核心的數(shù)據(jù)倉(cāng)庫(kù)/數(shù)據(jù)湖,某種程度上解決了異構(gòu)數(shù)據(jù)系統(tǒng)及數(shù)據(jù)分散的問(wèn)題,但依然有數(shù)據(jù)歸集帶來(lái)的維護(hù)成本和時(shí)效損失問(wèn)題。另外數(shù)據(jù)開(kāi)發(fā)人員也面臨著業(yè)務(wù)頻繁變更和結(jié)果快速交付的問(wèn)題。在這樣的挑戰(zhàn)下,計(jì)算服務(wù)化、數(shù)據(jù)虛擬化提供了很好的解決思路。Moonbox正是基于大數(shù)據(jù)場(chǎng)景的數(shù)據(jù)虛擬化,計(jì)算服務(wù)化的一種實(shí)踐,設(shè)計(jì)思想主要體現(xiàn)在以下幾個(gè)方面:
-
計(jì)算服務(wù)化
Moonbox提供多種查詢(xún)接口以及定時(shí)任務(wù),將計(jì)算資源變成一種服務(wù),終端用戶(hù)可以自助注冊(cè)數(shù)據(jù)源編寫(xiě)SQL實(shí)現(xiàn)需求,只需要關(guān)心業(yè)務(wù)邏輯,而不用關(guān)心作業(yè)如何提交運(yùn)行的。
-
數(shù)據(jù)虛擬化
Moonbox提供虛擬表到物理表之間的映射,終端用戶(hù)無(wú)需關(guān)心數(shù)據(jù)的物理存放位置和底層數(shù)據(jù)源的特性即可操作數(shù)據(jù),體驗(yàn)類(lèi)似操作一個(gè)虛擬數(shù)據(jù)庫(kù)。
-
統(tǒng)一入口
-
統(tǒng)一查詢(xún)語(yǔ)言
Moonbox對(duì)用戶(hù)提供統(tǒng)一的SQL語(yǔ)法標(biāo)準(zhǔn),屏蔽異構(gòu)數(shù)據(jù)系統(tǒng)查詢(xún)語(yǔ)言的差異,用戶(hù)只需編寫(xiě)SQL即可查詢(xún)各種數(shù)據(jù)系統(tǒng),也可使用SQL進(jìn)行跨異構(gòu)數(shù)據(jù)系統(tǒng)混算,降低多數(shù)據(jù)系統(tǒng)的學(xué)習(xí)成本。
-
統(tǒng)一元數(shù)據(jù)服務(wù)
Moonbox能夠?qū)佣喾N數(shù)據(jù)系統(tǒng),可以拿到各個(gè)數(shù)據(jù)系統(tǒng)數(shù)據(jù)表的schema信息,Moonbox并不存儲(chǔ)schema信息,每次都是實(shí)時(shí)從數(shù)據(jù)源獲取,所以不存在元數(shù)據(jù)變更不及時(shí),需要同步更新等問(wèn)題。Moonbox對(duì)外提供統(tǒng)一的元數(shù)據(jù)服務(wù)接口,用戶(hù)無(wú)需為了獲取各種數(shù)據(jù)源的元數(shù)據(jù)而調(diào)用多種接口。
-
統(tǒng)一權(quán)限控制
每種數(shù)據(jù)源都有各自特有的安全機(jī)制,用戶(hù)在使用這些數(shù)據(jù)系統(tǒng)的時(shí)候就需要多付出一定的學(xué)習(xí)成本。Moonbox在邏輯層提供了統(tǒng)一的安全訪問(wèn)機(jī)制,在接入時(shí),提供認(rèn)證登錄功能;在查詢(xún)時(shí),通過(guò)攔截分析查詢(xún)SQL,實(shí)現(xiàn)列級(jí)別的數(shù)據(jù)權(quán)限控制。如果查詢(xún)統(tǒng)一從Moonbox接口進(jìn)入,那么Moonbox就為各種數(shù)據(jù)源加上了一把安全鎖,用戶(hù)無(wú)需再學(xué)習(xí)各種數(shù)據(jù)源特有的安全機(jī)制。
-
Architecture
? Moonbox總體上由四部分組成,分別是客戶(hù)端、接入層、Grid以及存儲(chǔ)計(jì)算層。
-
客戶(hù)端
客戶(hù)端有如下幾種:
-
rest api
以restful api的方式提供batch作業(yè)提交、查詢(xún)作業(yè)執(zhí)行狀態(tài)、取消作業(yè)服務(wù)。
-
jdbc
提供jdbc驅(qū)動(dòng),可以使用jdbc編程訪問(wèn), 使用戶(hù)擁有數(shù)據(jù)庫(kù)般的使用體驗(yàn)。
-
odbc
提供odbc支持,用戶(hù)可以使用sas連接moonbox進(jìn)行數(shù)據(jù)分析。
-
cli
命令行工具,基于jline實(shí)現(xiàn)。通過(guò)cli可以完成DDL(Data Definition Language)、DML(Data Manipulation Language)、DCL(Data Control Language)以及Query操作。
-
zeppelin
提供zeppelin moonbox interpreter,可以使用zeppelin快速進(jìn)行原型驗(yàn)證和SQL開(kāi)發(fā)。
-
davinci
通過(guò)jdbc支持ABD Stack(敏捷大數(shù)據(jù)技術(shù)棧)中數(shù)據(jù)可視化平臺(tái)davinci的接入,進(jìn)行數(shù)據(jù)查詢(xún)并展示。
-
-
接入層
接入層包括http server、tcp server和thrift server,實(shí)現(xiàn)客戶(hù)端接入,并進(jìn)行用戶(hù)登錄認(rèn)證。
-
分布式服務(wù)層
Grid是Moonbox分布式服務(wù)層。Grid使用master-slave集群工作模式,支持master主備切換。Grid有Master、Worker、App三種角色:
- Master負(fù)責(zé)接收所有的用戶(hù)請(qǐng)求,根據(jù)請(qǐng)求模式(adhoc/batch)將請(qǐng)求調(diào)度到合適的App上。
- Worker向Master注冊(cè),負(fù)責(zé)該節(jié)點(diǎn)上App的啟動(dòng)和停止,每個(gè)Worker節(jié)點(diǎn)可以啟動(dòng)多個(gè)不同種類(lèi)的App。
- App也會(huì)向Master注冊(cè),App是真正處理計(jì)算的角色,可以是一個(gè)Spark App, 也可以是其他自定義的App。
-
計(jì)算/存儲(chǔ)層
Moonbox默認(rèn)使用Spark作為計(jì)算引擎,將一個(gè)常駐的Spark作業(yè)稱(chēng)之為一個(gè)App, 支持standalone和yarn運(yùn)行模式。Spark App處理用戶(hù)發(fā)過(guò)來(lái)的請(qǐng)求,包括用戶(hù)體系管理操作、權(quán)限管理操作、SQL解析、下推優(yōu)化、執(zhí)行引擎選擇等,并提交真正的計(jì)算任務(wù)。當(dāng)計(jì)算邏輯可以完全下推到數(shù)據(jù)源計(jì)算時(shí),Moonbox將計(jì)算任務(wù)直接mapping成數(shù)據(jù)源的查詢(xún)語(yǔ)言進(jìn)行下推計(jì)算,以減小啟動(dòng)分布式作業(yè)的開(kāi)銷(xiāo)。數(shù)據(jù)源除了可以是hdfs這種純存儲(chǔ)系統(tǒng),mysql、elasticsearch這種帶計(jì)算能力的存儲(chǔ)系統(tǒng),還可以是presto等計(jì)算引擎,Moonbox將他們統(tǒng)一視為數(shù)據(jù)源。
Feature
-
用戶(hù)體系
Moonbox建立了一套完整的用戶(hù)體系,引入了Organization的概念,用于劃分用戶(hù)空間。系統(tǒng)管理員ROOT賬號(hào)可以創(chuàng)建多個(gè)Organization,并在Organization中指定該Organization的管理者(SA),可以是一個(gè)或者多個(gè)。SA負(fù)責(zé)創(chuàng)建管理普通用戶(hù)。Moonbox將普通用戶(hù)的能力抽象出六大屬性,分別是是否可以執(zhí)行Account管理語(yǔ)句,是否可以執(zhí)行DDL語(yǔ)句,是否可以執(zhí)行DCL語(yǔ)句, 是否擁有可以授權(quán)其他用戶(hù)執(zhí)行Account類(lèi)語(yǔ)句的能力,是否擁有可以授權(quán)其他用戶(hù)執(zhí)行DDL語(yǔ)句的能力,是否擁有可以授權(quán)其他用戶(hù)執(zhí)行DCL語(yǔ)句的能力。通過(guò)屬性的自由組合,可以構(gòu)建出滿(mǎn)足多種角色,多種需求的用戶(hù)體系模型,并可借此實(shí)現(xiàn)多租戶(hù)。
-
擴(kuò)展SQL
Moonbox將查詢(xún)語(yǔ)言統(tǒng)一為Spark SQL,使用Spark SQL語(yǔ)法進(jìn)行查詢(xún)操作,同時(shí)擴(kuò)展了一套DDL、DCL語(yǔ)句。包括對(duì)用戶(hù)的創(chuàng)建刪除和授權(quán),數(shù)據(jù)表或者數(shù)據(jù)列的訪問(wèn)授權(quán),掛載卸載物理數(shù)據(jù)源或者數(shù)據(jù)表,創(chuàng)建刪除邏輯數(shù)據(jù)庫(kù),創(chuàng)建刪除udf/udaf,創(chuàng)建刪除定時(shí)任務(wù)等。
-
優(yōu)化策略
Moonbox基于Spark進(jìn)行混算,Spark SQL是支持多數(shù)據(jù)源的,但是Spark SQL在從數(shù)據(jù)源中進(jìn)行數(shù)據(jù)拉取的時(shí)候只進(jìn)行了project和filter算子的下推,并沒(méi)有考慮數(shù)據(jù)源的算力特性,比如elasticsearch對(duì)于聚合操作是很友好的,如果聚合操作能下推到elasticsearch中進(jìn)行計(jì)算會(huì)比將數(shù)據(jù)全部拉回Spark計(jì)算快的多,比如limit算子如果下推到數(shù)據(jù)源計(jì)算,能大大減少返回的數(shù)據(jù)量,節(jié)省拉取數(shù)據(jù)和計(jì)算的時(shí)間。Moonbox對(duì)Spark Optimizer優(yōu)化后的LogicalPlan作進(jìn)一步的優(yōu)化,根據(jù)規(guī)則拆分出可以進(jìn)行下推的子樹(shù),將子樹(shù)mapping成數(shù)據(jù)源查詢(xún)語(yǔ)言,將下推結(jié)果拉回Spark參與進(jìn)一步的計(jì)算。如果LogicalPlan可以整體下推計(jì)算,那么Moonbox將不采用Spark進(jìn)行計(jì)算,直接使用數(shù)據(jù)源客戶(hù)端運(yùn)行LogicalPlan mapping出來(lái)的查詢(xún)語(yǔ)句,以減少啟動(dòng)分布式作業(yè)的開(kāi)銷(xiāo),并節(jié)省分布式計(jì)算資源。
-
列權(quán)限控制
數(shù)據(jù)安全越來(lái)越受到企業(yè)的重視,我們希望在方便快捷提供計(jì)算服務(wù)和數(shù)據(jù)服務(wù)的同時(shí),還希望實(shí)現(xiàn)數(shù)據(jù)的安全。Moonbox定義了DCL語(yǔ)句來(lái)實(shí)現(xiàn)數(shù)據(jù)列級(jí)別權(quán)限控制。Moonbox管理員通過(guò)DCL語(yǔ)句將數(shù)據(jù)表或者數(shù)據(jù)列授權(quán)給用戶(hù),Moonbox會(huì)將用戶(hù)和表以及列的權(quán)限關(guān)系保存到catalog中。當(dāng)用戶(hù)在使用SQL查詢(xún)時(shí)會(huì)被攔截,分析出SQL被解析后的LogicalPlan中是否引用了未被授權(quán)的表或者列,如果有就報(bào)錯(cuò)返回給用戶(hù)。
-
多種形式的UDF/UDAF
Moonbox除了支持以jar包的形式創(chuàng)建UDF/UDAF外,還支持以源代碼的形式創(chuàng)建,包括Java語(yǔ)言和Scala語(yǔ)言,這給UDF開(kāi)發(fā)驗(yàn)證帶來(lái)了便捷性。
-
定時(shí)任務(wù)
Moonbox提供了定時(shí)作業(yè)的功能,用戶(hù)使用DDL語(yǔ)句定義定時(shí)任務(wù),以crontab表達(dá)式的形式定義調(diào)度策略,后臺(tái)內(nèi)嵌quartz進(jìn)行任務(wù)定時(shí)調(diào)度。
Document
Please refer to Moonbox用戶(hù)手冊(cè). ?
Latest Release
Please download the latest RELEASE
Help
- Mailling list:[email protected]
- WeChat:edpstack
License
Moonbox is under the Apache 2.0 license. See the LICENSE file for details.
