今天Cloudera正式宣布发布CDS3,基于Apache Spark 3.0 preview2 release,参考:
https://spark.apache.org/news/spark-3.0.0-preview2.html
这是一个实验版本,建议用于测试或者技术预研,不建议在生产系统中使用。而且这个版本不受Cloudera Support支持。对于Spark3的新特性,可以参考文章《开源生态的新发展:Apache Spark 3.0、Koala和Delta Lake》。
以下是Spark3的关键新特性:
1.Spark3的TPC-DS性能进一步提升;
2.语言支持
a)Scala version is upgraded to 2.12
b)JDK11 is fully supported.
c)Python3.6 is supported. Python 2 and Python 3 prior to version 3.6 are deprecated
3.Adaptive execution of Spark SQL
a)对于AQE而言,最重要的问题就是什么时候去重新计算优化执行计划。Spark任务的算子如果管道排列,依次并行执行。然而,shuffle或者broadcast exchange会打断算子的排列执行,我们称其为物化点(Materialization Points),并且用"Query Stages"来代表那些被物化点所分割的小片段。每个Query Stage会产出中间结果,当且仅当该stage及其并行的所有stage都执行完成后,下游的Query Stage才能被执行。所以当上游部分stage执行完成,partitions的统计数据也获取到了,并且下游还未开始执行,这就给AQE提供了reoptimization的机会。在查询开始时,生成完了执行计划,AQE框架首先会找到并执行那些不存在上游的stages。一旦这些stage有一个或多个完成,AQE框架就会将其在physical plan中标记为完成,并根据已完成的stages提供的执行数据来更新整个logical plan。基于这些新产出的统计数据,AQE框架会执行optimizer,根据一系列的优化规则来进行优化;AQE框架还会执行生成普通physical plan的optimizer以及自适应执行专属的优化规则,例如分区合并、数据倾斜处理等。于是,我们就获得了最新优化过的执行计划和一些已经执行完成的stages,至此为一次循环。接着我们只需要继续重复上面的步骤,直到整个query都跑完。
4.Dynamic Partition Pruning (DPP)
a)Spark 3.0引入了动态分区裁剪功能,这是SQL分析工作负载的一项重大性能改进。DPP背后的想法是将维度表上的筛选器集直接应用到事实表上,以便跳过扫描不需要的分区。DPP的优化是在逻辑计划优化和物理计划上实现的。它大大增强了许多TPC-DS查询的速度,并且可以很好的适应星型模型,而无需对表进行反范式化(Denormalization)。
5.Binary files data source
a)Spark 3.0支持二进制文件数据源。它可以读取二进制文件,并将每个文件转换为包含文件原始内容和元数据的一行。
6.DataSource V2 Improvements
a)Pluggable catalog integration
b)改进谓词下推功能,可通过减少数据加载来加快查询速度
7.YARN Features
a)Spark 3.0可以自动在YARN集群上发现GPU,并将任务调度到指定的GPU节点。
8.Kafka connector delegation token (0.10 )
a)对应用只需要配置Spark的参数就可以完成认证登录,而不是非需要使用JAAS配置登录。
该试验版本不支持以下组件:
- Hive Warehouse Connector
- Kudu
- HBase Connector
- Oozie
- Livy
- Zeppelin
参考文档:
https://docs.cloudera.com/runtime/7.1.1/cds-3/topics/spark-spark-3-overview.html
下载地址:
http://archive.cloudera.com/p/spark3/2.99.7110.0/csd/SPARK3_ON_YARN-3.0.0.2.99.7110.0-18.jar http://archive.cloudera.com/p/spark3/2.99.7110.0/parcels/