通过可视化更好的了解你的Spark应用

简介: 图的最大价值是它会推动我们去注意到那些我们从未预料到的东西。 – John Tukey Spark 1.4中对Spark UI进行改进,更加突出可视化的效果。我们来看一下他的主要的改动,主要包含三个方面: Spark事件的时间线视图 执行的DAG图 Spark Streaming 的可视化

图的最大价值是它会推动我们去注意到那些我们从未预料到的东西。
– John Tukey

Spark 1.4中对Spark UI进行改进,更加突出可视化的效果。我们来看一下他的主要的改动,主要包含三个方面:

  • Spark事件的时间线视图
  • 执行的DAG图
  • Spark Streaming 的可视化统计数据

这一篇主要会将前面的2块,最后的一块请见下一篇

Spark事件的时间线视图

从早前的版本开始Spark events就已经是Spark API的一部分了。在最新的版本里面,Spark UI会在时间线上显示这些events,让events的相对的顺序和交织能够一目了然。

时间线视图在三个层次上有效:所有的job,单个job以及单个stage
在默认展示页上,时间线显示一个应用中包含所有作业的Spark events。见下图

Screen_Shot_2015_06_19_at_1_55_07_PM_1024x481
events的顺序在这里是非常简单的。在所有的executors都注册上来以后,应用并行运行了4个job,其中一个失败了其他的都成功了。然后,当所有的job都完成以后,应用退出了。executors也都被移除了。让我们点击其中一个job

Screen_Shot_2015_06_19_at_1_56_30_PM_1024x426
此作业运行word count统计3个文件,并在最后join结果。从时间轴看,很显然,3个word count并行运行,因为它们不依赖于对方。然而,最后的join依赖于3个stage的结果,并因此需要等待3个stage结束才能开始。让我们进一步看看里面的一个阶段。

Screen_Shot_2015_06_19_at_1_57_36_PM_1024x823

这个stage有20个partition(不是全部显示)传播横跨4台机器。每个条代表stage的单个任务。从这个时间视图,我们可以得到有关这个stage的几点启示。首先,整个机器的partition分布相当不错。其次,大多数的task执行时间是大于网络或I / O的开销,因为我们shuffle的数据非常少。第三,我们可以通过分配给executor更多的core来提高并行的程度;目前看来,每个执行器可同时执行不超过两个任务。

我想借此机会展示在Spark中使用时间视图的另一个特点:动态分配。该特征允许Spark基于负载动态的缩放executor的数量,这样集群资源得到更有效的共享。让我们来看看时间视图上的表现。

Screen_Shot_2015_06_19_at_1_59_30_PM_1024x424

首先要注意的是,应用在job过程中获得executors,而不是提前保留它们。然后,在第一个job结束后不久,用于该作业的executors变为空闲并返回到集群中去。这就允许同一集群中运行的其他应用在其间来使用他们,从而增加群集利用率。只有当一个新的job进来的时候,我们的Spark应用程序才需要全新的一组executors来运行它。

能够通过时间线视图来查看Spark events对确定应用程序中的瓶颈非常有用。接着下一步就能够把一个特定的task或者stage映射到Spark操作上去,找到原因。

执行的DAG图

第二个增加到Spark中的可视化是每一个job的执行的DAG。在Spark中,job与一个组织在有向无环图(DAG)中的RDD的链关联在一起, 看起来像下面这样:
Screen_Shot_2015_06_19_at_2_00_59_PM

这是一个简单的word count job。首先,它执行了一个textFile的操作来读取在HDFS上的输入文件,然后flatMap操作会split每一行成为独立的单词,然后把他们映射成(word,1)这样的pair,最后使用reduceByKey操作来对word的数量求和。

蓝色框指的是用户在他/她的代码调用Spark操作。在这些框里的点代表对应操作下创建的RDDs。该操作本身是由它们所在的stage来划分的。

从这个可视化中我们能有所发现。首先,它的Spark的流水线优化并不是由shuffle阶段来分割的。尤其是,从HDFS读取输入partition后,每个执行程序直接在task中执行flatMap和map,避免了与其他的stage产生影响。

其次,RDDs其中之一被缓存在第一个stage(绿色高亮)。由于操作包括了从HDFS读,缓存了这个RDD意味着将来在此RDD关联计算的时候可以从存储器而不是从HDFS来快速的访问这部分原始文件的子集。

DAG可视化的复杂的job上会有最明显的价值。举个例子,在MLlib的交替最小二乘(ALS)执行计算两个因子矩阵迭代的近似结果。这涉及到一系列的map,join,groupByKey等操作。

Screen_Shot_2015_06_19_at_2_02_25_PM_1024x727
值得注意的是,在ALS ,在正确的地方缓存对于性能来说至关重要,因为该算法重用在每个迭代中前一次计算的结果。随着DAG可视化,用户和开发人员现在可以一眼找出RDDs是否正确缓存,如果没有,也很快明白为什么一个实现的速度很缓慢。

和时间线视图一样,DAG允许用户点击进入一个stage并展开其内部的详细信息。见下图。

Screen_Shot_2015_06_19_at_2_03_21_PM_553x1024

在stage视图,所有属于此阶段的RDDs的细节会自动展开。现在用户可以快速找到具体的RDDs信息而不必用鼠标在上面悬停来获取信息寻找要的点。

最后,我想强调一下DAG可视化和 SparkSQL之间的一个初步的集成。对比更接近物理实体层面的Spark操作,Spark SQL用户显然更熟悉一些高级操作,因此一些高级操作更需要被可视化。其结果类似将一个SQL查询计划映射到底层执行的DAG。

Screen_Shot_2015_06_19_at_2_04_05_PM_1024x879

Spark Streaming的可视化部分也在1.4中集成了,不过会在另一个独立的介绍中放出。

在不久的将来,Spark UI会理解更高级别的库的语义,从而提供更多相关的细节。Spark SQL将会有自己独立的标签。而Spark core,当你鼠标悬停在RDD上的时候一些额外的信息类似partition的数量,调用点,缓存百分比都会在DAG上展示。

原文出处
https://databricks.com/blog/2015/06/22/understanding-your-spark-application-through-visualization.html

相关实践学习
数据湖构建DLF快速入门
本教程通过使⽤数据湖构建DLF产品对于淘宝用户行为样例数据的分析,介绍数据湖构建DLF产品的数据发现和数据探索功能。
快速掌握阿里云 E-MapReduce
E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、HBase,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。 本课程主要介绍阿里云 E-MapReduce 的使用方法。
目录
相关文章
|
3月前
|
机器学习/深度学习 SQL 分布式计算
Apache Spark 的基本概念和在大数据分析中的应用
介绍 Apache Spark 的基本概念和在大数据分析中的应用
157 0
|
3月前
|
机器学习/深度学习 SQL 分布式计算
介绍 Apache Spark 的基本概念和在大数据分析中的应用。
介绍 Apache Spark 的基本概念和在大数据分析中的应用。
|
6月前
|
SQL 分布式计算 Java
Spark入门指南:从基础概念到实践应用全解析
在这个数据驱动的时代,信息的处理和分析变得越来越重要。而在众多的大数据处理框架中, Apache Spark 以其独特的优势脱颖而出。
65 0
|
6月前
|
分布式计算 安全 Java
SPARK 应用如何快速应对 LOG4J 的系列安全漏洞
SPARK 应用如何快速应对 LOG4J 的系列安全漏洞
|
1月前
|
机器学习/深度学习 分布式计算 监控
典型的Spark应用实例
典型的Spark应用实例
38 1
|
7月前
|
SQL 机器学习/深度学习 分布式计算
Apache Spark 的基本概念和在大数据分析中的应用
Apache Spark 的基本概念和在大数据分析中的应用
|
6月前
|
SQL 分布式计算 Java
Spark入门指南:从基础概念到实践应用全解析
Spark入门指南:从基础概念到实践应用全解析
|
9月前
|
机器学习/深度学习 存储 分布式计算
Hadoop生态系统中的机器学习与数据挖掘技术:Apache Mahout和Apache Spark MLlib的应用
Hadoop生态系统中的机器学习与数据挖掘技术:Apache Mahout和Apache Spark MLlib的应用
|
10月前
|
机器学习/深度学习 SQL 分布式计算
介绍 Apache Spark 的基本概念和在大数据分析中的应用
介绍 Apache Spark 的基本概念和在大数据分析中的应用
|
11月前
|
分布式计算 Ubuntu Java
使用IntelliJ Idea开发Spark Streaming流应用程序
使用IntelliJ Idea开发Spark Streaming流应用程序