Hadoop 2:为什么每个 map 或 reduce 任务有两个 linux 进程?
Hadoop 2: why are there two linux processes for each map or reduce task?
我们正在尝试将我们的作业从 Hadoop 1.0.3 迁移到 Hadoop 2(Hadoop 2.8.1,准确地说是单节点集群)。我们正在使用 YARN 来管理我们的 map-reduce 作业。我们注意到的差异之一是每个计划执行的 map 或 reduce 任务存在两个 Linux 进程。例如,对于我们的任何 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/logs/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 时要多得多,其中每个 map 或 reduce 任务只执行一个进程。
a) 这可能是作业执行速度比 Hadoop 1.0.3 慢得多的原因吗?
b) 这两个过程是所有工作的预期方式吗?
提前感谢您的建议。
仔细检查你会发现
Pid 124692 is /bin/bash
Pid 124696 is /opt/java/bin/java
/bin/bash 是在封闭环境中生成 Java 进程的容器进程(CPU,RAM 仅限于容器)
您可以将其视为一个虚拟机,您可以在其中 运行 您自己的进程。虚拟机和里面的进程运行ning都会有父子关系。
请详细阅读 Linux 容器以了解更多信息。
我们正在尝试将我们的作业从 Hadoop 1.0.3 迁移到 Hadoop 2(Hadoop 2.8.1,准确地说是单节点集群)。我们正在使用 YARN 来管理我们的 map-reduce 作业。我们注意到的差异之一是每个计划执行的 map 或 reduce 任务存在两个 Linux 进程。例如,对于我们的任何 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/logs/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 时要多得多,其中每个 map 或 reduce 任务只执行一个进程。
a) 这可能是作业执行速度比 Hadoop 1.0.3 慢得多的原因吗?
b) 这两个过程是所有工作的预期方式吗?
提前感谢您的建议。
仔细检查你会发现
Pid 124692 is /bin/bash
Pid 124696 is /opt/java/bin/java
/bin/bash 是在封闭环境中生成 Java 进程的容器进程(CPU,RAM 仅限于容器)
您可以将其视为一个虚拟机,您可以在其中 运行 您自己的进程。虚拟机和里面的进程运行ning都会有父子关系。
请详细阅读 Linux 容器以了解更多信息。