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