spark入门之spark Driver Web UI

*注:本文为本人结合网上资料翻译 Apache Spark 2.x for Java developers 一书而来,仅作个人学习研究之用,支持转载,但务必注明出处。



一、概述

本节将提供Spark driver‘s UI的一些重要方面。 我们将在Spark UI上看到我们使用Spark shell执行的作业的统计信息。

在启动spark-shell时,调试信息会给出spark driver’s UI的入口,如:
Spark context Web UI available at http://192.168.56.156:4040
SparkContext是Spark应用程序的入口。所有的Spark job都从SparkContext启动,也能够只由一个SparkContext构成。
Spark脚本,从SparkContext启动一个spark应用程序,每一个SparkContext都有一个它自己的Web UI。默认端口是4040。Spark UI可以启用/禁用,也可以使用以下属性在单独的端口上启动:
Property
Default value
spark.ui.enabled
True
spark.ui.port
4040
例如,运行在5050端口上的Spark UI的Spark shell应用程序可以启动为:
spark-shell --confspark.ui.port=5050
如果多个spark脚本程序并行地运行在一个系统中,而没有进行前述的conf参数设置,那么这些应用的Spark UI将会使用从4040起的连续端口(如,4040,4041等等)。
Spark UI由以下选项卡组成:

二、Jobs
Jobs选项卡是Spark UI的默认选项卡。它展示了由spark上下文(SparkContext)执行的所有应用程序的状态。

它由以下部分组成:
Active Jobs:这部分是正在运行的job
Completed Jobs:这部分是已经成功完成了的job
Failed Jobs:这部分是失败了的job
截图如下(因为我自己现在没有相应的job,所有使用其他地方的截图):
注意:Spark UI中的section是惰性创建的,并且如果需要的话是可见的(visible)。举个例子,Active Jobs section只有当有一个job正在被运行时才是可见的。类似地,只有一个job已经成功完成或者失败才能在Completed Jobs部分和Failed Jobs部分可见。
Spark UI的“作业”选项卡部分使用org.apache.spark.ui.jobs.JobsTab类来呈现,该类使用org.apache.spark.ui.jobs.JobProgressListener获取作业的统计信息。
另外,如果展开“事件时间轴”(Event Timeline)部分,则可以看到SparkContext启动的时间(即,启动了驱动程序),和作业的执行情况(伴随着状态的更改)。
并且,通过点击任何一个job,你可以看到job的细节,也就是job的Event TimeLine,转换操作的DAG以及任务执行时被执行的stage,如下:


三、Stages
Stages标签页列出和提供当前spark上下文执行的所有job的当前stage。Stage选项卡使用org.apache.spark.ui.jobs.StagesTab类来呈现。
和Jobs选项卡一样,Stage选项卡也由三部分组成:
Active Stages:本部分是针对当前正在运行的活动阶段
Completed Stages:本部分适用于已成功完成的(正在运行的/失败的/已完成的)作业的阶段
Failed Stages:本部分适用于失败了的(正在运行的/失败的/已完成的)作业的阶段
执行完Spark REPL/CLI中提交的所有作业之后,Stages选项卡将如下所示:
如果您点击任何阶段,您可以看到阶段的各种细节,即执行任务的DAG,事件时间轴等。 另外,这个页面提供了在这个阶段执行的executors和tasks的各种细节的度量:



四、Storage
如果job在执行时持久化(persist)/缓存(cache)了一个RDD,那么RDD的信息可以在这个选项卡中恢复。
我们来再次启动spark shell。读取一个文件,然后对它进行一个action操作。不过,这次我们在执行action之前先把文件缓存。
刚开始时,当你启动spark shell时,Storage选项卡是空白的:
我们使用spark上下文来读取一个文件:
scala> val file = sc.textFile("/opt/spark/examples/src/main/resources/people.txt")
file: org.apache.spark.rdd.RDD[String] = /opt/spark/examples/src/main/resources/people.txt MapPartitionsRDD[1] at textFile at <console>:24

现在我们来缓存这个RDD。默认情况下,它会被缓存在内存中。
scala> file.cache
res0: file.type = /opt/spark/examples/src/main/resources/people.txt MapPartitionsRDD[1] at textFile at <console>:24

我们前面已经讲过,只有当有action操作输入时,DAG中的transformation操作才会被执行。所以我们的cache操作也只有当对这个RDD进行action操作时才会执行。让我们来对它进行一个collect操作:
scala> file.collect
res1: Array[String] = Array(Michael, 29, Andy, 30, Justin, 19) 

现在,我们可以在Storage选项卡中找到被缓存的RDD的信息。
如果你点击RDD的名称,它提供有关RDD上分区(partitions)的信息以及存储RDD的主机的地址。


五、Enviroment
Environment选项卡提供有关Spark应用程序(或SparkContext)中使用的各种属性和环境变量的信息。
用户可以通过这个选项卡得到非常有用的各种Spark属性信息,而不用去翻找属性文件。
往下拉还有System Properties信息的表格,截图截不下了。

六、Executors
Spark UI中的Executors选项卡提供了关于内存、核心和其他被executors使用的资源的信息。这些信息在executor级别和汇总级别都可以获取到。
Spark UI的“执行器”选项卡部分的信息都使用org.apache.spark.ui.exec.ExecutorsListener类来呈现

另外,这个选项卡提供了一个选项来执行executor进程的线程转储,这对调试问题非常有用。 用户可以通过将spark.ui.threadDumpsEnabled设置为false来关闭此选项(默认情况下,设置为true)。

七、SQL
(只有运行了SQL查询才会有SQL选项卡)
Spark UI的SQL选项卡提供了非常有用的SQL查询。我们在以后的文章中将介绍Spark SQL框架的工作。现在,我们在spark shell中执行这些命令:
在以下示例中,我们将使用SparkSession库在Spark中读取JSON文件,并在JSON数据上创建临时视图,然后我们将在表上运行Spark SQL查询
scala> import spark.implicits._
import spark.implicits._

scala> import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.SparkSession

scala> val spark = SparkSession.builder().appName("Spark SQL basic example").getOrCreate()
18/01/23 16:06:22 WARN ObjectStore: Version information not found in metastore. hive.metastore.schema.verification is not enabled so recording the schema version 1.2.0
18/01/23 16:06:23 WARN ObjectStore: Failed to get database default, returning NoSuchObjectException
18/01/23 16:06:25 WARN ObjectStore: Failed to get database global_temp, returning NoSuchObjectException
18/01/23 16:06:26 WARN SparkSession$Builder: Using an existing SparkSession; some configuration may not take effect.
spark: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@3cc7cf58

scala> val df = spark.read.json("/opt/spark/examples/src/main/resources/people.json")
df: org.apache.spark.sql.DataFrame = [age: bigint, name: string]

scala> df.createOrReplaceTempView("people")

scala> val sqlDF = spark.sql("SELECT * FROM people")
sqlDF: org.apache.spark.sql.DataFrame = [age: bigint, name: string]

scala> sqlDF.show()
+----+-------+
| age|   name|
+----+-------+
|null|Michael|
|  30|   Andy|
|  19| Justin|
+----+-------+

当运行完这个例子后,SQL查询的细节能够在SQL选项卡中找到。 它提供了SQL查询的DAG以及显示Spark如何优化已执行的SQL查询的查询计划
SQL选项卡通过org.apache.spark.sql.execution.ui.SQLListener类获得这些信息。


八、Streaming
 
*这部分内容暂且略过,以后接触到Streaming再补充

参考文献:

Apache Spark 2.x for Java developers

S Gulati,S Kumar - 2017 - 被引量: 0

Gulati, Sourav; Kumar, Sumit



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值