SparkContext、SparkSession和Web UI

SparkContext和SparkSession

在Spark 2.0中引入了SparkSession类,以提供与底层Spark功能交互的单一入口点。这个类具有用于从非结构化文本文件以及各种格式的结构化数据和二进制数据文件读取数据的API,包括JSON、CSV、Parquet、ORC等。此外,SparkSession还提供了检索和设置与Spark相关的配置的功能。

SparkContext在Spark 2.0中,成为了SparkSession的一个属性对象。

一旦一个pyspark shell成功启动,它就会初始化一个SparkSession类的实例(名为spark),以及一个SparkContext类的实例(名为sc)。这个spark变量和sc变量可以在pyspark shell中直接使用。我们可以使用type()函数来验证这一点。

>>> type(sc)
>>> type(spark)

执行过程如下图所示:

查看当前使用的Spark版本号,使用如下命令:

>>> spark.version
>>> sc.version

执行过程如下图所示:

要查看在pypark shell中配置的默认配置,可以访问Spark的conf变量。下面的命令显示pyspark shell中默认的配置信息:

>>> for item in spark.sparkContext.getConf().getAll():
...       print(item)

执行过程如下图所示:

或者,也可以使用如下的命令:

>>> for item in sc.getConf().getAll():
...     print(item)

执行过程如下图所示:

Spark Web UI

每次初始化SparkSession对象时,Spark都会启动一个Web UI,提供关于Spark环境和作业执行统计信息的信息。Web UI默认端口是4040,但是如果这个端口已经被占用(例如,被另一个Spark Web UI),Spark会增加该端口号值,直到找到一个空闲的端口号为止。

在启动一个pypark shell时,将看到与此类似的输出行(除非关闭了INFO log消息):

Spark context Web UI available at http://xueai8:4040

如下图所示:

注意,可以通过将spark.ui.enabled配置参数设为false来禁用Spark web UI。可以用spark.ui.port参数来改变它的端口。

下图所示是Spark Web UI欢迎页面的一个示例。这个Web UI是从一个Spark shell启动的,所以它的名字被设置为Spark shell,如图右上角所示。

在运行spark-submit命令时,也可以使用--conf spark.app.name=在命令行上设置程序名称,但不能在启动Spark shell时更改应用程序名称。在这种情况下,它总是默认为Spark shell。

在Spark Web UI的Environment页面,可以查看影响Spark应用程序的配置参数的完整列表。如下图所示:


《PySpark原理深入与编程实战》