Hadoop 2: почему для каждой задачи сопоставления или сокращения используются два процесса Linux?

Мы пытаемся перенести наши задания на Hadoop 2 (Hadoop 2.8.1, одноузловой кластер, если быть точным) с Hadoop 1.0.3. Мы используем YARN для управления нашими заданиями по уменьшению карты. Одно из замеченных нами отличий - это наличие двух процессов Linux для каждой задачи сопоставления или сокращения, которая запланирована для выполнения. Например, для любой из наших задач сокращения мы обнаруживаем эти два выполняющихся процесса:

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 = /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 -Dhadoopy.root.root .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 попытка_1510651062679_0001_r_000135_0 278 1 ›/opt/hadoop/hadoop-2.8.1/logs/userlogs/application_1510651062679_0001/1062_doop_0008_0001/1062_doop_0001/container_927108 вот gs / userlogs / application_1510651062679_0001 / container_1510651062679_0001_01_000278 / stderr

Хадуп 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-2.8.1 hadoop / hadoop / hadoop / logs / userlogs / application_1510651062679_0001 / container_1510651062679_0001_01_000278 -Dyarn.app.container.log.filesize = 0 -Dhadoop.root.logger = INFO, CLA -Dhadoop.root.logfilelocelocelocelog = syslog -Dyarn.duff , 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, где для каждой задачи сопоставления или сокращения выполнялся только один процесс.

а) Может ли это быть причиной того, что задание выполняется медленнее, чем в Hadoop 1.0.3?

б) Эти два процесса работают так, как задумано?

Заранее благодарю за совет.


person Miguel    schedule 14.11.2017    source источник


Ответы (1)


При внимательном рассмотрении вы найдете

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

/ bin / bash - это процесс контейнера, который порождает процесс Java в закрытой среде (ЦП, ОЗУ ограничены контейнером)

Вы можете думать об этом как о виртуальной машине, внутри которой вы можете запускать свой собственный процесс. И виртуальная машина, и процесс, запущенный внутри нее, будут иметь отношения родитель-потомок.

Пожалуйста, прочтите подробнее о контейнере Linux, чтобы узнать о нем больше.

person KrazyGautam    schedule 14.11.2017
comment
Спасибо за ответ, @KrazyGautam. По крайней мере, теперь мы знаем, что наличие этих двух процессов на редуктор не является причиной для объяснения медленного выполнения. - person Miguel; 15.11.2017