工具采集文章( 如何采集其资源和性能指标为后续分析使用,如性能优化)
优采云 发布时间: 2022-01-15 03:14工具采集文章(
如何采集其资源和性能指标为后续分析使用,如性能优化)
背景
主要介绍如何在不修改用户程序的情况下采集将spark应用的资源和性能指标供平台进行后续分析,如性能优化、资源使用定价等。
分析挑战 在应用程序级别关联大量流程的指标
在分布式环境中,多个 Spark 应用程序运行在同一台服务器上,每个 Spark 应用程序都有大量的进程(例如数千个执行程序)运行在多台服务器上。
需要一个可以采集每个流程的指标并将它们与每个应用程序的流程相关联的解决方案
我们不知道这些过程何时开始以及需要多长时间。为了能够在这样的环境中采集指标,分析器需要自动启动每个进程。
使指标采集对任意用户代码无干扰
为了跟上不断增长的数据基础设施,我们需要能够随时测量任何应用程序,而无需更改代码。
例如,如果我们在 Hadoop 分布式文件系统 (HDFS) NameNode 上遇到高延迟,我们希望检查从每个 Spark 应用程序观察到的延迟,以确保这些问题不会被复制。由于 NameNode 客户端代码嵌入在我们的 Spark 库中,因此修改其源代码以添加此特定指标是很麻烦的。
由 JVM Profiler 引入
主要启发构建更*敏*感*词*分析器
JVM Profiler 收录三个关键功能,可以更轻松地采集性能和资源使用指标,然后将这些指标(例如 Apache Kafka)提供给其他系统进行进一步分析:
JVM Profiler 使用场景实现细节和可扩展性
为了使实现尽可能无缝,JVM Profiler 具有非常简单和可扩展的设计。可以轻松添加额外的分析器实现来采集更多指标,还可以部署自己的自定义报告器以将指标发送到不同的系统进行数据分析。
一旦进程启动,JVM Profiler 代码就会通过 Java 代理参数加载到 Java 进程中。它由三个主要部分组成:
记者
如何自定义 Reporter 以发送指标
用户可以实现自己的报告器并使用 -javaagent 选项指定它:
-javaagent:jvm-profiler-0.0.5.jar= reporter=com.uber.profiling.reporters.CustomReporter
Uber 数据基础设施中的 JVM Profiler 集成
基础设施集成实施:
如何实现扩展设计
整体流程:
部署
spark:将jvm-profiler jar包上传到hdfs,提交任务时指定参数
hive:将jar部署到libs对应的hiveserver2节点
总结
本文主要介绍了优步开源项目jvm-profiler的背景、设计原理和架构,然后针对采集spark和hive任务的资源消耗相关指标设计了一套实现方案,可用于后续分析和资源调优。
参考