[Spark版本更新]--2.3.0发行说明(一)

自从2017年12月1日发布spark-2.2.1以来,已有3个月时间。

2018年2月28日,spark官方发布了一个大版本Spark-2.3.0,解决了1399个大大小小的问题。

一、DataBricks做了相关说明

今天,我们很高兴地宣布Databricks上的Apache Spark 2.3.0作为其Databricks Runtime 4.0的一部分。我们要感谢Apache Spark社区为Spark 2.3发布所做的所有重要贡献。

继续实现使Spark更快,更轻松,更智能的目标,Spark 2.3通过引入低延迟连续处理和流到流连接标志着结构化数据流的一个重要里程碑; 通过改善熊猫UDF的性能来提升PySpark; 并通过为Apache Spark应用程序提供本机支持而在Kubernetes群集上运行。

除了将新功能扩展到SparkR,Python,MLlib和GraphX之外,该版本还着重于可用性,稳定性和改进,解决了1400多张票。Spark贡献者的其他显着特征包括:

  • DataSource v2 API [ SPARK-15689,SPARK-20928 ]
  • 矢量化ORC阅读器[ SPARK-16060 ]
  • 具有KV商店的Spark History Server v2 [ SPARK-18085 ]
  • 与结构化数据流[机器学习管道API模型评分SPARK-13​​030,SPARK-22346,SPARK-23037 ]
  • MLlib增强亮点[ SPARK-21866,SPARK-3181,SPARK-21087,SPARK-20199 ]
  • Spark SQL增强功能[ SPARK-21485,SPARK-21975,SPARK-20331,SPARK-22510,SPARK- 20236 ]

在本篇博文中,我们简要总结了一些高级功能和改进,并且在未来几天中,我们将针对这些功能发布深度博客。有关Spark组件和JIRA的主要功能的完整列表,请阅读Spark 2.3发行说明。

毫秒延迟的连续流处理

Apache Spark 2.0中的结构化流式传输将微型批处理与其高级API分离,原因有两个。首先,它使开发人员对API的使用体验更简单:API不必考虑微批次。其次,它允许开发人员将流视为一个无限表,他们可以发出查询,就像他们将静态表一样。

但是,为了向开发人员提供不同的流处理模式,我们引入了一种新的毫秒级低延迟模式:连续模式

在引擎盖下,结构化的流引擎逐步执行微批中的查询计算,由触发间隔决定,并具有适合大多数真实世界流应用程序的可容忍延迟。

 

对于连续模式,流式读取器连续轮询源数据和处理数据,而不是按指定的触发时间间隔读取一批数据,而不是执行微批处理。通过不断查询源和处理数据,新的记录在到达时立即处理,如下面的时间线图所示,将等待时间缩短到毫秒并满足低等待时间要求。

 

至于操作,目前支持地图状数据集操作,如投影或选择和SQL函数,用外current_timestamp()current_date()和聚合函数。除了支持Apache Kafka作为源和宿,连续模式当前也支持控制台和内存。

现在,开发人员可以根据延迟要求选择模式连续或微量批处理,以大规模构建实时流式传输应用程序,同时受益于结构化流式处理引擎提供的容错和可靠性保证。

总之,Spark 2.3中的连续模式是实验性的,它提供了以下内容:

  • 端到端的毫秒低延迟
  • 提供至少一次保证。
  • 支持类似地图的数据集操作

在未来的日子里,我们将发布一个关于连续模式的更深入的技术博客。同时,您可以阅读其相应的JIRA [ SPARK 20928 ]了解详情。

流到流连接

尽管Spark 2.0中的结构化数据流支持流数据帧/数据集和静态数据集之间的连接,但此版本引入了期待已久的流到流连接,包括用于众多实时用例的内连接和外连接。

加入两个流的典型用例是广告收益。举例来说,印象流和广告点击流共享一个公共密钥(比如说,即AdID)和相关资料上,您希望进行流分析,比如,它的AdID带来了点击。

 

虽然概念上这个想法很简单,但是流到流连接解决了一些技术难题。例如,他们:

  • 通过将延迟事件缓存为流“状态”来处理延迟的数据,直到从其他流找到匹配事件
  • 限制缓冲区的增长和消耗带有水印的内存,这允许跟踪事件时间并相应地清除旧状态
  • 允许用户控制状态消耗的资源与查询处理的最大延迟之间的折衷
  • 在静态连接和流式连接之间保持一致的SQL连接语义

在即将发布的技术博客中,我们将深入探讨流到流的连接。

Apache Spark和Kubernetes

毫不奇怪,两个流行的开源项目Apache Spark和Kubernetes结合了它们的功能和实用程序来提供大规模的分布式数据处理和编排。在Spark 2.3中,用户可以利用新的Kubernetes调度程序后端在Kubernetes集群上本地启动Spark工作负载。这有助于通过使Spark工作负载与其他类型的工作负载共享Kubernetes集群来实现更好的资源利用率和多租户性能。

 

此外,Spark可以使用所有管理功能,例如资源配额,可插入授权和日志记录。更重要的是,创建Docker镜像和设置RBAC以开始为您的Spark工作负载使用现有Kubernetes集群一样简单。

 

请继续关注一个技术博客,它将阐述这个主要的社区活动是如何构建的。

用于PySpark的熊猫UDF

熊猫UDF也称为矢量化UDF,是PySpark性能的主要推动力。它构建在Apache Arrow的基础上,为您提供两全其美的解决方案 - 定义低开销,高性能的UDF并完全用Python编写的能力。

在Spark 2.3中,有两种类型的Pandas UDF:标量和分组映射。两者现在均可在Spark 2.3中使用。两西格玛的李进曾写过一篇较早的博客,通过四个例子来解释他们的用法:加一,累积概率,减去平均值,普通最小二乘线性回归。

运行一些微型基准测试,熊猫UDF的性能比行时UDF提供更好的性能。

据李进和其他贡献者称,他们计划在聚合和窗口功能中引入对熊猫UDF的支持,其相关工作可以在SPARK-22216中进行跟踪。

MLlib改进

Spark 2.3包含许多针对算法和功能,性能和可扩展性以及可用性的MLlib改进。我们提到三个亮点。

首先,为了将MLlib模型和管道移动到生产环境,现在拟合的模型和管道可以在结构化流式处理作业中使用。一些现有的管道将需要修改才能在流式作业中进行预测,因此请查看即将发布的有关迁移技巧的博客文章。

其次,为了实现许多Deep Learning图像分析用例,Spark 2.3引入了用于在Spark DataFrame中表示图像的ImageSchema [SPARK-21866],以及用于从常用格式加载图像的实用程序。

最后,对于开发人员来说,Spark 2.3引入了改进的Python中的API来编写自定义算法,其中包括UnaryTransformer用于编写简单的自定义功能变换器和用于自动执行ML持久性以保存和加载算法的实用程序。有关详细信息,请参阅此博文。

下一步是什么?

我们再一次感谢Spark社区的所有贡献!

尽管此博客文章仅概述了此版本中的一些显着特性,但您可以阅读正式版本说明以查看完整的更改列表。敬请期待,因为我们将发布技术博客,解释其中的一些功能。

如果您想在Databricks Runtime 4.0中尝试Apache Spark 2.3。在这里注册免费试用帐户

二、以下是Spark官方的发行说明

Sub-task

·        [ SPARK-9104 ] - 公开网络层内存使用情况

·        [ SPARK-10365 ] - 支持Parquet逻辑类型TIMESTAMP_MICROS

·        [ SPARK-11034 ] - 启动器:添加对监控Mesos应用程序的支持

·        [ SPARK-11035 ] - 启动器:允许应用程序在进程中启动

·        [ SPARK-12375 ] - VectorIndexer:允许未知类别

·        [ SPARK-13​​534 ] - 为DataFrame.toPandas中的Spark DataFrame使用Apache Arrow序列化程序

·        [ SPARK-13​​969 ] - 扩展哈希功能可以处理的输入格式

·        [ SPARK-14280 ] - 更新change-version.sh和pom.xml以添加Scala 2.12配置文件

·        [ SPARK-14650 ] - 为Scala 2.12编译SparkREPL

·        [ SPARK-14878 ] - 支持字符串修剪功能中的修剪字符

·        [ SPARK-17074 ] - 为列生成等高直方图

·        [ SPARK-17139 ] - 为MultinomialLogisticRegression添加模型摘要

·        [ SPARK-17642 ] - 支持DESC FORMATTED TABLE COLUMN命令以显示列级统计信息

·        [ SPARK-17729 ] - 启用创建蜂巢分段表

·        [ SPARK-18016 ] - 代码生成:用于宽/嵌套数据集的常量池过去限制

·        [ SPARK-18294 ] - 实现提交协议来支持`mapred`包的提交者

·        [ SPARK-19165 ] - UserDefinedFunction应验证调用参数并在不匹配的情况下提供可读的异常

·        [ SPARK-19357 ] - ML调整的并行模型评估:Scala

·        [ SPARK-19634 ] - MLlib中描述性统计的功能奇偶性

·        [ SPARK-19762 ] - 实施汇总/损失函数层次并应用于线性回归

·        [ SPARK-19791 ] - 为fpgrowth添加文档和示例

·        [ SPARK-20396 ] - groupBy()。apply()和pandasudf在pyspark

·        [ SPARK-20417 ] - 将错误报告从分析器移动到CheckAnalysis

·        [ SPARK-20585 ] - R通用提示支持

·        [ SPARK-20641 ] - 用于存储应用程序数据的键值存储抽象和实现

·        [ SPARK-20642 ] - 使用键值存储来保留History Server应用程序列表

·        [ SPARK-20643 ] - 实现在键值存储中保存应用程序状态数据的监听器

·        [ SPARK-20644 ] - 将Spark UI连接到新的键值存储后端

·        [ SPARK-20645 ] - 使环境页面使用新的应用程序状态存储

·        [ SPARK-20646 ] - 使执行程序页面使用新的应用程序状态存储

·        [ SPARK-20647 ] - 使存储页面使用新的应用程序状态存储

·        [ SPARK-20648 ] - 使作业和阶段页面使用新的应用程序状态存储

·        [ SPARK-20649 ] - 简化REST API类层次结构

·        [ SPARK-20650 ] - 删除JobProgressListener(和其他不需要的类)

·        [ SPARK-20652 ] - 使SQL UI使用新的应用程序状态存储

·        [ SPARK-20653 ] - 将旧元素的自动清理添加到新的应用程序状态存储中

·        [ SPARK-20654 ] - 添加控制SHS可以使用多少磁盘

·        [ SPARK-20655 ] - 内存中键值存储实现

·        [ SPARK-20657 ] - 加快舞台页面

·        [ SPARK-20664 ] - 从SHS列表中删除陈旧的应用程序

·        [ SPARK-20727 ] - 在CRAN Windows机器上丢失Hadoop winutil时跳过SparkR测试

·        [ SPARK-20748 ] - 内置SQL函数支持 -CH [A] R

·        [ SPARK-20749 ] - 内置SQL函数支持 -LEN [GTH]的所有变体

·        [ SPARK-20750 ] - 内置SQL函数支持 -REPLACE

·        [ SPARK-20751 ] - 内置SQL函数支持 -COT

·        [ SPARK-20754 ] - 为MOD / TRUNCT / POSITION添加功能别名

·        [ SPARK-20770 ] - 改进ColumnStats

·        [ SPARK-20783 ] - 增强ColumnVector以支持压缩表示

·        [ SPARK-20791 ] - 使用Apache箭头从Pandas.DataFrame改进Spark createDataFrame

·        [ SPARK-20822 ] - 生成代码以在ColumnarBatch中从CachedBatchColumnVector获取值

·        [ SPARK-20881 ] - 清楚地记录在两个统计来源之间进行选择的机制

·        [ SPARK-20909 ] - 内建SQL函数支持 -DAYOFWEEK

·        [ SPARK-20910 ] - 内建SQL函数支持 -UUID

·        [ SPARK-20931 ] - 内置SQL函数ABS支持字符串类型

·        [ SPARK-20948 ] - 内置SQL函数UnaryMinus/ UnaryPositive支持字符串类型

·        [ SPARK-20961 ] - 在ColumnVector中概括字典

·        [ SPARK-20962 ] - 支持FROM子句中的子查询列别名

·        [ SPARK-20963 ] - 在FROM子句中支持别名关系的列别名

·        [ SPARK-20988 ] - 将逻辑回归转换为新的聚合器框架

·        [ SPARK-21007 ] - 添加SQL函数 - 右和左

·        [ SPARK-21031 ] - 添加`alterTableStats`来存储spark的统计信息并让`alterTable`保留现有的统计信息

·        [ SPARK-21046 ] - 简化ColumnVector中的数组偏移和长度

·        [ SPARK-21047 ] - 为ColumnarBatchSuite中的复杂案例添加测试套件

·        [ SPARK-21051 ] - 将哈希映射度量值添加到聚合中

·        [ SPARK-21052 ] - 添加哈希映射指标以加入

·        [ SPARK-21083 ] - 分析空表后存储零大小和行数

·        [ SPARK-21087 ] - CrossValidator,TrainValidationSplit在拟合时应该收集所有模型:Scala API

·        [ SPARK-21127 ] - 更新数据更改命令后的统计信息

·        [ SPARK-21180 ] - 由于我们已经在LogicalPlan中进行了配置,因此从stats函数中删除conf

·        [ SPARK-21190 ] - SPIP:Python中的矢量化UDF

·        [ SPARK-21205 ] - pmod(number,0)应该为空

·        [ SPARK-21213 ] - 支持收集分区级统计信息:rowCount和sizeInBytes

·        [ SPARK-21237 ] - 表格数据更改后使统计数据失效

·        [ SPARK-21322 ] - 支持过滤器基数估计中的直方图

·        [ SPARK-21324 ] - 改进统计测试套件

·        [ SPARK-21375 ] - 为toPandas()集合的ArrowConverters添加日期和时间戳支持

·        [ SPARK-21440 ] - 重构ArrowConverters并添加ArrayType和StructType支持。

·        [ SPARK-21456 ] - 使驱动程序failover_timeout可配置(Mesos群集模式)

·        [ SPARK-21552 ] - 为ArrowWriter添加十进制类型支持。

·        [ SPARK-21625 ] - 向DOC添加不兼容的HiveUDF

·        [ SPARK-21654 ] - 补充谓词表达式描述

·        [ SPARK-21671 ] - 将kvstore包移到util.kvstore,添加注释

·        [ SPARK-21720 ] - 用许多条件筛选谓词抛出stackoverflow错误

·        [ SPARK-21778 ] - Scala / Java中更简单的Dataset.sample API

·        [ SPARK-21779 ] - Python中更简单的Dataset.sample API

·        [ SPARK-21780] - R中的更简单的数据集.Sample API

·        [ SPARK-21893 ] - 将卡夫卡0.8放在配置文件后面

·        [ SPARK-21895 ] - 支持在HiveClient中更改数据库

·        [ SPARK-21934 ] - 通过指标系统公开Netty内存使用情况

·        [ SPARK-21984 ] - 在连接估算中使用直方图统计

·        [ SPARK-22026 ] - 数据源v2写入路径

·        [ SPARK-22032 ] - 加快StructType.fromInternal

·        [ SPARK-22053 ] - 以追加模式实现流式内部连接

·        [ SPARK-22078 ] - 阐明所有数据源v2接口的异常行为

·        [ SPARK-22086 ] - 为CASE WHEN添加表达式描述

·        [ SPARK-22087 ] - 清除2.12的剩余编译错误; 解决大部分警告

·        [ SPARK-22100 ] - 使percentile_approx支持日期/时间戳类型,并将输出类型更改为与输入类型相同

·        [ SPARK-22128 ] - 将paranamer更新为2.8以避免BytecodeReadingParanamer ArrayIndexOutOfBoundsException与Scala 2.12 + Java 8 lambda

·        [ SPARK-22136 ] - 以追加模式实现流式流外部连接

·        [ SPARK-22197 ] - 在规划之前将运营商推下数据源

·        [ SPARK-22221 ] - 添加用户文档以在Spark中使用Arrow

·        [ SPARK- 22226] - splitExpression可能会创建太多的方法调用(生成一个常量池限制错误)

·        [ SPARK-22278 ] - 在GroupState中公开当前事件时间水印和当前处理时间

·        [ SPARK-22285 ] - 将ApproxCountDistinctForIntervals的实现更改为TypedImperativeAggregate

·        [ SPARK-22310 ] - 重构连接估计,为不同种类的统计信息合并估计逻辑

·        [ SPARK-22322 ] - 更新FutureAction以与Scala 2.12未来兼容

·        [ SPARK-22324 ] - 将Arrow升级到版本0.8.0并将Netty升级到4.1.17

·        [ SPARK-22361 ] - 为Window Frames添加单元测试

·        [ SPARK-22363 ] - 为窗口溢出添加单元测试

·        [ SPARK-22387 ] - 将会话配置传播到数据源读/写选项

·        [ SPARK-22389 ] - 分区报告

·        [ SPARK-22392 ] - 柱状阅读器界面

·        [ SPARK-22400 ] - 重命名一些API和类,使其含义更清晰

·        [ SPARK-22409 ] - 将函数类型参数添加到pandas_udf

·        [ SPARK-22452 ] - DataSourceV2Options应该有getInt,getBoolean等。

·        [ SPARK-22475 ] - 在DESC COLUMN命令中显示直方图

·        [ SPARK-22483 ] - 将java.nio bufferedPool内存度量公开给度量系统

·        [ SPARK-22494 ] - 合并和AtLeastNNonNulls可能导致64KB JVM字节码限制异常

·        [ SPARK-22498 ] - concat 64KB JVM字节码限制问题

·        [ SPARK-22499 ] - 最小和最大的64KB JVM字节码限制问题

·        [ SPARK-22500 ] - 64KB JVM字节码限制问题

·        [ SPARK-22501 ] - 64KB JVM字节码限制问题

·        [ SPARK-22508 ] -GenerateUnsafeRowJoiner.create()中64KB JVM字节码限制问题

·        [ SPARK-22514 ] - 将ColumnVector.Array和ColumnarBatch.Row移动到单个文件

·        [ SPARK

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值