java - 如何对 Hadoop 集群进行性能分析

标签 java hadoop mapreduce apache-spark profiling

有谁知道如何对 Hadoop 集群中运行的所有 java 代码进行性能分析?

我会用一个简单的例子来解释。如果我们做一个本地java开发,我们可以运行Yourkit来测量每个类的每个方法占用的CPU百分比。我们可以看到类 A 调用了方法 X,这占用了整个应用程序 90% 的执行时间,然后修复了代码中的低效问题。

但是如果我们正在做一个 mapreduce 作业并在集群中运行它,我也想看看是什么东西是缓慢的:我们的 map/reduce 代码,或者框架本身。所以,我想要一个服务来获取有关每个类/方法调用的信息及其执行时间百分比,将其收集到 HDFS 中的某处,然后分析方法调用树和 CPU 消耗。

问题:有人知道这样的解决方案是否存在吗?

附言 注意:我知道这样的事情会减慢集群的速度。而且我知道这样的事情应该在测试集群上或与客户达成协议(protocol)来完成。现在的问题是“是否存在这样的东西?”。谢谢。

最佳答案

我解决了这个问题。这里http://ihorbobak.com/index.php/2015/08/05/cluster-profiling/您可能会找到有关如何执行此操作的详细说明。

概要分析是如何完成的:

  • 在集群的每个主机上,我们都放置了一个特殊的 jar 文件(StatsD JVM Profiler 的一个模组),其中包含一个 javaagent,该 javaagent 将嵌入到该机器上运行的每个 JVM 进程中。
  • “javaagent”是一段代码,用于检测在 JVM 上运行的程序。 Profiler 的 javaagent 收集堆栈跟踪 来自 JVM 每秒处理 100 次并将它们发送到专用的 运行名为 InfluxDB ( https://influxdb.com ) 的 NoSQL 数据库的主机。
  • 运行分布式应用程序并收集堆栈跟踪信息后,我们在此数据库上运行一组脚本以提取数据 关于类/方法执行并使用 Flame 可视化此数据 图。

火焰图是由 Brendann Gregg 发明的 http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html . Brendan 有一段非常好的视频解释了它是如何工作的:https://www.youtube.com/watch?v=nZfNehCzGdw .这个作者还有一本非常好的书“系统性能:企业和云”,我强烈推荐阅读。

关于java - 如何对 Hadoop 集群进行性能分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31079212/

相关文章:

java - 在 map reduce spark 的设置键值对中插入一个 if 循环

hadoop - 试图了解 HBase

python - mrjob bad --steps 在 Hadoop 集群上使用 make_runner 时出错

java - Gradle 无法解析 Android Studio 中的依赖项

java - 查找错误 : real threat behind EI_EXPOSE_REP

java - 根据 Spark 中的值列表过滤 rdd

r - rHipe mapreduce获取正在处理的文件名

apache - 启动hadoop时出错

java - Pentaho RowListener ClassNotFoundException

java - 如何配置java客户端让couchbase自动重新连接?