2.1 Spark 2.2综述

Spark 2.0中更新发布了新的流处理框架(Structured Streaming);对于API的更新,Spark 2.0版本API的更新主要包括DataFrame、DataSet、SparkSession、累加器API、Aggregator API等API的变动。

2.1.1 连续应用程序

自从Spark得到广泛使用以来,其流处理框架Spark Streaming也逐渐吸引到了很多用户,得益于其易用的高级API和一次性语义,使其成为使用最广泛的流处理框架之一。但是,我们不仅需要流处理来构建实时应用程序,很多时候我们的应用程序只有一部分需要用到流处理,对于这种应用程序,Databricks公司把它称为Continuous Application(实时响应数据的端到端的应用程序),也就是连续的应用程序。在Continuous Application中有许多难点,如数据交互的完整性、流数据与离线数据的结合使用、在线机器学习等。

Spark 2.0最重磅的更新是新的流处理框架——Structured Streaming。它允许用户使用DataFrame/DataSetAPI编写与离线批处理几乎相同的代码,便可以作用到流数据和静态数据上,引擎会自动增量化流数据计算,同时保证了数据处理的一致性,并且提供了和存储系统的事务集成。

2.1.2 新的API

在Spark 2.0版本的API中,共有如下几个API的变动:

(1)统一了DataFrame和DataSet。现在DataFrame不再是一个独立的类,而是作为DataSet[Row]的别名定义在org.apache.spark.sql这个包对象中。

sql\package.scala源码如下:

1.    package object sql {
2.
3.   /**
       * 将一个逻辑计划转换为零个或多个SparkPlans。这个API是查询计划实验使用,不是为
       * Spark   稳定发行版设计的。编写库的开发者应该考虑使用[[org.apache.spark.sql.
       * sources]]提供的稳定APIs
4.     */
5.    @DeveloperApi
6.    @InterfaceStability.Unstable
7.    type Strategy = SparkStrategy
8.
9.    type DataFrame = Dataset[Row]
10. }

(2)加入了SparkSession,用于替换DataFrame和Dataset API的SQLContext和HiveContext(这两个API仍然可以使用)。

(3)为SparkSession和SparkSQL加入一个新的,精简的配置参数——RuntimeConfig,用来设置和获得与SparkSQL有关的Spark或者Hadoop设置。

SparkSession.scala源码:

1.  /**
2.    * Spark运行时的配置接口
      *
3.    *  这是用户可以获取并设置所有Spark和Hadoop的接口。将触发 Spark SQL相关的配
      *  置。当获取配置值时,默认设置值在SparkContext里
4.    * @since 2.0.0
5.    */
6.   @transient lazy val conf: RuntimeConfig = new RuntimeConfig
     (sessionState.conf)

(4)更简单、更高性能的累加器API。

(5)用于DataSet中类型化聚合的新的改进的Aggregator API。