我正在伪分布式模式下运行 Hadoop,以便在本地计算机上进行测试。我想在 JVisualVM 中监视映射器和缩减器的内存和 CPU 使用情况。但是,在 JVisualVM 的本地应用程序列表中,我只看到 org.apache.hadoop.util.RunJar
.
- 映射器和缩减器是否作为单独的进程运行? (在
top
中,看起来它们是:当我的两个映射器运行时,两个名为“java”的进程正在使用 100% CPU。)如果它们是单独的进程,为什么 JVisualVM 不将它们列为我可以监视的应用程序? - 映射器和缩减器是否包含在
org.apache.hadoop.util.RunJar
中过程?如果是这样,(a) 为什么我只看到Tool
和ToolRunner
在 JVisualVM Sampler 中,没有任何映射器/ reducer 代码,以及 (b) 为什么 JVisualVM 在top
时报告几乎 0% CPU报告 100%?
有什么方法可以修改我的映射器/化简器,以便 JVisualVM 可以看到它们,至少在伪分布式模式下调试时如此?
为了完整起见,我应该说我正在运行 Cloudera 的 Hadoop 0.20。 (它是使用 apt-get install hadoop-0.20-conf-pseudo
存储库中的 http://archive.cloudera.com/cdh4/ubuntu/precise/amd64/cdh precise-cdh4 contrib
安装在 Ubuntu 上的。尽管 Cloudera 在版本号中添加了 2.x,但它不是 YARN,而是原始的 Hadoop。)
% hadoop version
Hadoop 2.0.0-cdh4.4.0
Subversion file:///var/lib/jenkins/workspace/generic-package-ubuntu64-12-04/CDH4.4.0-Packaging-Hadoop-2013-09-03_18-48-35/hadoop-2.0.0+1475-1.cdh4.4.0.p0.23~precise/src/hadoop-common-project/hadoop-common -r c0eba6cd38c984557e96a16ccd7356b7de835e79
Compiled by jenkins on Tue Sep 3 19:33:54 PDT 2013
From source with checksum ac7e170aa709b3ace13dc5f775487180
This command was run using /usr/lib/hadoop/hadoop-common-2.0.0-cdh4.4.0.jar
最佳答案
当您使用hadoop jar [your_args]
启动应用程序时,实际上真正的命令是java -jar org.apache.hadoop.util.RunJar [your_args]
。因此,用于启动 MapReduce 作业的驱动程序正在 RunJar
进程中运行。
默认情况下,映射器和化简器作为单独的进程运行。您在 JVisualVM 中看不到它是因为 JVisualVM 没有正确的权限。映射器和缩减器在用户 mapred
下启动。所以如果你想使用JVisualVM,你需要使用sudo -E -u mapred jvisualvm
。
关于java - 如何使用VisualVM以伪分布式模式监控Hadoop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19060651/