我们兴奋的宣布Databricks缓存的通用可用性,作为统一分析平台一部分的 Databricks 运行时特性,它可以将Spark工作负载的扫描速度提升10倍,并且这种改变无需任何代码修改。
1、在本博客中,我们将介绍这个新特性的两个主要特点:易用性和性能。
2、不同于Spark显示缓存,Databricks缓存能够自动地为用户缓存热输入数据,并且在集群中负载均衡。利用NVMe SSD硬件的先进性能和最先进的压缩技术,它能够将交互式和报告工作的负载性能提升10倍。更重要的是它缓存的数据量是Spark的缓存数量的30多倍。

Spark显式缓存

Spark中一个关键特性是显式缓存。它是一个多功能的工具,因为它可以用于存放任意计算结果(包括输入和中间结果),以便它们可以重复使用。例如,迭代机器学习算法的实现可以选择缓存特征化数据,并且每次迭代将从内存中读取这些数据。
一种特别重要和广泛使用的方式就是缓存扫描操作的结果。通过这种方式可以避免用户低速率地读取远程数据。因此,许多打算重复运行相同或类似工作量的用户决定花费额外的开发时间来手动优化他们的应用程序,通过指示Spark确切缓存什么文件以及何时进行缓存,从而实现“显式缓存”。
对于Spark缓存有如上功能,它还有一些缺点。首先,把数据保存在主内存中时,它需要占用内存空间,而这些空间能够更好用于其他用途,例如,用于Shuffle或者哈希表。其次,当数据缓存在磁盘,读取需要反序列化--该过程太慢以至于无法充分利用NVMe SSD通常所提供的高读取带宽。
最后,由于需要提前并详细指定需要缓存的数据,这个对于那些想交互地导出数据或者创建报告是一个挑战。虽然Spark缓存提供数据工程师所有调优开关,数据科学经常发现推断这些内存太困难了,特别是在多租户的设置中,工程师仍然需要尽快返回结果以保证迭代时间更短。

NVMe SSD面临的调整

固态硬盘或者SSD已经成为标准存储技术。尽管最初以其随机搜索低延迟闻名,但在过去的几年中,SSD也大幅度提供了读写吞吐量。
NVMe接口创建用于克服SATA和ARCI设计的极限,并且允许最大可能使用现代SSD所提供出色的性能。这包括利用基于闪存存储设置的内部并行性和极低读延迟的能力。NVMe使用多种长命令队列以及其他增强功能,允许驱动器高效处理海量并发请求。这种面向并行的架构完美地补充了现代多核CPU和如Spark数据处理系统的并行线。
通过NVMe接口,SSD比低速磁盘驱动器在属性和性能上更加接近主内存。因此它们是存储缓存数据的理想地方。
然而为完全利用NVMe SSD的潜力,仅仅把远程数据复制到本地存储是远远不够。我们在AWS i3实例所进行的实验表明当从本地SSD读取常用文件格式时,它只是使用一部分可用的I/O带宽。
上图显示了在Spark针对EC2 i3实例类型的本地NVMe SSD的I/O带宽利用率。根据图示,现有数据格式不能充分利用I/O带宽,CPU密集解码速度无法跟上SSD的速度。

自适应运行

当设计Databricks缓存时,我们不仅关注于实现优化的读性能,并且关注于创建一种“自适应运行”的方案,该方案无需用户任何参与。该缓存考虑到:
1、自动选择数据缓存----无论何时访问远程文件时,该数据转码副本会立即存放到缓存中
2、替换长时间未使用的数据----当磁盘空间不足时,缓存自动删除最近最少使用的数据
3、负载均衡----缓存的数据均匀地分发到集群的所有节点上,并且自动扩展和/或调整不同节点不均匀使用情况
4、数据安全----在缓存数据通过同样的方式与临时文件保持加密,例如Shuffle文件
5、数据更新----缓存能够自动发现在远程地方文件的增加和删除,并且显示数据最新的状态
从Databricks运行时3.3以来,在AWS i3实例类型中所有集群都预置并默认启用Databricks内存。由于这种实例类型具有较高的写入吞吐量,数据能够转码并保存在缓存中,而无需降低读取远程数据的查询性能。喜欢选择其他类型工作节点的用户可以使用Spark配置来启用缓存(请参考文档以了解更多细节)。
对于那些需预先缓存所需要数据的用户,我们实现了CACHE SELECT命令。它将提供选择部分数据装载到缓存中。用户可以指定垂直(如:选择列)或者水平(如:满足查询条件的行)切片数据保存在缓存中。

性能

为了充分利用NVMe SSD,不是采取直接缓存输入的“原始数据”,而是新功能会自动将数据转换为高度优化新的临时磁盘缓存格式,该功能提供了出色的解码速度,从而获得了更佳的I/O带宽利用率。这种转码是异步操作,从而把数据加载到缓存的查询开销降低到最小。
增强读取性能(在前面所提到的通常在访问远程数据避免高延迟的能力)导致了各种查询速度取得了显著的提升。例如,在如下TPC-DS查询的子集,相对于从AWS S3读取Parquet数据,我们看到在每个简单查询都取得了持续的改进,并且在查询53中速度有5.7倍的提升。
来自于我们私人测试程序的一些客户工作中,我们看到性能有10倍的提升。

对比Spark缓存和Databricks缓存

Spark缓存和Databricks缓存可以搭配使用,事实上,它们之间相得益彰:Spark缓存提供存储任意中间计算结果数据的能力,而Databricks缓存提供了对输入数据提供自动和出色的性能。
在我们的实验中,Databricks缓存相对于Spark缓存的DISK_ONLY读模式达到了4倍的速度。对比MEMORY_ONLY模式,Databricks缓存仍然提供了3倍的加速,而且还保持了较小的内存占用。

Databricks缓存配置

对于运行Databricks运行时3.3+版本的所欲AWS i3实例类型,对于所有Parquet文件缓存选择默认开启,并且缓存功能也可以与Databricks delta无缝协作。
要在其他Azure或AWS实例类型中使用新缓存,在集群配置中需要设置如下配置参数:
 spark.databricks.io.cache.enabled true
spark.databricks.io.cache.maxDiskUsage "{DISK SPACE PER NODE RESERVED FOR CACHED DATA}"
spark.databricks.io.cache.maxMetaDataCache "{DISK SPACE PER NODE RESERVED FOR CACHED METADATA}"

结论

Databricks缓存为Databricks用户提供了大量好处--无论是易用性还是查询性能。它可以与Spark缓存进行混合搭配结合,使用最优的工具来完成任务。随着即将更进一步的性能提升和对其他数据格式的支持,Databricks缓存将成为各种工作负载的主要工具。
将来,我们讲发布更多性能提升和扩展支持其他文件格式的功能。
要尝试此新功能,请立即在我们统一分析平台选择一个i3实例类型的集群。
 

Databricks缓存提升Spark性能--为什么NVMe固态硬盘能够提升10倍缓存性能(原创)的更多相关文章

  1. NVMe固态硬盘工具箱使用说明

    https://www.bilibili.com/read/cv562989/ 浦科特NVMe固态硬盘工具箱使用说明 数码 2018-6-7 687阅读7点赞3评论 浦科特已经推出针对NVMe固态硬盘 ...

  2. 一文看懂SATA和NVMe固态硬盘用起来有何区别?

    本文摘自:https://www.sohu.com/a/203688929_615464 NVMe固态硬盘正在逐步扩张,而包括三星.东芝在内的大厂并没有停止SATA固态硬盘新品的研发.到底那种固态硬盘 ...

  3. ubuntu 开机进入grub rescue> 解决办法(nvme固态硬盘)

    起因: 我是在windows下格式化了ubuntu的盘,然后重新安装ubuntu就出现了这种问题.卸载ubuntu的正确姿势,要去查一下,千万不要直接格式化. 解决方法: 1.  先使用ls命令,找到 ...

  4. 使用Apache Spark 对 mysql 调优 查询速度提升10倍以上

    在这篇文章中我们将讨论如何利用 Apache Spark 来提升 MySQL 的查询性能. 介绍 在我的前一篇文章Apache Spark with MySQL 中介绍了如何利用 Apache Spa ...

  5. Web 应用性能提升 10 倍的 10 个建议

    转载自http://blog.jobbole.com/94962/ 提升 Web 应用的性能变得越来越重要.线上经济活动的份额持续增长,当前发达世界中 5 % 的经济发生在互联网上(查看下面资源的统计 ...

  6. 把WinXP装进内存 性能飚升秒杀固态硬盘

    现在用户新配置的电脑,内存很少有小于2GB的,配置4GB内存的朋友也有不少.容量如此大的内存,我们在使用电脑的日常操作中绝对用不完.而目前制约系统性能最大的瓶颈就是硬盘的传输速度,所以,这里教你怎么把 ...

  7. M.2接口NVMe协议的固态硬盘读写速度是SATA接口的两倍

    原文:https://www.sohu.com/a/203688929_615464 中午走路的时候,同事说的,M 2 nvme接口的更快. 树莓派开发板可以跑linux . ------------ ...

  8. 固态硬盘寿命实测让你直观SSD寿命!--转

    近年来,高端笔记本及系列上网本越来越多的采用固态硬盘来提升整机性能,尽管众所周知固态硬盘除 了在正常的使用中带来更快速度的体验外,还具有零噪音.不怕震动.低功耗等优点,但大家对固态硬盘的寿命问题的担忧 ...

  9. 机械硬盘和ssd固态硬盘的原理对比分析

    固态硬盘和机械硬盘的区别 机械硬盘 磁头是不是直接和盘片接触的呢 磁盘中有几个盘片 机械硬盘的工作原理 固态硬盘的寻址方式 SMR叠瓦式真的比PMR优秀吗 固态硬盘 主控芯片 闪存颗粒 缓存单元 固态 ...

随机推荐

  1. jq传统火车轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. C# 知识回顾 - Lambda

    序 它是第十一个希腊字母,一个拥有失意.无奈.孤独.低调等含义的流行符号,也指示一款称为"半条命"的游戏. 不过,这次我所讲的是 C# 中的 Lambda. 目录 Lambda 简 ...

  3. shiro真正项目中的实战应用核心代码!!!

    欢迎转载!!!请注明出处!!! 说道shiro的学习之路真是相当坎坷,网上好多人发的帖子全是简单的demo样例,核心代码根本没有,在学习过程中遇到过N多坑. 经过自己的努力,终于整出来了,等你整明白之 ...

  4. NowCoderWannafly挑战赛5-可编程拖拉机比赛-向上取整和向下取整函数

    可编程拖拉机比赛 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 65536K,其他语言131072K64bit IO Format: %lld 题目描述 "这个比赛,归根结底 ...

  5. 三维dp&codeforce 369_2_C

    三维dp&codeforce 369_2_C 标签: dp codeforce 369_2_C 题意: 一排树,初始的时候有的有颜色,有的没有颜色,现在给没有颜色的树染色,给出n课树,用m种燃 ...

  6. flume1.8 Channel类型介绍(四)

    1. Flume Channel Channels是events在agent上进行的存储库.Source添加events,Sink移除events. 1.1 Memory Channel(内存Chan ...

  7. angular2 表单验证

    模版式表单 (1) angular遇到form自动接管,不想自动接管,添加ngNoForm,当标签为div时,但想被表单接管,添加ngForm; (2) ngForm可以被模版本地变量引用,以便在模版 ...

  8. 迈向c++的一次尝试

    从C到C++说着容易做起来也不难,今天做一下尝试. ★:题目介绍:今天是一次尝试所以先从简单的题开始. ★:试题分析:由题可了解到本题目的是要做到由一个数字到一个字符串的转变. 题目简单是由于它只是让 ...

  9. DEDECMS系统安全篇之移data目录到Web根目录以外听语音

    http://jingyan.baidu.com/article/ad310e80aeb0971849f49e8e.html 主要三个步骤: 1./include/common.inc.php 2.还 ...

  10. HTML 5 video 视频标签全属性详解

    http://www.cnblogs.com/kiter/archive/2013/02/25/2932157.html 现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theor ...