导读:业务系统或者日志系统产生了大量的原始数据,我们根据业务场景需求将数据保存到不同的存储中。然而,数据只有通过整合、加工、计算,才能提取出其潜在的信息,让数据变为资产,从而实现数据的价值。Moonbox 就是这样一款计算服务平台,在敏捷大数据(Agile BigData)理论的指导下,围绕“计算服务化”和“数据虚拟化”两个核心概念进行设计,支持多种数据源混合计算。Moonbox 的设计理念是怎样的?又有什么功能特点呢?本文带您初步走进 Moonbox~
一、Moonbox 设计理念
大数据技术在企业中的应用日益广泛,为解决各种不同的场景问题,越来越多的数据系统出现,而如何基于全景数据去进行快速查询计算成为了迫切的需求和挑战。
目前的主流方式是建立以 Hadoop 为核心的数据仓库/数据湖,这在某种程度上解决了异构数据系统及数据分散的问题,但依然存在数据归集带来的维护成本和时效损失。另外,数据开发人员也面临着业务频繁变更和结果快速交付的问题。
面对这一系列挑战,计算服务化和数据虚拟化提供了很好的解决思路。Moonbox 正是在大数据场景下,对计算服务化和数据虚拟化的一种实践,其设计思想主要体现在以下几个方面:
计算服务化
Moonbox 提供多种查询接口以及定时任务,将计算资源变成一种服务,终端用户可以自助注册数据源编写 SQL 实现需求,只需要关心业务逻辑,而不用关心作业是如何提交运行的。
数据虚拟化
Moonbox 提供虚拟表到物理表之间的映射,终端用户无需关心数据的物理存放位置和底层数据源的特性,可直接操作数据,体验类似操作一个虚拟数据库。
统一入口
✔ 统一查询语言
Moonbox 对用户提供统一的 SQL 语法标准,屏蔽异构数据系统查询语言的差异,用户只需编写 SQL 即可查询各种数据系统,也可使用 SQL 进行跨异构数据系统混算,降低多数据系统的学习成本。
✔ 统一元数据服务
Moonbox 能够对接多种数据系统,可以拿到各个数据系统数据表的 schema 信息,Moonbox 并不存储 schema 信息,每次都是实时从数据源获取,所以不存在元数据变更不及时,需要同步更新等问题。Moonbox 对外提供统一的元数据服务接口,用户无需为了获取各种数据源的元数据而调用多种接口。
✔ 统一权限控制
每种数据源都有各自特有的安全机制,用户在使用这些数据系统的时候就需要多付出一定的学习成本。Moonbox 在逻辑层提供了统一的安全访问机制,在接入时,提供认证登录功能;在查询时,通过拦截分析查询 SQL,实现列级别的数据权限控制。如果查询统一从 Moonbox 接口进入,那么 Moonbox 就为各种数据源加上了一把安全锁,用户无需再学习各种数据源特有的安全机制。
二、Moonbox 体系架构
Moonbox 体系架构图如下:
Moonbox 总体上由四部分组成,分别是 Moonbox 客户端、Moonbox 接入层、Moonbox 核心功能层以及存储计算层。
Moonbox 客户端
Moonbox 客户端主要包括以下几种:
✔ restful api
以 restful api 的方式提供计算服务,支持 batch、adhoc 模式,支持同步和异步方式。
✔ jdbc
对 jdbc 接口的实现,使用户拥有数据库般的使用体验。
✔ cli
命令行工具,基于 jline 实现。通过 cli 可以完成 DDL(Data Definition Language)、DML(Data Manipulation Language)、DCL(Data Control Language)以及 Query 操作。
✔ zeppelin
提供 zeppelin moonbox interpreter,可以使用 zeppelin 快速进行原型验证和 SQL 开发。
✔ davinci
通过 jdbc 支持 ABD Stack(敏捷大数据技术栈)中数据可视化平台 davinci 的接入,进行数据查询并展示。
Moonbox 接入层
接入层包括 http server 和 tcp server,实现客户端接入,并进行用户登录认证,支持内置用户名密码认证方式和 ldap 集成认证方式。
Moonbox 核心功能层
Moonbox 将其核心功能层命名为 Grid。Grid 使用 master-slave 集群工作模式,支持 master 主备切换。
Grid 有 Master、Worker、Runner 三种角色:
✔ Master
Master 负责接收所有的用户请求,根据请求模式(adhoc/batch)将请求调度到合适的 Worker 上。
✔ Worker
Worker 负责 Runner 的生成和销毁,将请求分配给合适 Runner。
✔ Runner
Runner 处理用户发过来的请求,包括用户体系管理操作、权限管理操作、SQL 解析、下推优化、执行引擎选择等,并向存储/计算层提交真正的计算任务。
存储/计算层
存储/计算层是计算真正发生的地方。Moonbox 使用 Spark 作为混算引擎,支持 standalone 和 yarn 运行模式。当计算逻辑可以完全下推到数据源计算时,Moonbox 将计算任务直接 mapping 成数据源的查询语言进行下推计算,以减小启动分布式作业的开销。数据源除了可以是 hdfs 这种纯存储系统,或者 mysql、elasticsearch 这种带计算能力的存储系统,还可以是 presto 等计算引擎,Moonbox 将他们统一视为数据源。
三、Moonbox 功能特点
用户体系
Moonbox 建立了一套完整的用户体系,引入了 Organization 的概念,用于划分用户空间。系统管理员 ROOT 账号可以创建多个 Organization,并在 Organization 中指定该 Organization 的管理者(SA)。SA 可以是一个或者多个,负责创建管理普通用户。
Moonbox 将普通用户的能力抽象出五大属性,分别为:
✔ 是否可以创建新用户
✔ 是否可以执行 DDL 语句
✔ 是否拥有可以授权其他用户创建用户的能力
✔ 是否拥有可以授权其他用户执行 DDL 语句的能力
✔ 是否拥有对数据表或者数据列进行授权给其他用户的能力
通过属性的自由组合,可以构建出满足多种角色、多种需求的用户体系模型,并可借此实现多租户。
扩展 SQL
Moonbox 将查询语言统一为 Spark SQL,使用 Spark SQL 语法进行查询操作,同时扩展了一套 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 还在 SQL 中对复合数据类型,比如 Array 类型提供了高阶函数支持(array.map,array.filter,array.exist)。
定时任务
Moonbox 提供了定时作业的功能,用户使用 DDL 语句定义定时任务,以 crontab 表达式的形式定义调度策略,后台内嵌 quartz 进行任务定时调度。
四、Moonbox 应用场景
即席查询
在进行数据项目时,需要了解数据的内容、质量和结构。用户可以使用 Moonbox 快速进行数据探查和 idea 验证。
实时报表
DBus 和 Wormhole 将源库数据实时更新到目的库。用户使用 Davinci 连接 Moonbox 对目的库进行实时计算展示。
数据服务
当企业数据被存储在多个系统中时,想要与之交互需要多个接口或多种机制。借助 Moonbox 可以统一对外提供数据服务和元数据服务。
逻辑数仓
基于传统数据仓库面临的问题,Gartner 的分析师在几年前提出了逻辑数据仓库的概念。他们认为逻辑数据仓库不仅需要存储结构化数据,还能存储非结构化数据,能够使用数据虚拟化手段直接访问不同的数据源进行分布式快速计算。用户可以基于 Moonbox 提供的功能进行逻辑数仓建设。
Moonbox 目前处于测试完善阶段,预计不久会发布可用版本。本篇作为 Moonbox 系列的开篇,主要从设计理念、架构、功能特点等方面进行了介绍。接下来的文章将会从安装使用、实现细节、应用场景等方面来展开。
本文转载自宜信技术学院网站。
原文链接:http://college.creditease.cn/detail/154
评论