如何进行Hadoop集群的性能分析

Iho*_* B. 5 java profiling hadoop mapreduce apache-spark

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

我将通过一个简单的示例进行解释。如果我们进行本地Java开发,则可以运行Yourkit来测量每个类的每个方法占用的CPU百分比。我们可以看到类A调用了方法X,这花费了整个应用程序90%的执行时间,然后修复了代码效率低下的问题。

但是,如果我们正在执行mapreduce工作并在集群中运行它,那么我也想看看是什么迟钝的东西:我们的map / reduce代码或框架本身。因此,我想拥有一个服务,该服务获取有关每个类/方法调用及其执行时间的信息,并将其收集到HDFS中,然后分析具有CPU消耗的方法调用树。

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

PS注意:我知道这样的事情会使群集速度变慢。而且我知道应该在测试集群上或与客户达成协议来完成此操作。现在的问题是“存在这样的东西吗?”。谢谢。

Iho*_* B. 6

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

简短摘要:如何完成分析:

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

火焰图是由Brendann Gregg发明的,网址为http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html。布伦丹(Brendan)有一个很好的视频,解释了它的工作原理:https : //www.youtube.com/watch?v=nZfNehCzGdw。我强烈建议阅读该作者写的一本非常不错的书“系统性能:企业和云”。


Ram*_*mzy 0

根据文档,您可以在 Driver 类中配置该设置,JobConf.setProfileEnabled(boolean)默认情况下该设置处于关闭状态。希望这能为您提供一个起点。

还有一个关于过程中的挑战的好博客和一个工具。仅供参考,不代表认可