我们正试图将我们的作业从Hadoop 1.0.3迁移到Hadoop 2(准确地说是Hadoop 2.8.1,单节点集群)。我们正在使用YARN来管理我们的地图减少工作。我们注意到的一个差异是,计划执行的每个映射或减少任务都有两个Linux进程。例如,对于我们的任何一个reduce任务,我们都会发现以下两个正在执行的过程:
hadoop 124692 124690 0 12:33?00:00:00/bin/bash-c/opt/java/bin/java-Djava.net.prpreferPv4Stack=true-Dhadoop.metrics.log.level=WARN-Xmx5800M-XX:UsePerfData-Djava.io.tmpdir=/tmp/hadop-hadoop/nm local-dir/usercache/hadop/appcache/application_1510651062679_0001/container_1510651062679_0001_01_000278/tmp-Dlog4j.configuration=container-log4j.properties-Dyarn.app.container.log.dir=/opt/hadoop/hadoop-2.8.1/logs/userlogs/application_1510651062679_0001/contacter_15106206679_0001_01_000278-Dyarn.app/container.log.filesize=0-Dhadoop.root.logger=INFO,CLA-Dhadoo.root.log=syslog-Dyarn.app.mapreduce.shuffle.log=INFO,shuffleCLA-Dyarn.app.mapreduce.shuffle.log=syslog.shuffle-Dyarn.app/mapreduce.shuffle.log.filesize=0-Darn.app.mapreduce.log.backups=0 org.apache.hadoop.mapred.YarnChild 192.168.101.29 33929 attempt_15106106679_0001_r_000135_0 278 1>opt/haop/hadoop-2.8.1/logs/userlogs/application_1510651062679_0001/contacter_151061062679_0001_01_000278/stdout 2>opt/haop/hadoop-2.8.1/logs/userlogs/application_1510651062679_0001/contacter_151061062679_0001_01_000278/stderr
hadoop 124696 124692 74 12:33?00:10:30/opt/java/bin/java-Djava.net.prpreferPv4Stack=true-Dhadoop.metrics.log.level=WARN-Xmx5800M-XX:-UsePerfData-Djava.io.tmpdir=/tmp/hadoop hadoop/nm local-dir/usercache/hhadoop/appcache/application_1510651062679_0001/container_1510651062679_0001_01_000278/tmp-Dlog4j.configuration=container-log4j.properties-Dyarn.app.container.log.dir=/opt/hadoop/hadoop-2.8.1/logs/userlogs/application_1510651062679_0001/contacter_15106206679_0001_01_000278-Dyarn.app/container.log.filesize=0-Dhadoop.root.logger=INFO,CLA-Dhadoo.root.log=syslog-Dyarn.app.mapreduce.shuffle.log=INFO,shuffleCLA-Dyarn.app.mapreduce.shuffle.log=syslog.shuffle-Dyarn.app/mapreduce.shuffle.log.filesize=0-Dyarn.app.mapreduct.shuffly.log.backups=0
第二个进程是第一个进程的子进程。总之,我们看到,在我们的作业执行过程中,进程的总数比Hadoop1.0.3高得多,在Hadoop1.0.3中,每个map或reduce任务只有一个进程在执行。
a) 这可能是作业执行速度比Hadoop1.0.3慢的原因吗?
b) 这两个过程是预期的工作方式吗?
提前感谢你的建议。
仔细检查会发现
Pid 124692 is /bin/bash
Pid 124696 is /opt/java/bin/java
/bin/bash是一个容器进程,它在封闭的环境(CPU、RAM仅限于一个容器)中生成Java进程
你可以把它想象成一个虚拟机,在里面你可以运行自己的进程。虚拟机及其内部运行的进程都将具有父子关系。
请详细阅读Linux容器以了解更多信息。