今天,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))。
评论