导读:数据虚拟化思想一直以来都是敏捷大数据团队十分关注的一个点,Moonbox则以此为基础而设计,致力于提供批量计算服务解决方案。今天,Moonbox惊喜发布0.3beta版(回顾v0.2请戳这里:#Moonbox# 计算服务平台简介),阅读全文,了解Moonbox,跟小编一块儿看0.3版本的神奇之处在哪里吧~git
在了解Moonbox新版本以前,咱们先来回忆一下Moonbox的定位。github
Moonbox是一个DVtaaS(Data Virtualization as a Service)平台解决方案。它基于数据虚拟化设计思想,致力于提供批量计算服务解决方案。Moonbox负责屏蔽底层数据源的物理和使用细节,为用户带来虚拟数据库般使用体验,用户只需经过统一SQL语言,便可透明实现跨异构数据系统混算和写出。此外Moonbox还提供数据服务、数据管理、数据工具、数据开发等基础支持,可支撑更加敏捷和灵活的数据应用架构和逻辑数仓实践。redis
数据虚拟化思想是Moonbox很重要的一个设计原则,在此基础上,Moonbox实现了多种功能。下面咱们具体看一下Moonbox都有哪些功能:数据库
Moonbox创建了一套完整的用户体系,引入了Organization的概念,用于划分用户空间。系统管理员ROOT帐号能够建立多个Organization,并在Organization中指定该Organization的管理者(SA)。SA能够是一个或者多个,SA负责建立管理普通用户。架构
Moonbox将普通用户的能力抽象出六大属性,分别是是否能够执行Account管理语句,是否能够执行DDL语句,是否能够执行DCL语句, 是否拥有能够受权其余用户执行Account类语句的能力,是否拥有能够受权其余用户执行DDL语句的能力,是否拥有能够受权其余用户执行DCL语句的能力。经过属性的自由组合,能够构建出知足多种角色,多种需求的用户体系模型,并借此实现多租户。app
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中是否引用了未被受权的表或者列,若是有就报错返回给用户。
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在v0.2的基础上作出了几点重要改变,具体包括:
v0.2是将查询结果写入Redis而后客户端从Redis中获取结果;v0.3直接将结果返回给客户端。
v0.2客户端以rest方式获取结果数据;v0.3使用netty加protobuf的方式获取结果数据。
将Moonbox Master选主由akka singleton改成使用zk进行选主和信息持久化。
在v0.2中,直接在Worker中运行Spark APP Driver;v0.3改成在新的进程中运行Spark APP Driver,这样Worker就与Spark进行了解耦,一个Worker节点能够运行多个Spark APP Driver,且能够运行其余APP。
最后,为了让你们更加了解Moonbox,咱们来介绍几个典型的Moonbox应用场景案例。
DBus将数据库变动实时写入Kafka,Wormhole消费Kafka进行流式处理,流上lookup其余表造成大宽表,或者执行部分处理逻辑写入Kudu。使用Moonbox对Kudu进行查询将结果保存或者展现。
使用Moonbox提供的批量做业脚本,异步rest接口或者定时任务,能够运行批量做业。
将Moonbox的JDBC驱动放入Davinci lib中,便可像使用其余数据库同样对Moonbox进行查询,并将结果进行图形化展现。
SAS用户可使用ODBC的方式链接到Moonbox进行数据查询,而且能够将计算直接推到Moonbox中进行分布式计算。
由于Moonbox能够对接多种数据源,并且能够利用Spark进行多种数据源之间的混合计算,因此能够利用Moonbox进行各类便捷操做。例如利用一条SQL就能够搞定将一种数据源中某张表的数据导入另一种数据源中,对比两张表有哪些数据不一样等等。
更多使用场景,你们能够自行体验挖掘哦!
随着数据虚拟化愈来愈受到你们的重视,一个靠谱的工具成了你们探索数据虚拟化世界的共同需求。Moonbox就是这样一个工具,还等什么,赶忙用起来吧~
项目开源地址:
做者:王浩来源:敏捷大数据