Spark 1.6 发布:引入 Dataset 接口

  • 侠天

2016 年 1 月 5 日

话题:大数据语言 & 开发架构SparkAI

今天,Databricks 宣布发布 Apache Spark 1.6! 这也是开源社区开发的一个里程碑,2015 年代码贡献者达到 1000 人,是 2014 一整年的两倍,见下图。

接下来揭开 Spark 1.6 新发布的功能。

Spark 1.6 包含了超过 1000 个 patches,在这里主要展示三个方面的主题:新的 Dataset API,性能提升 (读取 Parquet 50% 的性能提升,自动内存管理,streaming state management 十倍的性能提升),以及大量新的机器学习和统计分析算法。

性能提升

根据 2015 年 Spark 官方调研发现,91% 的用户觉得性能提升是 Spark 最重要的方面。因此,性能优化是 Spark 开发一直的关注点。

读取 Parquet 性能提升:Parquet 是在 Spark 使用中最常用的数据格式。Parquet 读取性能对海里数据应用有着极其重大的影响。在过去,Spark 中读取 Parquet 依赖于 Parquet 的 (parquert-mr)MR 来读取并解析 Parquet 文件。当我们优化 Spark 程序时,你会发现太多的时间消耗在从 Parquet 列解析成记录集的过程中。而在 Spark 1.6 中Databricks采用一种新型的 Parquet reader 读取器,它可以避开”parquert-mr”式的记录集解析,并使用更加优化的字节码路径来解析 Parquet 的 schemas。在基准测试中可以发现,新型的 Parquet reader 读取器读取 Parquet 文件有 50% 的性能提升 (从 2.9 million/ 秒提升到 4.5million/ 秒)。

自动内存管理:Spark 1.6 另外一个性能提升是在内存管理方面。在 Spark 1.6 之前,Spark 静态地把内存划分成两部分:execution memory 和 cache memory。Execution memory 主要用来做 sort,hash 和 shuff。Cache memory 是用来缓存热点数据的。Spark 1.6 引进新的内存管理机制能自动调节这两种内存的区域,运行时自动增长,回收时根据执行的应用适时进行。

这意味着在无需用户干预的情况下使用 join 和 aggregation 操作时内存的自适应有大幅的提升。

对于读取 Parquet 和自动内存管理两种性能提升也不需要开发者更改老版本的代码。

streaming state management 十倍的性能提升:State management 是 Spark Streaming 应用开发里重要的功能,经常用来保存聚合信息或 session 信息。通过社区开发者的反馈,Databricks重新设计了 state management API,并引入mapWithState API(可随 updates 的数目线性扩展)。这意味着能更有效的跟踪增量变化,而不是每次 update 都要对数据进行一次全 scan。Databricks已经创建了一个notebook来展示怎么使用这个 new feature,后面会发 blog 进一步对这个功能进行详细讲解。

Dataset API

在今年早些时候 Spark 引入 DataFrame,它可以提供 high-level functions 让 Spark 更好的处理数据结构和计算。这让Catalyst optimizer 和Tungsten execution engine自动加速大数据分析。

发布 DataFrame 之后开发者收到了很多反馈,其中一个主要的是大家反映缺乏编译时类型安全。为了解决这个问题,Spark 采用新的 Dataset API (DataFrame API 的类型扩展)。

Dataset API 扩展 DataFrame API 支持静态类型和运行已经存在的 Scala 或 Java 语言的用户自定义函数。对比传统的 RDD API,Dataset API 提供更好的内存管理,特别是在长任务中有更好的性能提升,请参见blog

新的数据科学功能

机器学习管道持久化:现在许多机器学习的应用采用 Spark 的 ML pipeline 功能来构建机器学习 pipelines。老版本中,如果想在外部存储 pipeline,需要用户自己完成持久化代码部分。在 Spark 1.6 中已经提供了对应的 function 来存储和重新加载 pipelines,并把先前的 models 应用到新的数据中。

大量新的机器学习和统计分析算法:

这次发布增加了以下算法:

· 无偏估计统计

· 生成分析

· 最小二乘法的归一化

· 二分 k 均值聚类算法

· 在线假设检验

· LDA 算法

· 支持 R 语言的广义线性模型的统计

· 公式的交互

· 支持 R 语言的广义线性模型的权重

· LIBSVM 数据源

· 支持非标准的 JSON 数据

感谢杜小芳对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

大数据语言 & 开发架构SparkAI