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

  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

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

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

  1. es对几十亿数据能达到秒级响应吗_万亿数据下的多维实时分析系统,如何做到亚秒级响应...

    导语 当业务发展到一定规模,实时数据仓库是一个必要的基础服务.从数据驱动方面考虑,多维实时数据分析系统的重要性也不言而喻.但是当数据量巨大的情况下,拿腾讯看点来说,一天上报的数据量达到万亿级的规模,要 ...

  2. 使用EMR Spark Relational Cache跨集群同步数据

    背景 Relational Cache是EMR Spark支持的一个重要特性,主要通过对数据进行预组织和预计算加速数据分析,提供了类似传统数据仓库物化视图的功能.除了用于提升数据处理速度,Relati ...

  3. 华为大数据战略_华为大数据开源战略部部长陈亮 - Apache CarbonData,实现大数据即席查询秒级响应...

    1.实现大数据即席查询秒级响应 2.Liang Chen / 陈 亮 华为大数据开源开发部Leader Apache CarbonData PMC & CommitterEmail:chenl ...

  4. Quick BI产品核心功能大图(四):Quick引擎加速--十亿数据亚秒级分析

    简介: 随着数字化进程的深入,数据应用的价值被越来越多的企业所重视.基于数据进行决策分析是应用价值体现的重要场景,不同行业和体量的公司广泛依赖BI产品制作报表.仪表板和数据门户,以此进行决策分析. 在 ...

  5. 大数据即席查询工具——秒级响应

    报表是企业管理的基本措施和途径,是企业的基本业务要求,也是实施 BI战略的基础.报表可以帮助企业访问.格式化数据,并把数据信息以可靠和安全的方式呈现给使用者.在企业管理过程中,报表往往都会通过一些简洁 ...

  6. 亿级数据多条件组合查询——秒级响应解决方案

    1 概述 组合查询为多条件组合查询,在很多场景下都有使用.购物网站中通过勾选类别.价格.销售量范围等属性来对所有的商品进行筛选,筛选出满足客户需要的商品,这是一种典型的组合查询.在小数据量的情况下,后 ...

  7. Quick引擎加速 - 十亿数据亚秒级分析

    随着数字化进程的深入,数据应用的价值被越来越多的企业所重视.基于数据进行决策分析是应用价值体现的重要场景,不同行业和体量的公司广泛依赖BI产品制作报表.仪表板和数据门户,以此进行决策分析. 在利用BI ...

  8. MySQL 单表亿级数据查询优化,达到秒级响应

    1.最近应单用户画像业务需求,需要满足6个月单用户的天粒度收视情况,呈现近半年的收视趋势图.每天数据量大概在150w条左右,一个月大概4500w,6个月大概2.7亿条.要满足大数据量的秒级响应.由于系 ...

  9. 用于追踪认知任务期间的亚秒级脑动态的高密度脑电

    <本文同步发布于"脑之说"微信公众号,欢迎搜索关注~~> 这项工作为社区提供了高密度脑电图(HD-EEG, 256个通道)数据集,这些数据集是在无任务和任务相关范式下收 ...

最新文章

  1. 【数据结构】二叉树的应用。
  2. File类3 文件读取
  3. 在线安装非GPU版的tensorflow流程
  4. Appium——appium之mac环境安装
  5. QPainter使用整理
  6. SpringCloud Ribbon
  7. SQL点滴系列之删除数据(五)
  8. CI框架 CodeIgniter 伪静态 htaccess设置和Nginx伪静态方法
  9. Flask组件之Flask-SQLAlchemy
  10. win7系统可以禁止的服务器,win7旗舰版怎么禁用不必要的系统服务项
  11. 磁珠法RNA pull down试剂盒、蛋白质-核酸相互作用
  12. 实验操作:ELK日志分析系统--------------------------未完待续
  13. 如何实现数据持久性保障机制
  14. wifi情况下使用fiddler_如何对手机http进行抓包?Fiddler工具超好用
  15. 性能测试线上培训班怎么选 3点教你在线选好培训班
  16. Wireshark分析网络慢
  17. oracle中排序--拼音、笔画、偏旁部首
  18. python modis数据拼接_python调用HEG工具批量处理MODIS数据的方法及注意事项
  19. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数017·point点函数
  20. Head Above Water

热门文章

  1. 桥梁在线计算机监测系统,桥梁在线监测系统
  2. Java开发中数据类型之间的转换
  3. python get_len_Python类,特殊方法, __getitem__,__len__, __delitem__
  4. shell把mysql每句导出_shell实现,将mysql每个存储过程导出为单个文件_MySQL
  5. 手机相机里面的m_荣耀V30 PRO详细评测:Matrix Camera相机矩阵开启5G视频时代
  6. qt布局嵌套_QDockWidget嵌套布局详解-实现Visual Studio布局
  7. 开设计算机应用基础这门学科意义,计算机应用基础与专业课程整合思考.doc
  8. java将图片上传数据库_〔技巧实例〕轻松实现将上传图片到数据库
  9. 什么?船开上高架了!
  10. 印度18岁天才少年,造出“全球最小卫星”,实力不容小觑!