Moonbox v0.3beta 釋出:Grid 全新重構,更快更解耦
導讀 : 資料虛擬化思想一直以來都是敏捷大資料團隊十分關注的一個點,Moonbox則以此為基礎而設計,致力於提供批量計算服務解決方案。 近日,Moonbox驚喜釋出0.3beta版(回顧v0.2請戳這裡: #Moonbox# 計算服務平臺簡介 ),閱讀全文,瞭解Moonbox,跟小編一起看0.3版本的神奇之處在哪裡吧~
- 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
作者:王浩 來源:敏捷大資料