本文共 2682 字,大约阅读时间需要 8 分钟。
Apache Spark 2.4.0是2.x系列中的第五个版本。此版本增加了屏障执行模式,以便更好地与深度学习框架集成;引入30多个更高阶的内置函数,能够更轻松地处理复杂数据类型;优化K8s集成,同时提供Scala 2.12实验性支持。其他主要更新还包括内置Avro数据源、图像数据源,更加灵活的流式接收器,取消传输过程中2GB块大小的限制,Pandas UDF改进。此外,此版本继续关注可用性、稳定性,并解决了大约1100个tickets。
Databricks正式发布Apache Spark 2.4,作为Databricks Runtime 5.0的一部分。
Release Note详情。
Spark 2.4继续以更快、更简单、更智能为目标,带来了以下新特性:
一种支持屏障模式的调度器,以便与基于MPI的程序(比如分布式深度学习框架)更好地集成;
引入一些内置的高阶函数,让处理复杂的数据类型(即数组和map)变得更容易;
提供对Scala 2.12的实验性支持;
允许对notebook中的DataFrame进行及早求值,便于调试和排除故障;
引入新的Avro数据源。
除了这些新特性外,新版本把重点放在可用性、稳定性和优化上,解决了1000个问题。由Spark贡献者带来的其他特性还包括:
去掉了2 GB块大小限制;
Pandas UDF改进;
图像模式数据源;
Spark SQL增强功能;
内置文件源改进;
Kubernetes集成增强。
接下来将简要介绍一些高级别的特性和改进,在未来几天,Databrick将发布有关这些特性的深度介绍。有关所有Spark组件和JIRA已解决的主要特性的完整列表,请参阅Apache Spark 2.4.0。
屏障执行模式是的一部分,Hydrogen是一项Apache Spark计划,旨在将最先进的大数据和AI技术结合在一起。它可以将来自AI框架的分布式训练作业嵌入到Spark作业中。他们通常需要探索像All-Reduce这种复杂的通信模式,因此需要同时运行所有任务。Spark当前使用的MapReduce模式不满足这样的需求。在这种新的执行模式下,Spark启动所有训练任务(例如MPI任务),并在任务失败时重新启动所有任务。Spark还为屏障任务引入了一种新的容错机制。在执行过程中如果有任何屏障任务失败,Spark将中止所有任务并重新启动该执行阶段。
在Spark 2.4之前,有两种典型的解决方案用于直接操作复杂类型(例如数组类型):一个是将嵌套结构展开为单独的行,应用一些函数,然后再次创建原先的结构,一个是使用用户定义函数(UDF)。新的内置函数可以直接操作复杂类型,可以使用匿名lambda函数操作复杂的值,类似于UDF,但具有更好的性能。
你可以查看一些有关高阶和内置函数的。
Apache Avro是一种非常流行的数据序列化格式,被广泛用在Apache Spark和Apache Hadoop生态系统中,尤其适用于基于Kafka的数据管道。从Apache Spark 2.4开始,Spark为Avro数据的读写提供内置支持。新的内置spark-avro模块最初来自Databricks的开源项目Avro Data Source for Apache Spark(从现在开始称为)。此外,它还提供了:
新的函数from_avro()和to_avro(),用于在DataFrame中读写Avro数据,而不仅仅是文件;
Avro逻辑类型支持,包括Decimal、Timestamp和Date类型;
2倍的读取吞吐量提升和10%的写入吞吐量改进。
从Spark 2.4开始,Spark将支持Scala 2.12,并使用Scala 2.11和2.12进行交叉构建,这两个版本都可以在Maven存储库和下载页面中找到。现在,用户可以使用Scala 2.12来编写Spark应用程序。
Scala 2.12带来了与Java 8更好的互操作性,Java 8提供了更好的lambda函数序列化。它还带来了一些用户期待的新特性和错误修复。
Pandas UDF最初是在Spark 2.3.0中引入的。在新版本中,根据用户反馈不断改进Pandas UDF。
除了错误修复之外,Spark 2.4还带来了2个新特性:基于Pandas UDF定义窗口函数和聚合函数。这些新特性将进一步改善Pandas UDF的使用,并在下一版本中继续改进Pandas UDF。
社区看到越来越多图像/视频/音频处理方面的使用场景。在Spark中为这些场景提供内置数据源简化了用户将数据导入ML训练方面的工作。在Spark 2.3版本中,图像数据源是通过ImageSchema.readImages实现的。Spark 2.4引入了一个新的Spark数据源,可以将目录中的图像文件递归加载为DataFrame。现在加载图像非常简单:
Spark 2.4带来了很多与Kubernetes集成的增强特性。首先,新版本支持在Kubernetes上运行容器化的PySpark和SparkR应用程序。Spark为用户提供了Python和R语言的Dockerfiles文件,供用户构建基础镜像或自定义镜像。其次,提供了客户端模式。用户可以在运行在Kubernetes集群中pod上或集群外的客户端计算机上运行交互式工具(例如shell或notebook)。最后,支持挂载以下类型的Kubernetes卷:emptyDir、hostPath和persistentVolumeClaim。
很多外部存储系统已经提供了批次连接器,但并非所有外部存储系统都有流式接收器(sink)。在新版本中,即使存储系统不支持流式接收器,仍然可以通过streamingDF.writeStream.foreachBatch(…)在每个微批次输出上使用批次数据写入器。例如,你可以在foreachBatch中使用现有的Apache Cassandra连接器直接将流式查询的输出写入Cassandra。
同样,你也可以用它将很多流式DataFrame不支持的DataFrame/Dataset操作应用在每个微批次输出上。例如,foreachBatch可用于避免在写入多个位置时重新计算流式查询。
英文原文:
转载地址:http://mwwzx.baihongyu.com/