如何用 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——收集方法参数的指标,其中包括类名、方法名和进程名。

目录
相关文章
|
4天前
|
缓存 Prometheus 监控
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
24 3
|
4天前
|
监控 Java 开发者
Java面试题:如何使用JVM工具(如jconsole, jstack, jmap)来分析内存使用情况?
Java面试题:如何使用JVM工具(如jconsole, jstack, jmap)来分析内存使用情况?
11 2
|
20天前
|
存储 Java C++
Java虚拟机(JVM)在执行Java程序时,会将其管理的内存划分为几个不同的区域
【6月更文挑战第24天】Java JVM管理内存分7区:程序计数器记录线程执行位置;虚拟机栈处理方法调用,每个线程有独立栈;本地方法栈服务native方法;Java堆存储所有对象实例,垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息;运行时常量池存储常量;直接内存不属于JVM规范,通过`java.nio`手动管理,不受GC直接影响。
26 5
|
20天前
|
存储 Java C++
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据,如局部变量和操作数;本地方法栈支持native方法;堆存放所有线程的对象实例,由垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息和常量;运行时常量池是方法区一部分,保存符号引用和常量;直接内存非JVM规范定义,手动管理,通过Buffer类使用。Java 8后,永久代被元空间取代,G1成为默认GC。
24 2
|
24天前
|
监控 算法 Java
Java虚拟机(JVM)使用多种垃圾回收算法来管理内存,以确保程序运行时不会因为内存不足而崩溃。
【6月更文挑战第20天】Java JVM运用多种GC算法,如标记-清除、复制、标记-压缩、分代收集、增量收集、并行收集和并发标记,以自动化内存管理,防止因内存耗尽导致的程序崩溃。这些算法各有优劣,适应不同的性能和资源需求。垃圾回收旨在避免手动内存管理,简化编程。当遇到内存泄漏,可以借助VisualVM、JConsole或MAT等工具监测内存、生成堆转储,分析引用链并定位泄漏源,从而解决问题。
30 4
|
1月前
|
存储 缓存 安全
JVM(三)-运行时数据区(栈、程序计数器)
JVM(三)-运行时数据区(栈、程序计数器)
16 2
|
17天前
|
存储 缓存 Java
JVM的即时编译(JIT)优化原理:加速程序的执行
JVM的即时编译(JIT)优化原理:加速程序的执行
|
17天前
|
Java UED 开发者
JVM逃逸分析原理解析:优化Java程序性能和内存利用效率
JVM逃逸分析原理解析:优化Java程序性能和内存利用效率
|
19天前
|
Arthas 监控 数据可视化
JVM监控工具
Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。
23 0
|
1月前
|
JSON 监控 Java
编写电脑监控软件的Groovy脚本:JVM生态系统的整合与扩展
使用Groovy编写脚本监控Java虚拟机(JVM)的健康状况,包括内存使用和CPU利用率。脚本可自动将数据提交至指定网站,确保及时发现系统问题,防止服务中断。通过结合Runtime和OperatingSystemMXBean类获取系统信息,利用Groovy的HTTP客户端库POST数据到监控网站,实现高效稳定的系统监控。
103 0