開源|Moonbox_v0.3_beta重大發布 | Grid全新重構,更快更解耦
-
Project:https://github.com/edp963/moonbox
-
Release:https://github.com/edp963/moonbox/releases/tag/0.3.0-beta
- Documentation:https://edp963.github.io/moonbox/
一、Moonbox定位
在了解Moonbox新版本之前,我們先來回憶一下Moonbox的定位。
Moonbox是一個DVtaaS(Data Virtualization as a Service)平臺解決方案。它基於數據虛擬化設計思想,致力於提供批量計算服務解決方案。Moonbox負責屏蔽底層數據源的物理和使用細節,為用戶帶來虛擬數據庫般使用體驗,用戶只需通過統一SQL語言,即可透明實現跨異構數據系統混算和寫出。此外Moonbox還提供數據服務、數據管理、數據工具、數據開發等基礎支持,可支撐更加敏捷和靈活的數據應用架構和邏輯數倉實踐。
二、Moonbox功能
數據虛擬化思想是Moonbox很重要的一個設計原則,在此基礎上,Moonbox實現了多種功能。下面我們具體看一下Moonbox都有哪些功能:
多租戶
Moonbox建立了一套完整的用戶體系,引入了Organization的概念,用於劃分用戶空間。系統管理員ROOT賬號可以創建多個Organization,並在Organization中指定該Organization的管理者(SA)。SA可以是一個或者多個,SA負責創建管理普通用戶。
Moonbox將普通用戶的能力抽象出六大屬性,分別是是否可以執行Account管理語句,是否可以執行DDL語句,是否可以執行DCL語句, 是否擁有可以授權其他用戶執行Account類語句的能力,是否擁有可以授權其他用戶執行DDL語句的能力,是否擁有可以授權其他用戶執行DCL語句的能力。通過屬性的自由組合,可以構建出滿足多種角色,多種需求的用戶體系模型,並借此實現多租戶。
擴展SQL
Moonbox將查詢語言統一為Spark SQL,底層使用Spark進行計算,同時擴展了一套DDL、DCL語句。包括對用戶的創建刪除和授權,數據表或者數據列的訪問授權,掛載卸載物理數據源或者數據表,創建刪除邏輯數據庫,創建刪除UDF/UDAF,創建刪除定時任務等。
優化策略
Moonbox基於Spark進行混算,Spark SQL是支持多數據源的,但是Spark SQL在從數據源中進行數據拉取的時候只進行了project和filter算子的下推,並沒有考慮數據源的算力特性。
比如Elasticsearch對於聚合操作是很友好的,如果聚合操作能下推到Elasticsearch中進行計算會比將數據全部拉回Spark計算快的多。
再比如limit算子如果下推到數據源計算,能大大減少返回的數據量,節省拉取數據和計算的時間。
Moonbox對Spark Optimizer優化後的LogicalPlan作進一步的優化,根據規則拆分出可以進行下推的子樹,將子樹mapping成數據源查詢語言,將下推結果拉回Spark參與進一步的計算。
另外,如果LogicalPlan可以整體下推計算,那麽Moonbox將不采用Spark進行計算,而是直接使用數據源客戶端運行LogicalPlan mapping出來的查詢語句,以減少啟動分布式作業的開銷,並節省分布式計算資源。
列權限控制
Moonbox定義了DCL語句來實現數據列級別權限控制。Moonbox管理員通過DCL語句將數據表或者數據列授權給用戶,Moonbox會將用戶和表以及列的權限關系保存到catalog中。當用戶在使用SQL查詢時會被攔截,分析出SQL被解析後的LogicalPlan中是否引用了未被授權的表或者列,如果有就報錯返回給用戶。
多種形式的UDF/UDAF
Moonbox除了支持以jar包的形式創建UDF/UDAF外,還支持以源代碼的形式創建,包括Java語言和Scala語言,這給UDF開發驗證帶來了便捷性。
定時任務
Moonbox提供了定時任務的功能,用戶使用DDL語句定義定時任務,以crontab表達式的形式定義調度策略,後臺內嵌quartz進行任務定時調度。
多種客戶端
Moonbox支持以命令行工具, JDBC, Rest, ODBC等方式進行訪問。
多種數據源支持
Moonbox支持多種數據源,包括MySQL, Oracle, SQLServer, Clickhouse, Elasticsearch, MongoDB, Cassandra, HDFS, Hive, Kudu等,且支持自定義擴展。
兩種任務模式
Moonbox支持Batch和Interactive兩種任務模式。Batch模式支持Spark Yarn Cluster Mode,Interactive模式支持Spark Local和Spark Yarn Client Mode。
集群工作模式
Moonbox以master-slave群集方式工作,支持master主備切換。
三、Moonbox_v0.3 VS v0.2
Moonbox_v0.3在v0.2的基礎上做出了幾點重要改變,具體包括:
去掉redis依賴
v0.2是將查詢結果寫入Redis然後客戶端從Redis中獲取結果;v0.3直接將結果返回給客戶端。
改變數據傳輸方式
v0.2客戶端以rest方式獲取結果數據;v0.3使用netty加protobuf的方式獲取結果數據。
Moonbox Master選主策略重構
將Moonbox Master選主由akka singleton改為使用zk進行選主和信息持久化。
Moonbox Worker與Spark解耦
在v0.2中,直接在Worker中運行Spark APP Driver;v0.3改為在新的進程中運行Spark APP Driver,這樣Worker就與Spark進行了解耦,一個Worker節點可以運行多個Spark APP Driver,且可以運行其他APP。
四、Moonbox典型場景案例
最後,為了讓大家更加了解Moonbox,我們來介紹幾個典型的Moonbox應用場景案例。
基於DBus、Wormhole、Kudu、Moonbox構建實時ETL
DBus將數據庫變更實時寫入Kafka,Wormhole消費Kafka進行流式處理,流上lookup其他表形成大寬表,或者執行部分處理邏輯寫入Kudu。使用Moonbox對Kudu進行查詢將結果保存或者展示。
批量作業
使用Moonbox提供的批量作業腳本,異步rest接口或者定時任務,可以運行批量作業。
基於Davinci、Moonbox即席查詢可視化
將Moonbox的JDBC驅動放入Davinci lib中,即可像使用其他數據庫一樣對Moonbox進行查詢,並將結果進行圖形化展示。
SAS查詢
SAS用戶可以使用ODBC的方式連接到Moonbox進行數據查詢,並且可以將計算直接推到Moonbox中進行分布式計算。
便捷數據操作工具箱
因為Moonbox可以對接多種數據源,而且可以利用Spark進行多種數據源之間的混合計算,所以可以利用Moonbox進行各種便捷操作。例如利用一條SQL就可以搞定將一種數據源中某張表的數據導入另外一種數據源中,對比兩張表有哪些數據不同等等。
更多使用場景,大家可以自行體驗挖掘哦!
隨著數據虛擬化越來越受到大家的重視,一個靠譜的工具成了大家探索數據虛擬化世界的共同需求。Moonbox就是這樣一個工具,還等什麽,趕緊用起來吧~
項目開源地址:
DBus:https://github.com/BriData/DBus
Wormhole:https://github.com/edp963/wormhole
Moonbox:https://github.com/edp963/moonbox
Davinci:https://github.com/edp963/davinci
作者:王浩
來源:敏捷大數據
宜信技術學院
開源|Moonbox_v0.3_beta重大發布 | Grid全新重構,更快更解耦