我正在以伪分布模式运行Hadoop,以便在我的本地计算机上进行测试。我想在JVisualVM中监视我的映射器和缩减器的内存和CPU使用情况。但是,在JVisualVM的本地应用程序列表中,我只看到org.apache.hadoop.util.RunJar
。
top
中,它看起来像是:两个名为“java”的进程在我的两个映射器运行时使用100%CPU。)如果它们是单独的进程,为什么JVisualVM不将它们列为我可以使用的应用程序显示器?org.apache.hadoop.util.RunJar
进程中?如果是这样,(a)为什么我只在JVisualVM采样器中看到Tool
和ToolRunner
,而不是任何mapper / reducer代码,以及(b)为什么JVisualVM在{{1}时报告几乎0%的CPU报告100%?我是否可以通过某种方式修改我的映射器/缩减器,以便JVisualVM可以看到它们,至少在以伪分布模式进行调试时?
为了完整起见,我应该说我正在从Cloudera运行Hadoop 0.20。 (它是使用top
存储库中的apt-get install hadoop-0.20-conf-pseudo
在Ubuntu上安装的。尽管Cloudera在版本号中放置了2.x,但它不是YARN,它是最初的Hadoop。)
http://archive.cloudera.com/cdh4/ubuntu/precise/amd64/cdh precise-cdh4 contrib
答案 0 :(得分:1)
当您使用hadoop jar [your_args]
启动应用程序时,实际上命令为java -jar org.apache.hadoop.util.RunJar [your_args]
。因此,用于启动MapReduce作业的驱动程序正在RunJar
进程中运行。
默认情况下,映射器和Reducer作为单独的进程运行。您无法在JVisualVM中看到它,因为JVisualVM没有正确的权限。映射器和缩减器在用户mapred
下启动。因此,如果您想使用JVisualVM,则需要使用sudo -E -u mapred jvisualvm
。