百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

从零开始理解大数据架构之大数据虚拟混算

mhr18 2024-09-17 23:19 19 浏览 0 评论

Moonbox

Moonbox是一个DVtaaS(Data Virtualization as a Service)平台解决方案。Moonbox基于数据虚拟化设计思想,致力于提供批量计算服务解决方案。Moonbox负责屏蔽底层数据源的物理和使用细节,为用户带来虚拟数据库般使用体验,用户只需通过统一SQL语言,即可透明实现跨异构数据系统混算和写出。此外Moonbox还提供数据服务、数据管理、数据工具、数据开发等基础支持,可支撑更加敏捷和灵活的数据应用架构和逻辑数仓实践。

Feature

  • 多租户支持Moonbox建立了一套完整的用户体系,引入了Organization的概念,用于划分用户空间。系统管理员ROOT账号可以创建多个Organization, 并在Organization中指定该Organization的管理者(SA),可以是一个或者多个。 SA负责创建管理普通用户。Moonbox将普通用户的能力抽象出六大属性,分别是是否可以执行Account管理语句,是否可以执行DDL语句,是否可以执行DCL语句, 是否拥有可以授权其他用户执行Account类语句的能力,是否拥有可以授权其他用户执行DDL语句的能力,是否拥有可以授权其他用户执行DCL语句的能力。通过属性的自由组合,可以构建出满足多种角色,多种需求的用户体系模型,并可借此实现多租户。
  • 跨数据源混算Moonbox以Spark为计算引擎,可以支持多种数据源进行混合计算,比如MySQL、Oracle、Hive、Kudu、HDFS、MongoDB,且支持自定义扩展。
  • 统一SQLMoonbox将查询语言统一为Spark SQL,使用Spark SQL语法进行查询操作,同时扩展了一套DDL、DCL语句。包括对用户的创建删除和授权,数据表或者数据列的访问授权,挂载卸载物理数据源或者数据表,创建删除逻辑数据库,创建删除udf/udaf,创建删除定时任务等。
  • 优化策略Moonbox基于Spark进行混算,Spark SQL是支持多数据源的,但是Spark SQL在从数据源中进行数据拉取的时候只进行了project和filter算子的下推,并没有考虑数据源的算力特性。Moonbox对Spark Optimizer优化后的LogicalPlan作进一步的优化,根据规则拆分出可以进行下推的子树,将子树mapping成数据源查询语言,将下推结果拉回Spark参与进一步的计算。如果LogicalPlan可以整体下推计算,那么Moonbox将不采用Spark进行计算,直接使用数据源客户端运行LogicalPlan mapping出来的查询语句,以减少启动分布式作业的开销,并节省分布式计算资源。
  • 列权限控制Moonbox定义了DCL语句来实现数据列级别权限控制。Moonbox管理员通过DCL语句将数据表或者数据列授权给用户,Moonbox会将用户和表以及列的权限关系保存到catalog中。当用户在使用SQL查询时会被拦截,分析出SQL被解析后的LogicalPlan中是否引用了未被授权的表或者列,如果有就报错返回给用户。
  • 多种形式的UDF/UDAFMoonbox除了支持以jar包的形式创建UDF/UDAF外,还支持以源代码的形式创建,包括Java语言和Scala语言,这给UDF开发验证带来了便捷性。
  • 定时任务Moonbox提供了定时作业的功能,用户使用DDL语句定义定时任务,以crontab表达式的形式定义调度策略,后台内嵌quartz进行任务定时调度。

背景:

随着大数据技术在企业应用日益广泛,以及越来越多数据系统的出现解决各种不同的场景问题,基于全景数据的快速查询计算成为了迫切的需求和挑战。目前的主流方式是建立以Hadoop为核心的数据仓库/数据湖,某种程度上解决了异构数据系统及数据分散的问题,但依然有数据归集带来的维护成本和时效损失问题。另外数据开发人员也面临着业务频繁变更和结果快速交付的问题。在这样的挑战下,计算服务化、数据虚拟化提供了很好的解决思路。Moonbox正是基于大数据场景的数据虚拟化,计算服务化的一种实践,设计思想主要体现在以下几个方面:

  • 计算服务化Moonbox提供多种查询接口以及定时任务,将计算资源变成一种服务,终端用户可以自助注册数据源编写SQL实现需求,只需要关心业务逻辑,而不用关心作业如何提交运行的。
  • 数据虚拟化Moonbox提供虚拟表到物理表之间的映射,终端用户无需关心数据的物理存放位置和底层数据源的特性即可操作数据,体验类似操作一个虚拟数据库。
  • 统一入口统一查询语言Moonbox对用户提供统一的SQL语法标准,屏蔽异构数据系统查询语言的差异,用户只需编写SQL即可查询各种数据系统,也可使用SQL进行跨异构数据系统混算,降低多数据系统的学习成本。统一元数据服务Moonbox能够对接多种数据系统,可以拿到各个数据系统数据表的schema信息,Moonbox并不存储schema信息,每次都是实时从数据源获取,所以不存在元数据变更不及时,需要同步更新等问题。Moonbox对外提供统一的元数据服务接口,用户无需为了获取各种数据源的元数据而调用多种接口。统一权限控制每种数据源都有各自特有的安全机制,用户在使用这些数据系统的时候就需要多付出一定的学习成本。Moonbox在逻辑层提供了统一的安全访问机制,在接入时,提供认证登录功能;在查询时,通过拦截分析查询SQL,实现列级别的数据权限控制。如果查询统一从Moonbox接口进入,那么Moonbox就为各种数据源加上了一把安全锁,用户无需再学习各种数据源特有的安全机制。

数据虚拟化

数据虚拟化,是指对于用户或用户程序而言,面对的是统一的交互方式和查询语言,而无需关注数据实际所在的物理库和方言及交互方式(异构系统/异构查询语言)的一种技术。用户的使用体验是面对一个单一数据库进行操作,但其实这是一个虚拟化的数据库,数据本身并不存放于虚拟数据库中。


数据虚拟化软件通常需要具备以下几个能力:

  • 透明访问以统一的方式和语言访问不同的数据源,而不用关心数据源物理位置和特性。
  • 多数据源支持需要将数据源的访问形式和查询语言进行抽象,支持多种异构数据源,同时能够很方便的进行扩展。
  • 分布式并行计算可以以分布式计算方式快速进行跨多异构数据源进行混算。
  • 元数据获取可以通过统一的方式获取底层数据源的元数据信息。
  • 数据安全数据安全包括用户登录认证、授权访问、数据加密、操作审计等。认证和授权是针对用户而言的,加密是从数据本身考虑的,审计从系统角度角度出发的。

Moonbox即定位于上图中的Data Virtualization Layer,并提供了如上所述的能力。让我们来了解一下Moonbox中与之相关的概念。

数据源

Moonbox将系统外部数据的来源统一视为数据源,数据源除了可以是hdfs这种纯存储系统,或者mysql、elasticsearch这种带计算能力的存储系统,还可以是presto等计算引擎。

数据映射

数据映射层实现虚拟表到数据源的映射,从而保证数据虚拟化平台向数据消费者交付正确的数据。同时,数据映射层也屏蔽了底层数据源的物理细节。



Moonbox和数据库一样,提供两级命名空间,分别是数据库和表。虚拟库有两种组织方式:TYPE 1和TYPE 2。

  • TYPE 1此种方式的虚拟库中的虚拟表可以来自不同的源库中的部分源表。此方式类似于Spark SQL中的数据库的组织形式,非常适合按照业务需求将散落在不同的源库中的源表组织到一个虚拟库中。
  • TYPE 2此种方式的虚拟库中的虚拟表来自同一个源库中的所有源表。此种方式类似于Presto中的schema的组织形式,可以快速将源库映射成Moonbox的虚拟库。

View的概念类似于关系型数据库中的逻辑视图,从属于数据库,view基于虚拟表通过SQL定义创建,view也可以基于view创建出嵌套的view。

架构:


Moonbox总体上由四部分组成,分别是客户端、接入层、Grid以及存储计算层。

  • 客户端客户端有如下几种:rest api以restful api的方式提供batch作业提交、查询作业执行状态、取消作业服务。jdbc提供jdbc驱动,可以使用jdbc编程访问, 使用户拥有数据库般的使用体验。odbc提供odbc支持,用户可以使用sas连接moonbox进行数据分析。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的接入,进行数据查询并展示。
  • 接入层接入层包括http server、tcp server和thrift server,实现客户端接入,并进行用户登录认证。
  • 分布式服务层Grid是Moonbox分布式服务层。Grid使用master-slave集群工作模式,支持master主备切换。Grid有Master、Worker、App三种角色:Master负责接收所有的用户请求,根据请求模式(adhoc/batch)将请求调度到合适的App上。Worker向Master注册,负责该节点上App的启动和停止,每个Worker节点可以启动多个不同种类的App。App也会向Master注册,App是真正处理计算的角色,可以是一个Spark App, 也可以是其他自定义的App。
  • 计算/存储层Moonbox默认使用Spark作为计算引擎,将一个常驻的Spark作业称之为一个App, 支持standalone和yarn运行模式。Spark App处理用户发过来的请求,包括用户体系管理操作、权限管理操作、SQL解析、下推优化、执行引擎选择等,并提交真正的计算任务。当计算逻辑可以完全下推到数据源计算时,Moonbox将计算任务直接mapping成数据源的查询语言进行下推计算,以减小启动分布式作业的开销。数据源除了可以是hdfs这种纯存储系统,mysql、elasticsearch这种带计算能力的存储系统,还可以是presto等计算引擎,Moonbox将他们统一视为数据源。

开源地址:https://github.com/edp963/moonbox

相关推荐

Java面试题合集200道!

1.Java中操作字符串都有哪些类?它们之间有什么区别?String、StringBuffer、StringBuilder.String和StringBufer、StringBuilder的区别...

JAVA分布式锁的原理,及多种分布式实现优劣对比分析

引题比如在同一个节点上,两个线程并发的操作A的账户,都是取钱,如果不加锁,A的账户可能会出现负数,正确的方式是对账户acount进行加锁,即使用synchronized关键字,对其进行加锁后,当有线程...

百度Linux C++后台开发面试题(个人整理)

1、C/C++程序的内存分区其实C和C++的内存分区还是有一定区别的,但此处不作区分:1)、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中...

什么是云计算?看这篇就够了(建议收藏)

一、什么是云?云,又称云端,指无数的大型机房或者大型数据中心。二、为什么需要云?1)从用户的角度来讲:传统应用的需求日益复杂,比如需要支持更多的用户,需要更强的计算能力等,为满足这些日益增长的需求,企...

写PHP框架需要具备那些知识?

如果没用过框架,讨论各个框架的内容都没有可讨论性,想自己写个框架涉及到的内容很多,个人觉得自己写一个框架对自己的逻辑思维,开发架构以及这门语言都有质的提升。可以参照其他框架的源代码,仅仅是看他们的思路...

不允许还有Java程序员不了解BlockingQueue阻塞队列的实现原理

我们平时开发中好像很少使用到BlockingQueue(阻塞队列),比如我们想要存储一组数据的时候会使用ArrayList,想要存储键值对数据会使用HashMap,在什么场景下需要用到Blocking...

Java性能优化指南—缓存那些事

由于笔者自身水平有限,如果有不对或者任何建议欢迎批评和指正本文预计阅读时间10分钟,分为前言、填坑两部分,主要包含缓存的基本使用到高级应用场景的介绍一、前言在处理高并发请求时,缓存几乎是无往不利的利器...

卓象科技:Nosql的介绍以及和关系型数据库的区别

Nosql介绍NoSQL(NotOnlySQL),泛指非关系型数据库。Nosql的全称是NotOnlySql,这个概念很早就有人提出,在09年的时候比较火。Nosql指的是非关系型数...

腾讯一面凉经(一面竟然就问了2小时,什么情况?)

这次一面感觉是在打心理战,哥们自己的心里防线基本是被击溃,面到怀疑人生的程度,所以过程感觉不是太好,很多题哥们自己也感觉没答好,要么答得“缺胳膊少腿”,要么就是“画蛇添足”。先是聊项目,从项目的架构设...

我凭借这份pdf,最终拿到了阿里,腾讯,京东等八家大厂offer

怎样才能拿到大厂的offer,没有掌握绝对的技术,那么就要不断的学习我是如何笑对金九银十,拿到阿里,腾讯等八家大厂的offer的呢,今天分享我的秘密武器,美团大神整理的Java核心知识点,面试时面试官...

高并发 异步解耦利器:RocketMQ究竟强在哪里?

本文带大家从以下几个方面详细了解RocketMQ:RocketMQ如何保证消息存储的可靠性?RocketMQ如何保证消息队列服务的高可用?如何构建一个高可用的RocketMQ双主双从最小集群?Rock...

阿里最新Java架构师成长笔记开源

下面先给大家上一个总的目录大纲,基础的东西就不进行过多的赘述,我们将会从JVM说起,同时由于每篇的内容过多,我们也只说重点,太过基础的内容谁都会,我就不多敲字浪费大家的时间了!JVM多线程与高并发Sp...

程序员失业2个月找不到工作,狂刷了5遍这份pdf终获字节跳动offer

写在前面1月初失业,找了近2个多月的工作了,还没找到心仪的工作,感觉心好慌,不知道该怎么办了?找不到工作的时候压力很大,有人说自信会很受打击,还有人说会很绝望,是人生的低谷……尽管很多时候我们自己知道...

Spring AI 模块架构与功能解析

SpringAI是Spring生态系统中的一个新兴模块,专注于简化人工智能和机器学习技术在Spring应用程序中的集成。本文将详细介绍SpringAI的核心组件、功能模块及其之间的关...

Nginx从入门到精通,超详细整理,含项目实战案例|运维必学

Nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服务器。因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名。Nginx可以做静态HT...

取消回复欢迎 发表评论: