如何用 Uber JVM Profiler 等可视化工具监控 Spark 应用程序?

简介:   关键要点  持续可靠地运行 Spark 应用程序是一项具有挑战性的任务,而且需要一个良好的性能监控系统。  - 在设计性能监控系统时有三个目标——收集服务器和应用程序指标、在时序数据库中存储指标,并提供用于数据可视化的仪表盘。  Uber JVM Profiler 被用于监控 Spark 应用程序,用到的其他技术还有 InfluxDB(用于存储时序数据)和 Grafana(数据可视化工具)。性能监控系统可帮助 DevOps 团队有效地监控系统,用以满足应用程序的合规性和 SLA。

  关键要点

  持续可靠地运行 Spark 应用程序是一项具有挑战性的任务,而且需要一个良好的性能监控系统。

  - 在设计性能监控系统时有三个目标——收集服务器和应用程序指标、在时序数据库中存储指标,并提供用于数据可视化的仪表盘。

  Uber JVM Profiler 被用于监控 Spark 应用程序,用到的其他技术还有 InfluxDB(用于存储时序数据)和 Grafana(数据可视化工具)。性能监控系统可帮助 DevOps 团队有效地监控系统,用以满足应用程序的合规性和 SLA。

  很多行业都在使用 Apache Spark 构建大数据处理应用程序。Spark 为此类应用程序提供了隐式数据并行性和容错性。这类应用程序可以是基于流式处理、批处理、SQL 数据集处理或机器学习。Spark 通过快速的内存数据处理引擎在集群中运行这些应用程序,并在数据管道中转换和处理大量数据。持续可靠地运行这些应用程序是一项具有挑战性的任务,需要一个良好的性能监控系统。随着 Spark 被各行各业广泛采用,性能监控、度量分析和调优 Spark 应用程序的问题越来越受到关注。Uber 最近开源了他们的 JVM Profiler。在本文中,我们将讨论如何扩展 Uber JVM Profiler,并将其与 InfluxDB 和 Grafana 一起用于监控和报告 Spark 应用程序的性能指标。

  Spark 应用程序性能监控系统

  要最大限度地利用可用资源并尽早发现可能存在的问题,需要一个性能监测系统。监控系统需要为运行中的系统提供综合性的状态报告,并在组件发生故障时发送警报。当我们需要在 Spark 集群中运行大规模分布式系统以及 Hadoop 生态系统的不同组件时,对细粒度性能监视系统的需求就变得不可或缺。Spark 应用程序在共享资源上执行数据的分布式处理,这使得 DevOps 团队的教程工作变得非常复杂。DevOps 团队必须有效地管理可用资源,并密切监控古玩系统的不同组件,以避免出现宕机。性能监控系统提供的完整堆栈可见性有助于 DevOps 团队了解系统行为,并对生产问题做出快速反应。这确保了 Spark 应用程序的可靠性、可伸缩性和性能。

  针对这种复杂系统的理想性能监控系统必须具备以下特性:

  监控系统应提供有关集群内每个组件的细粒度可见性。我们应该能够获得有关 CPU、内存、存储、本地文件和 HDFS 的磁盘 I/O、堆栈跟踪等详细指标。这些指标有助于快速诊断发生故障的实例。监控系统应该为在 Spark 上运行的应用程序提供代码级别度量(例如执行时间、方法的参数等)。这将有助于识别运行较慢的方法、磁盘热点等。监控系统应存储每一秒的指标,并允许我们通过浏览不同时间段的数据来分析指标。我们应该能够对这些数据进行二级和二级解剖。我们应该能够控制数据保留期,并在需要时轻松访问和分析过去的数据。这有助于分析当前趋势并预测未来趋势。监控系统应该要提供有效的方法,用于从连续收集的大量指标中提取有意义信息。包括使用 SQL 或 API 查询数据、过滤数据、聚合值和应用自定义分析。这有助于轻松转换和更快地分析数据。监控系统应该能够方便地访问从度量数据分析中推导出的信息,可以使用不同的形式(如图表等)在仪表盘中显示数据,可以基于主机、时间或作业对数据进行分类,用户应该能够进一步深入分析不同的数据点,能够为用户定义的阈值配置警报和通知。这有助于 DevOps 团队和组织的其他利益相关者在必要时快速获得所需的信息。

  在本文中,我们将使用开源工具和技术开发一个性能监控系统。Spark 应用程序性能监控系统的设计有三个目标:

  收集系统(驱动程序和执行程序)和应用程序代码的性能指标;将这些指标存储在持久存储中以进行时序分析(批量和实时);以图表的形式生成度量指标报告。

  Apache Spark 为指标提供了一个 web-ui 和 REST API。Spark 还提供各种接收器,包括控制台、JMX、Servlet、Graphite 等。还有一些其他可用的开源性能监控工具,如 dr-elephant、sparklint、prometheus 等。这些工具提供的指标主要是服务器级别的指标,其中有一些也提供应用程序的信息。

  Uber JVM Profiler 同时收集服务器级别和应用程序的度量指标。它可以从驱动程序、执行程序或任已 JVM 中收集所有指标(cpu、内存、缓冲池等)。它可以在不修改现有代码的情况下对其进行增强,因此可以收集有关方法、参数和执行时间的指标。为了存储用于时序分析的度量指标,我们将使用 InfluxDB,它是一个功能强大的时序数据库。我们将扩展 Uber JVM Profiler,并为 InfluxDB 添加一个新的 Reporter,这样就可以通过 HTTP API 保存度量数据。在图形化的仪表盘方面,我们将使用 Grafana,它将从 InfluxDB 查询指标数据。

  以下是用于 Spark 应用性能监控系统的工具和技术的详细信息。

  Uber JVM Profiler

  Uber JVM Profiler 是一个分布式的分析器,它从集群的不同节点收集性能指标和资源利用率指标。它作为 Java 代理与应用程序一起运行,并收集不同的度量指标。它将这些指标发布给指定的 Reporter,以进行进一步的分析和报告。Uber JVM Profiler 是为分析 Spark 应用程序而开发的,但它也可以用于分析任何基于 JVM 的应用程序。Uber JVM Profiler 有三个主要组件:

  Profiler:Uber JVM Profiler 内置了以下的 Profiler:

  CpuAndMemory Profiler——收集缓冲池(直接和映射)、垃圾回收(计数和时间)、堆内存(已提交和已使用)、非堆内存(已提交和已使用)、CPU(加载和时间)、内存池详细信息(EdenSpace、SurvivorSpace、TenuredGen、CodeCache、CompressedClassSpace、Metaspace)、vmHWM 和 vmRSS 指标。IO Profiler——收集 CPU 统计信息(idle、nice、system、user、iowait)和磁盘 IO 的读 / 写字节。Stacktrace Profiler——收集线程名称、线程状态和堆栈跟踪指标。ProcessInfo Profiler——收集代理版本、JVM 类路径、JVM 输入参数和 xmxBytes 指标。MethodDuration Profiler——收集方法执行时间的指标,其中包括类名、方法名和进程名。MethodArgument Profiler——收集方法参数的指标,其中包括类名、方法名和进程名。

目录
相关文章
|
1月前
|
JavaScript 前端开发 Java
jvm的jshell,学生的工具
本文介绍了JVM的jshell工具,它为Java平台添加了REPL(读取-评估-打印循环)功能,使得学习、探索编码和原型代码变得更加便捷,但作者认为其在实际开发中较为鸡肋。
29 1
jvm的jshell,学生的工具
|
17天前
|
Arthas 监控 数据可视化
JVM进阶调优系列(7)JVM调优监控必备命令、工具集合|实用干货
本文介绍了JVM调优监控命令及其应用,包括JDK自带工具如jps、jinfo、jstat、jstack、jmap、jhat等,以及第三方工具如Arthas、GCeasy、MAT、GCViewer等。通过这些工具,可以有效监控和优化JVM性能,解决内存泄漏、线程死锁等问题,提高系统稳定性。文章还提供了详细的命令示例和应用场景,帮助读者更好地理解和使用这些工具。
|
26天前
|
存储 监控 算法
JVM调优深度剖析:内存模型、垃圾收集、工具与实战
【10月更文挑战第9天】在Java开发领域,Java虚拟机(JVM)的性能调优是构建高性能、高并发系统不可或缺的一部分。作为一名资深架构师,深入理解JVM的内存模型、垃圾收集机制、调优工具及其实现原理,对于提升系统的整体性能和稳定性至关重要。本文将深入探讨这些内容,并提供针对单机几十万并发系统的JVM调优策略和Java代码示例。
46 2
|
28天前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
35 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
2月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
40 5
|
1月前
|
SQL 分布式计算 大数据
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
30 0
|
3月前
|
存储 算法 前端开发
JVM架构与主要组件:了解Java程序的运行环境
JVM的架构设计非常精妙,它确保了Java程序的跨平台性和高效执行。通过了解JVM的各个组件,我们可以更好地理解Java程序的运行机制,这对于编写高效且稳定的Java应用程序至关重要。
48 3
|
3月前
|
缓存 监控 算法
吃透 JVM 诊断方法与工具使用
【8月更文挑战第4天】深入了解并掌握JVM诊断需把握几大要点:1) 熟悉JVM内存模型,如堆、栈及方法区;2) 掌握垃圾回收机制与算法;3) 运用工具如`jps`(查看Java进程)、`jstat`(监控运行状态)、`jmap`(生成堆快照)、`jhat`(分析堆快照)、`jstack`(检查线程栈); 4) 利用专业工具如Eclipse Memory Analyzer分析堆转储文件查找内存泄漏; 5) 动态监控与调整JVM参数; 6) 结合日志分析性能瓶颈。通过实战案例加深理解,有效应对JVM性能问题。
|
3月前
|
C# 开发者 Windows
震撼发布:全面解析WPF中的打印功能——从基础设置到高级定制,带你一步步实现直接打印文档的完整流程,让你的WPF应用程序瞬间升级,掌握这一技能,轻松应对各种打印需求,彻底告别打印难题!
【8月更文挑战第31天】打印功能在许多WPF应用中不可或缺,尤其在需要生成纸质文档时。WPF提供了强大的打印支持,通过`PrintDialog`等类简化了打印集成。本文将详细介绍如何在WPF应用中实现直接打印文档的功能,并通过具体示例代码展示其实现过程。
282 0
|
3月前
|
运维 监控 Java
【JVM 调优秘籍】实战指南:JVM 调优参数全解析,让 Java 应用程序性能飙升!
【8月更文挑战第24天】本文通过一个大型在线零售平台的例子,深入探讨了Java虚拟机(JVM)性能调优的关键技术。面对应用响应延迟的问题,文章详细介绍了几种常用的JVM参数调整策略,包括堆内存大小、年轻代配置、垃圾回收器的选择及日志记录等。通过具体实践(如设置`-Xms`, `-Xmx`, `-XX:NewRatio`, `-XX:+UseParallelGC`等),成功降低了高峰期的响应时间,提高了系统的整体性能与稳定性。案例展示了合理配置JVM参数的重要性及其对解决实际问题的有效性。
94 0
下一篇
无影云桌面