Spark Web UI是学习调试spark任务的入口,查看spark UI任务日志也是一项必备技能。
启动pyspark以后,在本地浏览器访问localhost:4040
界面,就会看到spark的任务UI界面,查看各任务的信息。其中IP
和port
可以在pyspark启动的时候进行指定,也可以通过其它方式进行配置。
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
Property | Default value |
---|---|
spark.ui.enabled | True |
spark.ui.port | 4040 |
例如,运行在5050端口上的Spark UI的Spark shell应用程序可以启动为:
pyspark --conf spark.ui.port=5050
如果多个spark脚本程序并行地运行在一个系统中,而没有进行前述的conf参数设置,那么这些应用的Spark UI将会使用从4040起的连续端口(如,4040,4041等等)。
demo1
from pyspark import SparkConf, SparkContext
appName = 'testSpark'
def main(sc):
pass
if __name__ == '__main__':
#Configure Spark
conf = SparkConf().setAppName(appName).setMaster('local[2]')
# sc.stop()
sc = SparkContext(conf=conf)
print(sc.version)
main(sc)
在浏览器输入localhost:4040
进入到spark的任务UI界面,查看各任务的信息。
demo2
tmp = [('a', 1), ('f', 2), ('d', 3), ('c', 4), ('b', 5)]
rdd = sc.parallelize(tmp, 2)
print rdd.glom().collect()
sort1 = rdd.sortByKey(True,1).glom().collect()
sort2 = rdd.sortByKey(True,3).glom().collect()
print(sort1)
print(sort2)
输出:
[[('a', 1), ('f', 2)], [('d', 3), ('c', 4), ('b', 5)]]
[[('a', 1), ('b', 5), ('c', 4), ('d', 3), ('f', 2)]]
[[('a', 1), ('b', 5)], [('c', 4), ('d', 3)], [('f', 2)]]
在提交spark任务运行后,日志中会输出tracking URL即任务的日志链接。在浏览器中打开tracking URL后,默认进入Jobs页。Jobs展示的是整个spark应用任务的job整体信息:
Job默认都是串行提交运行的,如果Job间没有依赖,可以使用多线程并行提交Job,实现Job并发。
在Jobs页面点击进入某个Job之后,可以查看某一Job的详细信息:
在Job Detail页点击进入某个stage后,可以查看某一stage的详细信息:
storage页面能看出application当前使用的缓存情况,可以看到有哪些RDD被缓存了,以及占用的内存资源。如果job在执行时持久化(persist)/缓存(cache)了一个RDD,那么RDD的信息可以在这个选项卡中查看。
点击某个RDD即可查看该RDD缓存的详细信息,包括缓存在哪个Executor中,使用的block情况,RDD上分区(partitions)的信息以及存储RDD的主机的地址。
Environment选项卡提供有关Spark应用程序(或SparkContext)中使用的各种属性和环境变量的信息。用户可以通过这个选项卡得到非常有用的各种Spark属性信息,而不用去翻找属性配置文件。
Executors选项卡提供了关于内存、CPU核和其他被Executors使用的资源的信息。这些信息在Executor级别和汇总级别都可以获取到。一方面通过它可以看出来每个excutor是否发生了数据倾斜,另一方面可以具体分析目前的应用是否产生了大量的shuffle,是否可以通过数据的本地性或者减小数据的传输来减少shuffle的数据量。
SQL选项卡(只有执行了spark SQL查询才会有SQL选项卡)可以查看SQL执行计划的细节,它提供了SQL查询的DAG以及显示Spark如何优化已执行的SQL查询的查询计划。