Apache Spark 2.4简介
更新:11/19/2018
我们很高兴地宣布Apache Spark 2.4作为数据库的一部分Databricks运行时5.0。我们要感谢Apache Spark社区为Spark 2.4发布所做的宝贵贡献。
继续使Spark更快、更简单、更智能的目标,Spark 2.4扩展了其范围,增加了以下特性:
- 支持屏障模式的调度器,以更好地集成基于mpi的程序,例如分布式深度学习框架
- 引入一些内置的高阶函数,使其更容易处理复杂的数据类型(即数组和映射)
- 为Scala 2.12提供实验性支持
- 允许对笔记本中的DataFrames进行快速评估,以便于调试和故障排除。
- 介绍一个新的内置Avro数据源
除了这些新特性,该版本还注重可用性、稳定性和改进,解决了1000多个故障。Spark贡献者的其他突出特性包括:
- 取消2 GB的块大小限制[火星- 24296,火星- 24307]
- Pandas UDF改进[火星- 22274,火星- 22239,火星- 24624]
- 映像模式数据源(火花- 22666)
- Spark SQL增强[火星- 23803,火星- 4502,火星- 24035,火星- 24596,火星- 19355]
- 内置文件源改进[火星- 23456,火星- 24576,火星- 25419,火星- 23972,火星- 19018,火星- 24244]
- Kubernetes集成增强[火星- 23984,火星- 23146]
在这篇博文中,我们简要地总结了一些高级特性和改进,在接下来的几天里,我们将发布关于这些特性的深入博客。有关所有Spark组件和已解析的jira的主要特性的全面列表,请阅读Apache Spark 2.4.0发布说明。
屏障执行模式
屏障执行模式的一部分项目氢这是Apache Spark的一个项目,旨在将最先进的大数据和人工智能结合在一起。它支持将AI框架中的分布式训练作业适当嵌入为Spark作业。他们通常探索复杂的沟通模式,比如减少,因此所有任务需要同时运行。这并不符合Spark目前使用的MapReduce模式。使用这种新的执行模式,Spark启动所有的训练任务(例如,MPI的任务),并在任务失败时重新启动所有任务。Spark还为barrier任务引入了一种新的容错机制。当任何barrier任务在中间失败时,Spark将中止所有任务并重新启动stage。
内置高阶函数
在Spark 2.4之前,对于直接操作复杂类型(例如数组类型),有两种典型的解决方案:1)将嵌套结构分解成单独的行,并应用一些函数,然后重新创建结构。2)构建用户定义函数(UDF)。新的内置函数可以直接操作复杂类型,而高阶函数可以根据需要使用匿名lambda函数操作复杂值,与udf类似,但性能要好得多。
你可参阅我们的关于高阶函数的博客。
内置Avro数据源
Apache Avro是一种流行的数据序列化格式。它在Apache Spark和Apache Hadoop生态系统中被广泛使用,特别是用于基于kafka的数据管道。从Apache Spark 2.4版本开始,Spark提供了内置的Avro数据读写支持。新的内置spark-avro模块最初来自Databricks的开源项目bob下载地址Avro数据源的Apache Spark(以后简称spark-avro)。此外,它还规定:
- 新功能from_avro ()而且to_avro ()在DataFrame中读取和写入Avro数据,而不仅仅是文件。
- Avro逻辑类型支持,包括十进制,时间戳和日期类型。请参阅相关资料模式转换获取详细信息。
- 2倍的读吞吐量提高和10%的写吞吐量提高。
你可以阅读更多关于内置Avro数据源在我们的深度技术博客。
实验性Scala 2.12支持
从Spark 2.4开始,Spark支持Scala 2.12,并与Scala 2.11和2.12交叉构建,这两个版本可以在Maven存储库和下载页面中获得。现在用户可以通过选择Scala 2.12 Spark依赖项,使用Scala 2.12编写Spark应用程序。
Scala 2.12带来了与Java 8更好的互操作性,后者提供了改进的lambda函数序列化。它还包括用户希望的新功能和错误修复。
熊猫UDF改进
熊猫UDF在Spark 2.3.0中引入。在这次发布中,我们收集了来自用户的反馈,并不断改进Pandas UDF。
除了bug修复,Spark 2.4还有两个新特性:火星- 22239使用Pandas UDF用户定义的窗口函数。火星- 22274使用pandas udf的用户定义聚合函数。我们相信这些新特性将进一步提高Pandas UDF的普及率,我们将在下一个版本中继续改进Pandas UDF。
图像数据源
社区看到了更多关于图像/视频/音频处理的用例。为此提供Spark内置数据源可以简化用户将数据导入ML训练的工作。在Spark 2.3版本中,图像数据源通过ImageSchema.readImages实现。火星- 22666在Spark 2.4版本中引入了一个新的Spark数据源,可以作为DataFrame从目录中递归地加载图像文件。现在加载图像非常简单:
Df = spark.read。格式(“图像”) .load (“…”)
你可以阅读更多关于内置的图像数据源在我们深度技术博客。
Kubernetes集成增强
Spark 2.4包含了许多针对Kubernetes集成的增强。我们提到三个重点。首先,这个版本支持在Kubernetes上运行容器化的PySpark和SparkR应用程序。Spark将Dockerfiles为Python和R绑定,以便用户构建一个基本映像或自定义它来构建一个自定义映像。其次,提供了客户端模式。用户可以在Kubernetes集群或集群外的客户端机器上运行交互式工具(例如shell或notebook)。最后,支持挂载以下类型的Kubernetes卷:emptyDir,hostPath,persistentVolumeClaim。详细信息请参见技术博客。
灵活的流水槽
许多外部存储系统已经具有批处理连接器,但并不是所有的存储系统都具有流接收器。在这个版本中,即使存储系统不支持流作为接收器,streamingDF.writeStream.foreachBatch(…)
允许您在每个微批的输出上使用批数据写入器。例如,您可以在内部使用现有的Apache Cassandra连接器foreachBatch
直接将流查询的输出写入Cassandra。
streamingDF.writeStream.foreachBatch {(batchDF: DataFrame, batchId: Long) = >batchDF.write//使用Cassandra批处理数据源写入流输出用于.cassandraFormat(表).option (“集群”clusterName).mode (“添加”).save ()}
类似地,您还可以使用它来应用到每个微批输出许多流式DataFrame中不支持的DataFrame/Dataset操作。例如,foreachBatch
可用于在写入多个位置时避免流查询的重新计算。例如,
streamingDF.writeStream.foreachBatch {(batchDF: DataFrame, batchId: Long) = >batchDF.persit ()batchDF.write.format(…).save(…)// location 1batchDF.write.format(…).save(…)// location 2batchDF.unpersist ()}
接下来是什么
再次感谢Spark社区的所有贡献!
虽然这篇博客文章只是总结了这个版本的一些突出功能,但你可以阅读官方的内容发布说明查看完整的更改列表。请继续关注,因为我们将发布技术博客,更深入地解释这些特性。
如果你想尝试Apache Spark 2.4 inDatabricks运行时5.0,注册一个免费的这里是试用账号。