跳转到主要内容
工程的博客

可伸缩的分区处理原生云架构在Apache 2.1火花

分享这篇文章

Apache 2.1指日可待:火花社区正在经历发布候选投票过程。这篇文章讨论了即将发布的最重要的一个特性:可伸缩的分区处理。

火花SQL允许您查询tb的数据用一个工作。通常,用户只需要读取总数的一小部分数据,例如在旧金山扫描用户的活动,而不是整个世界。他们这样做一般通过分区表的数据文件过滤等领域日期或国家。然后火花SQL使用这个分区信息“删除”或跳过文件与用户的查询。然而,在以往的火花版本第一次读一个表可能会很慢,如果分区的数量非常大,因为火花必须首先发现分区存在。

在火花2.1中,我们大大提高查询的初始延迟联系表分区的一小部分。在某些情况下,查询了几十分钟一个新的火花集群现在执行在几秒钟内。我们的改进减少表内存开销,并使SQL经验开始冷与“热”与表元数据集群完全缓存在内存中。

火花2.1还统一数据源和蜂巢表的分区管理功能。这意味着现在支持两种类型的表相同的分区DDL操作,如增加、删除和重新定位特定的分区。

火花表管理

为了更好地理解为什么存在的延迟问题,让我们先解释表管理工作在早期版本的火花。在这些版本中,火花在目录支持两种类型的表:

  1. 数据源表的首选格式表中创建的火花。这种类型的表可以定义动态通过保存DataFrame文件系统,如df.write.partitionBy(“日期”).saveAsTable (“my_metrics”),或者通过一个CREATE TABLE语句,如。使用镶花创建表my_metrics分区按日期在之前的版本中,火花发现数据源表从文件系统元数据在内存中缓存。这个元数据包括分区和文件的列表统计在每个分区。在内存中缓存后,表分区可以修剪很快处理传入的查询。
  2. 为用户来自Apache蜂巢部署,火花SQL还可以读取目录表定义的蜂巢并行转换器。在可能的情况下,火花透明地将这种蜂巢表数据源格式以利用IO性能改善火花SQL。火花,这在内部通过阅读从蜂巢metastore表和分区元数据在内存中缓存。

尽管这个策略提供了一次最优性能表元数据缓存在内存中,它也有两个缺点:第一,初始查询的表被阻塞,直到火花加载所有分区表的元数据。对于一个大分区表,递归扫描发现文件的文件系统的元数据初始查询可以花很多时间,尤其是当数据存储在S3等云存储。第二,所有的元数据表需要物化内存驱动过程,增加内存压力。

这个问题我们已经看到了很多从我们的客户和其他用户大规模的火花。虽然有时候可能避免初始查询延迟通过阅读文件直接与其他火花api,我们想让表性能规模没有解决方法。2.1火花,砖与VideoAmp合作来消除这种开销和数据源的统一管理和蜂巢格式表。

VideoAmp已经从初始使用火花SQL的数据平台,从1.1火花。bob体育客户端下载作为一个需求方面平台的实时数字广告bob体育客户端下载市场,他们每天接收和仓库数十亿的事件。VideoAmp现在与成千上万的分区表。

迈克尔·奥尔曼(VideoAmp)描述他们的参与这个项目:

火花2.1之前,获取最大的元数据表花了分钟,必须重做每次添加了一个新的分区。火花2.0的发布后不久,我们开始一个新的原型方法基于延迟分区加载元数据。同时,我们接近试探我们的创意火花的开发者社区。我们提交我们的一个原型作为拉请求火花源回购,并开始我们的合作,生产水平的可靠性和性能。

性能基准测试

深入了解技术细节之前,我们首先展示查询延迟改进了我们的一个内部指标表,拥有50000个分区(在砖,我们相信吃我们自己的狗粮)。分区表的日期和度量类型,大致如下:

创建metricData (价值长整型数字,维度结构<>,日期字符串,度量字符串)使用拼花选项(路径“dbfs: / mnt /道路/ / data-root ')分区通过(日期、指标)</>

我们用一个小砖集群与8个工人,32核心,和250 gb的内存。我们运行一个简单的聚合查询超过一天,一周,一个月的数据,评估时间第一个结果新推出的火花集群:

选择度规,avg(价值)metricData在哪里日期> =“2016-11-01”日期可伸缩的分区管理启用火花2.1,阅读一天的价值需要一些数据10秒。这时间线性扩展数量分区了查询。了解贡献时间,我们将其分解之间的时间花在查询计划火花工作执行:
免费试着砖
看到所有工程的博客的帖子