`
m635674608
  • 浏览: 5028803 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

通过可视化来了解你的Spark应用程序

 
阅读更多

【编者按】在"Spark 1.4:SparkR发布,钨丝计划锋芒初露"一文中,我们有简单地介绍了1.4版本给Spark注入的新特性,在各个组件的介绍中也提到了新UI给用户带来的便捷。而从本文开始,我们将通过Databricks Blog上的系列文章深入了解新版本中的数据可视化,首先分享的是这个系列的第一篇博文——Understanding your Spark application through visualization,作者 Andrew Or。

 

以下为译文

图片最大的价值就是它可以让我们发现未曾预期的事情——John Tukey。

在过去,Spark UI一直是用户应用程序调试的帮手。而在最新版本的Spark 1.4中,我们很高兴地宣布,一个新的因素被注入到Spark UI——数据可视化。在此版本中,可视化带来的提升主要包括三个部分:

 

  • Spark events时间轴视图
  •  Execution DAG
  • Spark Streaming统计数字可视化

我们会通过一个系列的两篇博文来介绍上述特性,本次则主要分享前两个部分——Spark events时间轴视图和Execution DAG。Spark Streaming统计数字可视化将在下一篇博文中解释。

 

Spark events时间轴视图

从Spark 初期版本至今,Spark events一直是面向用户API的一部分。在最新的1.4版本,Spark UI将会把这些events在一个时间轴中显示,让用户可以一眼区别相对和交叉顺序。

时间轴视图可以覆盖3个等级:所有Job,指定的某个Job,以及指定的某个stage。在下图中,时间轴显示了横跨一个应用程序所有作业中的Spark events。

这里的events顺序相对简单,在所有 executors 注册后,在应用程序并行运行的4个job中,有一个失败,其余成功。当所有工作完成,并在应用程序退出后,executors同样被移除。下面不妨点击关注其中的一个job:

该job在3个文件中做word count,最后join并输出结果。从时间轴上看,很明显, 3个 word count stages 并行运行,因为它们不互相依赖。同时,最后一个阶段需要依赖前3个文件word count的结果,所以相应阶段一直等到所有先行阶段完成后才开始。下面着眼单个stage:

这个stage被切分为20个partitions,分别在4台主机上完成(图片并没有完全显示)。每段代表了这个阶段的一个单一任务。从这个时间轴来看,我们可以得到这个stage上的几点信息。

首先,partitions在机器中的分布状态比较乐观。其次,大部分的任务执行时间分配在原始的计算上,而不是网络或I/ O开销。这并不奇怪,因为传输的数据很少。最后,我们可以通过给executors分配更多的核心来提升并行度;从目前来看,每个executors可以同时执行不超过两个任务。

借此机会展示一下Spark通过该时间轴获得的另一个特性——动态分配。该特性允许Spark基于工作负载来动态地衡量executors 的数量,从而让集群资源更有效地共享。不妨看向下张图表:

首先要注意的是,这个应用程序是在工作的过程中获得executors ,而不是预先分配好。在第一个job结束后,用于该job的executors将闲置并返回到集群。因此在这个期间,同集群中运行的其他应用程序可以获得这些资源,从而增加集群资源利用率。只有当一个新的job执行时,Spark应用程序才会获取一组新的executors 来运行它。

在一个时间轴中查看Spark events的能力有助于确定应用程序瓶颈,从而在调试过程中进行更有针对性的优化。

 

Execution DAG

在新版本的Spark中,第二个可视化聚焦DAG执行的每个作业。在Spark中,job与被组织在DAG中的一组RDD依赖性密切相关,类似下图:

这个job执行一个简单的word cout。首先,它执行一个textFile从HDFS中读取输入文件,然后进行一个flatMap操作把每一行分割成word,接下来进行一个map操作,以形成form(word,1)对,最后进行一个reduceByKey操作总结每个word的数值。

可视化的蓝色阴影框对应到Spark操作,即用户调用的代码。每个框中的点代表对应操作下创建的RDDs。操作本身由每个流入的stages划分。

通过可视化我们可以发现很多有价值的地方。首先,根据显示我们可以看出Spark对流水线操作的优化——它们不会被分割。尤其是,从HDFS读取输入分区后,每个executor随后即对相同任务上的partion做flatMap和map,从而避免与下一个stage产生关联。

其次,RDDs在第一个stage中会进行缓存(用绿色突出表示),从而避免对HDFS(磁盘)相关读取工作。在这里,通过缓存和最小化文件读取可以获得更高的性能。

DAG可视化的价值在复杂jobs中体现的尤为明显。比如下图中的ALS计算,它会涉及到大量的map、join、groupByKey操作。

值得注意的是,在ALS中,缓存准确性将对性能产生的影响非常大,因为该算法在每次迭代中会重度使用之前步骤产生的结果。如今通过DAG可视化,用户和开发人员可以一目了然地查明RDDS是否被恰当地缓存,如果没有,可以快速理理解实现缓慢的原因。

与时间轴视图一样,DAG可视化允许用户点击进入一个stage进行更详细地观察。下图描述了ALS中一个独立的stage。

在stage视图中,属于这个stage的所有RDDS细节被自动展开。当前,用户可以快速地找到具体的RDDS信息,而不必job页面通过悬停各个点来猜测和检查。

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

与SparkStreaming的整合在Spark 1.4版本中同样有所实现,这里在下一篇博文中会详细介绍。

在不久的将来,Spark UI可以更理解一些更高级别的函数库语义,以提供更多相关细节。 同时,Spark SQL将与Spark Streaming一样获得类似的标签。而在Spark Core中,当用户查看RDD时,类似partitions数量、调用点、缓存率都将会被可视化。

在此感谢社区中所有对可视化工作有所贡献的组织和个人,更特别感谢NTT Data的@sarutak在时间轴可视化特性中的主要贡献。

英文原文:Understanding your Spark application through visualization(翻译/王辉  责编/仲浩) 

文章来源:http://www.csdn.net/article/2015-07-08/2825162

 
1
分享到:
评论

相关推荐

    源码地java spark淘宝大数据分析可视化系统(源码+数据+报告)址.zip

    本项目“源码地java spark淘宝大数据分析可视化系统”提供了一个全面的解决方案,它结合了Java和Apache Spark的强大功能,对淘宝平台上的海量数据进行深度挖掘与高效处理,并通过可视化界面展示分析结果,帮助企业更...

    基于Spark的工业大数据处理可视化平台应用研究.pdf

    本研究探讨了基于Apache Spark技术栈构建的工业大数据处理可视化平台的应用,并通过JavaWeb技术实现了用户友好的界面。研究的目的是让不具备大数据开发平台底层知识的用户能够通过Web界面自行定制数据处理和分析任务...

    python制作20个炫酷的数据可视化大屏(含源码)

    通过学习这些源代码,开发者不仅可以了解如何利用Python进行数据可视化,还能深入理解不同行业的数据应用场景和处理方法。对于提升数据驱动的决策能力,以及掌握大数据时代的技术趋势,这些实例都是宝贵的学习资源。

    基于Spark的大数据分析平台的设计与实现

    由于Scala的强大类型系统和函数式编程特性,使其成为实现Spark应用程序的理想选择。 ##### 2.3 Spark SQL Spark SQL是Spark的一个模块,用于结构化数据处理。它可以用来读取结构化的数据,比如CSV、JSON或Parquet...

    大数据技术分享 Spark技术讲座 从笔记本到云原生应用程序的Spark 共23页.pdf

    Oshinko还支持使用Source-to-Image(S2I)技术来构建容器镜像,便于将Spark应用部署到Kubernetes集群中。 5. **实践经验分享** - **Jupyter Notebook到云原生应用**:讲座通过具体的步骤演示了如何将一个基于...

    使用MySQL、SQLite、Tableau、Apache Spark的SQL数据分析和可视化项目 仅供学习参考用代码.rar

    在数据科学领域,SQL(Structured Query Language)是用于管理和处理关系型数据库的标准化语言,而MySQL、SQLite、Apache Spark以及Tableau都是与SQL紧密相关的工具,用于数据分析和可视化。本项目集成了这些技术,...

    基于Spark框架的新闻网大数据实时分析可视化系统项目.zip

    通过学习Spring Boot,我了解了现代化的Java Web开发方式,并通过实践构建了一些简单的Web应用程序。我还意识到在学习过程中遇到的困难和挑战是正常的,通过不断的努力和学习,我能够克服这些困难并取得进步。 在...

    可视化133大屏.rar

    同时,可能还需要服务器如Tomcat或Jetty来部署和运行Java应用程序。 7. **数据集成与ETL**:数据抽取(Extract)、转换(Transform)和加载(Load)过程是大屏数据准备的关键,Java可以用于编写ETL脚本,整合来自...

    基于豆瓣电影爬虫及Spark数据分析可视化设计源码.zip

    标题中的“基于豆瓣电影爬虫及Spark数据分析可视化设计源码”揭示了这个项目的主要组成部分:一个用于抓取豆瓣电影数据的爬虫程序,以及利用Apache Spark进行数据分析和可视化的部分。接下来,我将详细解释这些知识...

    spark音乐专辑数据分析项目.zip

    6. **数据可视化**: 项目中使用了Flask,这是一个轻量级的Python Web应用框架,用于构建数据可视化应用程序。通过Flask,我们可以创建RESTful API,将Spark分析结果以图表或仪表盘的形式展示出来,便于非技术人员...

    spark-assembly.jar,joda-time.jar.jfreechart.jar,jcommon.jar

    总结来说,这些JAR文件是开发和运行Spark应用程序的关键组件,它们提供了Spark的核心功能、日期时间处理能力、数据可视化工具以及基础的图形支持。了解和正确使用这些库可以帮助开发者更有效地构建和执行大数据处理...

    spark-2.4.0源码

    10. **Spark UI和事件日志**:Spark提供了Web UI来监控作业状态,源码中可以看到如何实现这些可视化工具,同时Spark还支持事件日志,便于后期分析作业行为。 深入理解Spark源码,有助于开发者优化应用程序性能、...

    application_process_Spark!_spark_log_applications_源码

    本文将深入探讨 Spark 应用程序的日志处理,以及如何通过 `application_process.sh` 脚本来理解和分析 Spark 日志。 Spark 应用程序在运行时会产生大量的日志信息,这些日志对于调试、性能优化和故障排查至关重要。...

    集团企业数字化转型大数据可视化展现平台建设及应用方案 集团企业大数据可视化平台建设方案共692页.docx

    对于集团型企业而言,如何高效地整合内部数据资源,并通过可视化手段提升决策效率,成为了一个重要的议题。在这样的背景下,建设一个大数据可视化展现平台显得尤为迫切。 **1.2 建设目标** 本项目的建设旨在构建一...

Global site tag (gtag.js) - Google Analytics