Hadoop 2:为什么每个map或reduce任务都有两个linux进程?

时间:2017-11-14 12:45:01

标签: hadoop mapreduce yarn hadoop2

我们正在尝试将我们的工作从Hadoop 1.0.3迁移到Hadoop 2(准确地说是Hadoop 2.8.1,单节点集群)。我们正在使用YARN来管理我们的map-reduce作业。我们注意到的一个差异是每个映射存在两个Linux进程或计划执行的reduce任务。例如,对于我们的任何reduce任务,我们发现这两个执行过程:

  

hadoop 124692 124690 0 12:33? 00:00:00 / bin / bash -c / opt / java / bin / java -Djava.net.preferIPv4Stack = true -Dhadoop.metrics.log.level = WARN -Xmx5800M -XX:-UsePerfData -Djava.io.tmpdir = / tmp / hadoop-hadoop / nm-local-dir / usercache / hadoop / 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/container_1510651062679_0001_01_000278 -Dyarn.app.container.log.filesize = 0 -Dhadoop.root.logger = INFO,CLA -Dhadoop.root.logfile = syslog -Dyarn.app.mapreduce .shuffle.logger = INFO,shuffleCLA -Dyarn.app.mapreduce.shuffle.logfile = syslog.shuffle -Dyarn.app.mapreduce.shuffle.log.filesize = 0 -Dyarn.app.mapreduce.shuffle.log.backups = 0 org.apache.hadoop.mapred.YarnChild 192.168.101.29 33929 attempt_1510651062679_0001_r_000135_0 278 1> /opt/hadoop/hadoop-2.8.1/logs/userlogs/application_1510651062679_0001/container_1510651062679_0001_01_000278/stdout 2> / opt / hadoop / hadoop-2。 8.1 /日志/ userlogs / application_1510651062679_0001 / container_1510651062679_0001_01_000278 / stderr的

     

hadoop 124696 124692 74 12:33? 00:10:30 / opt / java / bin / java -Djava.net.preferIPv4Stack = true -Dhadoop.metrics.log.level = WARN -Xmx5800M -XX:-UsePerfData -Djava.io.tmpdir = / tmp / hadoop- hadoop / nm-local-dir / usercache / hadoop / 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 / container_1510651062679_0001_01_000278 -Dyarn.app.container.log.filesize = 0 -Dhadoop.root.logger = INFO,CLA -Dhadoop.root.logfile = syslog -Dyarn.app.mapreduce.shuffle.logger = INFO ,shuffleCLA -Dyarn.app.mapreduce.shuffle.logfile = syslog.shuffle -Dyarn.app.mapreduce.shuffle.log.filesize = 0 -Dyarn.app.mapreduce.shuffle.log.backups = 0

第二个过程是第一个过程的孩子。总而言之,我们发现作业执行过程中的总进程数远远高于Hadoop 1.0.3,其中每个地图或减少任务只执行一个进程。

a)这可能是导致作业执行速度比Hadoop 1.0.3慢得多的原因吗?

b)这两个过程是否都是预期的方式?

提前感谢您的建议。

1 个答案:

答案 0 :(得分:0)

仔细检查,你会发现

Pid  124692 is /bin/bash
Pid  124696 is /opt/java/bin/java

/ bin / bash是在封闭环境中生成Java进程的容器进程(CPU,RAM限制为容器)

您可以将其视为虚拟机,您可以在其中运行自己的流程。虚拟机和在其中运行的进程都将具有父子关系。

请详细了解Linux容器,了解更多信息。