导读 :数据虚拟化思想一直以来都是敏捷大数据团队十分关注的一个点,Moonbox 则以此为基础而设计,致力于提供批量计算服务解决方案。今天,Moonbox 惊喜发布 0.3beta 版(回顾 v0.2 请戳这里:#Moonbox# 计算服务平台简介),阅读全文,了解 Moonbox,跟小编一起看 0.3 版本的神奇之处在哪里吧~
- Project:https://github.com/edp963/moo…
- Release:https://github.com/edp963/moo…
- Documentation:https://edp963.github.io/moon…
一、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
Wormhole
Moonbox
Davinci
作者:王浩
来源:敏捷大数据
宜信技术学院