Spark Relational Cache实现亚秒级响应的交互式分析

本次分享主要分为以下四个方面:

  1. 项目介绍
  2. 技术分析
  3. 如何使用
  4. 性能分析

一、项目介绍

项目背景

阿里云EMR是一个开源大数据解决方案,目前EMR上面已经集成了很多开源组件,并且组件数量也在不断的增加中。EMR下层可以访问各种各样的存储,比如对象存储OSS、集群内部自建的HDFS以及流式数据等。用户可以利用EMR处理海量数据和进行快速分析,也能够支持用户在上面做机器学习以及数据清洗等工作。EMR希望能够支撑非常大的业务数据量,同时也希望能够在数据量不断增长的时候,能够通过集群扩容实现快速数据分析。

云上Adhoc数据分析痛点

在云上做Adhoc数据分析的时候,很难实现随着数据量的增长使得查询的延迟不会大幅度增加。虽然目前各种引擎不断出现,并且某些引擎在一些场景下运行很快,但是数据量变大之后,查询响应速度难免有所下降,因此希望在比较统一的平台之上获得较好的性能。与此同时,阿里云也希望能够提供云原生的解决方案。Spark是目前工业界使用较多的计算引擎,应用非常广泛,但是在处理Adhoc上还是存在很多不足之处,因此阿里云在Spark上做了大量优化,帮助用户满足Adhoc查询的需求。因此就会涉及到缓存方案,虽然Spark中很早就有了缓存机制,但想要满足云上Adhoc场景却存在很多不足之处,因此阿里云会在Spark上做大量优化,帮助用户优化Adhoc查询速度。但是如果把数据放到内存中,将所有数据全部用作缓存可能也不足够,因此就催生出了Spark Relational Cache。

Spark Relational Cache

用户的SQL请求过来之后,到了Spark上面,会需要比较长的时间在数据来源上进行处理,这里下层的存储包括集群的HDFS以及远端的JindoFS和阿里云OSS等。当有了Spark Relational Cache之后,查询过来之后会查询是否能够用到存储在Relational Cache中缓存的数据,如果不能用到则会转发到原生路径上,如果能用到则会用非常快的速度从缓存里面将数据读取出来并将结果返回给用户。因为Relational Cache构建在高效存储之上,通过用户的DDL将数据变成Relational Cache。

Spark Relational Cache特点

Spark Relational Cache希望能够达到秒级响应或者亚秒级响应,能够在提交SQL之后很快地看到结果。并且也支持很大的数据量,将其存储在持久化的存储上面,同时通过一些匹配手段,增加了匹配的场景。此外,下层存储也使用了高效的存储格式,比如离线分析都会使用的列式存储,并且对于列式存储进行了大量优化。此外,Relational Cache也是用户透明的特性,用户上来进行查询不需要知道几个表之间的关系,这些都是已经有过缓存的,不需要根据已有的缓存重写Query,可以直接判断是否有可以使用的Relational Cache,对于一个厂商而言只需要几个管理员进行维护即可。Spark Relational Cache支持自动更新,用户不需要担心因为插入了新的数据就使得Cache过时导致查询到错误的数据,这里面为用户提供了一些设置的规则,帮助用户去进行更新。此外,Spark Relational Cache还在研发方面,比如智能推荐方面进行了大量探索,比如根据用户SQL的历史可以推荐用户基于怎样的关系去建立Relational Cache。

二、技术分析

阿里云EMR具有很多核心技术,如数据预计算、查询自动匹配以及数据预组织。

数据预计算

数据在很多情况下都有一个模型,雪花模型是传统数据库中非常常见的模型,阿里云EMR添加了Primary Key/Foreign Key的支持,允许用户通过Primary Key/Foreign Key明确表之间的关系,提高匹配成功率。在数据预计算方面,充分利用EMR Spark加强的计算能力。此外,还通过Data Cube数据立方来支持多维数据分析。

执行计划重写

这部分首先通过数据预计算生成预计算的结果,并将结果存储在外部存储上,比如OSS、HDFS以及其他第三方存储中,对于Spark DataSource等数据格式都支持,对于DataLake等热门的存储格式后续也会添加支持。在传统数据库中有类似的优化方案,比如物化视图方式,而在Spark中使用这样的方式就不合适了,将逻辑匹配放在了Catalyst逻辑优化器内部来重写逻辑执行计划,判断Query能否通过Relational Cache实现查询,并基于Relational Cache实现进一步的Join或者组合。将简化后的逻辑计划转化成为物理计划在物理引擎上执行。依托EMR Spark其他的优化方向可以实现非常快速的执行结果,并且通过开关控制执行计划的重写。

自动查询匹配

这里有一个简单的例子,将三个表简单地Join在一起,经过过滤条件获得最终的结果。当Query过来之后先判断Spark Relational Cache是否能够符合需求,进而实现对于预先计算好的结果进行过滤,进而得到最终想要的结果。

数据预组织

如果将数十T的数据存在存储里面,那么从这个关系中获取最终的结果还需要不少的时间,因为需要启动不少的Task节点,而这些Task的调度也需要不少的开销,通过文件索引的方式将时间开销压缩到秒级水平,可以在执行时过滤所需要读取的文件总量,这样大大减少了任务的数量,这样执行的速度就会快很多。因为需要让全局索引变得更加有效,因此最好让数据是排过序的,如果对于结构化数据进行排序就会知道只是对于排列在第一位的Key有一个非常好的优化效果,对于排列在后面的Key比较困难,因此引入了ZOrder排序,使得列举出来的每个列都具有同等的效果。同时将数据存储在分区表里,使用GroupID作为分区列。

三、如何使用

DDL

对于简单的Query,可以指定自动更新的开关,并起一个名字方便后续管理。还可以规定数据Layout的形式,并最终通过SQL语句来描述关系,后续提供给用户WebUI一样的东西,方便用户管理Relational Cache。

数据更新

Relational Cache的数据更新主要有两种策略,一种是On Commit,比如当依赖的数据发生更新的时候,可以将所有需要添加的数据都追加写进去。还有一种默认的On Demand形式,用户通过Refresh命令手动触发更新,可以在创建的时候指定,也可以在创建之后手工调整。Relational Cache增量的更新是基于分区实现的,后续会考虑集成一些更加智能的存储格式,来支持行级别的更新。

四、性能分析

Cube构建

阿里巴巴的EMR Spark对于1T数据的构建时间只需要1小时。

查询性能

在查询性能方面,SSB平均查询耗时,无Cache时查询 时间按Scale成比例增加,Cache Cube后始终保持在亚秒级响应。


阿里云双11领亿元补贴,拼手气抽iPhone 11 Pro、卫衣等好礼,点此参与:http://t.cn/Ai1hLLJT

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里巴巴 Kubernetes 应用管理实践中的经验与教训

导读:云原生时代,Kubernetes 的重要性日益凸显。然而,大多数互联网公司在 Kubernetes 上的探索并非想象中顺利,Kubernetes 自带的复杂性足以让一批开发者望而却步。本文中,阿里巴巴技术专家孙健波在接受采访时基于阿里…

那些被大数据时代抛弃的人

作者 | 衣公子来源 | 衣公子的剑(ID:yigongzidejian)前言2000年,微软如日中天。有人问比尔盖茨(Bill Gates)对于IT行业的看法。盖茨说,挺好的,就是有点noise。 noise,本意…

秒杀场景_多线程异步抢单队列分析与实现_02

文章目录1. 实体2. Service改造3. 启动类1. 实体 package com.gblfy.entity;import java.io.Serializable;/*** 用户排队抢单信息实体*/Data public class SkillEntity implements Serializable {private Long productId;private String userId; }2. Service改造 SkillGoodSe…

AI赋能DevOps:数据驱动的全栈工程师实践

DevOps是什么? 对于传统的软件研发而言,开发,测试,运维,运营,有不同的岗位进行分工协作,以保证质量和专业度,同一件事情,依赖不同岗位的排期、沟通、协调,效率…

阿里HBase高可用8年“抗战”回忆录

2017年开始阿里HBase走向公有云,我们有计划的在逐步将阿里内部的高可用技术提供给外部客户,目前已经上线了同城主备,将作为我们后续高可用能力发展的一个基础平台。本文分四个部分回顾阿里HBase在高可用方面的发展:大集群、MTTF&a…

使用apache POI把list集合里面的实体写入Excel(java)

一、导入maven依赖包 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId>&…

一文带你了解混淆矩阵!

来源 | 数据科学CLUB封图 | CSDN 下载自视觉中国混淆矩阵是一个表&#xff0c;经常用来描述分类模型(或“分类器”)在已知真实值的一组测试数据上的性能。混淆矩阵本身比较容易理解&#xff0c;但是相关术语可能会令人混淆。让我们从一个二进制分类器的混淆矩阵示例开始(尽管它…

从0到千万DAU,这5年闲鱼架构如何演进?

阿里妹导读&#xff1a;闲鱼品牌创立于14年阿里的某个茶水间&#xff0c;从0开始到现在千万DAU&#xff0c;5年时间里闲鱼见证了闲置物品从线下到线上交易的转移。而线上交易的繁荣&#xff0c;则需要业务架构做相应的调整、演进才能支撑业务的快速发展。本文主要通过介绍闲鱼从…

初创公司5大Java服务困局,阿里工程师如何打破?

阿里妹导读&#xff1a;初创公司遇到的每一个问题都可能攸关生死。创业之初更应该总结行业的常见问题&#xff0c;对比方案寻找最优解。阿里巴巴地图技术专家常意在技术圈摸爬滚打数年&#xff0c;接触了各式各样的Java服务端架构。服务端问题见得多了&#xff0c;也就更能分辨…

Navicat for MySQL连接MySQL数据库时各种错误解决

一 、2058错误 通过命令行进入MySQL&#xff0c;执行如下命令&#xff1a; ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY root截图&#xff1a; 二、1251错误 通过命令行进入MySQL&#xff0c;执行如下命令&#xff1a; ALTER USER rootlocalhost I…

构建灵活工作方式 戴尔最智能商用客户端产品线全面上市

戴尔Latitude、Precision和OptiPlex产品组合再次全面升级&#xff0c;带来更高水平生产力 2020年6月12日&#xff0c;随着“新基建”首次被写入《政府工作报告》&#xff0c;数字经济将成为释放经济新动能的最重要途径。在企业加速数字化转型的过程中&#xff0c;生产力转型是…

秒杀场景_解决秒杀超卖问题_04

文章目录一、商品微服务改造二、秒杀微服务改造2.1. SkillGoodService 改造2.2. MutilThreadOrder 改造一、商品微服务改造 SkillGoodService改造 package com.gblfy.service;import com.gblfy.dao.SkillGoodRepository; import com.gblfy.entity.SkillGood; import lombok.R…

初识 Knative: 跨平台的 Serverless 编排框架

Knative 是什么 Knative 是 Google 在 2018 的 Google Cloud Next 大会上发布的一款基于 Kubernetes 的 Serverless 框架。Knative 一个很重要的目标就是制定云原生、跨平台的 Serverless 编排标准。Knative 是通过整合容器构建(或者函数)、工作负载管理(和动态扩缩)以及事件模…

python使用PyMysql连接MySQL实现增删改查

文章目录一、安装PyMysql&#xff1a;1.方式一&#xff1a;使用命令行2.方式二&#xff1a;通过PyCharm编译器二、操作MySQL数据库步骤1. 使用import导入相应的类2.获得数据库的连接3.创建游标对象4.执行SQL语句5.关闭数据库连接三、案例1. 查询单条数据2. 查询多条数据3.创建数…

一分钟解决 Github 访问慢

文章目录1. 获取域名对应的ip2. 复制ip3. 配置hostsgithub.com对应的ip有多个选一个响应快的即可&#xff0c;但是一直在变&#xff0c;用的时候&#xff0c;设置一次即可 1. 获取域名对应的ip https://tool.chinaz.com/dns/?type1&hostgithub.com&ip 2. 复制ip 3. …

做一个高一致性、高性能的Flutter动态渲染,真的很难么?

Flutter动态模板渲染架构升级 ​ 最近小组在尝试使用集团DinamicX的DSL&#xff0c;通过下发DSL模板&#xff0c;实现Flutter端的动态化模板渲染。我们解决了性能方面的问题后&#xff0c;又面临了一个新的挑战——渲染一致性。我们该如何在不降低渲染性能的前提下&#xff0c…

数据科学产业中哪些架构最热门?本文为你盘点了 5 款!

作者 | Sai Krishna译者 | 火火酱&#xff0c;责编 | Carol封图 | CSDN 付费下载自视觉中国地球上的数据量每分每秒都在增加&#xff0c;海量的数据源源不断地从四面八方涌入各种机构组织&#xff0c;而这些数据最终或许会成为能够指引我们做出战略决策的宝贵财富。这就是数据科…

面向云原生的混沌工程工具-ChaosBlade

作者 | 肖长军&#xff08;穹谷&#xff09;阿里云智能事业群技术专家 导读&#xff1a;随着云原生系统的演进&#xff0c;如何保障系统的稳定性受到很大的挑战&#xff0c;混沌工程通过反脆弱思想&#xff0c;对系统注入故障&#xff0c;提前发现系统问题&#xff0c;提升系…

centOS docker容器的安装

文章目录一、docker安装步骤1.卸载旧版本2.安装依赖3.添加镜像源4.查看仓库中的所有docker版本5.安装docker6.启动docker7.设置开机自启动docker8.查看docker是否安装成功9.卸载docker一、docker安装步骤 提示&#xff1a;安装之前可以使用命令&#xff1a;yum check-update检查…

泡着枸杞写bug的三流程序员凭什么逆袭到一线大厂?

大多数互联网的从业者都有一个梦想&#xff1a;进大厂。因为不仅可以享受较好的福利待遇&#xff0c;也能与更优秀的人一起共事&#xff0c;获得更专业、更快速的成长。最近经常有朋友提及想要入门编程学习&#xff0c;该如何学习&#xff1f;关于编程学习&#xff0c;各种语言…