Подтвердить что ты не робот

Установка количества задач карты и сокращение задач

В настоящее время я выполняю задание. Я исправил число задач карты до 20, но и получил большее число. Я также поставил задачу уменьшения на ноль, но я все еще получаю число, отличное от нуля. Также не отображается общее время выполнения задания MapReduce. Может кто-то сказать мне, что я делаю неправильно. Я использую эту команду

hadoop jar Test_Parallel_for.jar Test_Parallel_for Matrix/test4.txt Result 3 \ -D mapred.map.tasks = 20 \ -D mapred.reduce.tasks =0

Вывод:

11/07/30 19:48:56 INFO mapred.JobClient: Job complete: job_201107291018_0164
11/07/30 19:48:56 INFO mapred.JobClient: Counters: 18
11/07/30 19:48:56 INFO mapred.JobClient:   Job Counters 
11/07/30 19:48:56 INFO mapred.JobClient:     Launched reduce tasks=13
11/07/30 19:48:56 INFO mapred.JobClient:     Rack-local map tasks=12
11/07/30 19:48:56 INFO mapred.JobClient:     Launched map tasks=24
11/07/30 19:48:56 INFO mapred.JobClient:     Data-local map tasks=12
11/07/30 19:48:56 INFO mapred.JobClient:   FileSystemCounters
11/07/30 19:48:56 INFO mapred.JobClient:     FILE_BYTES_READ=4020792636
11/07/30 19:48:56 INFO mapred.JobClient:     HDFS_BYTES_READ=1556534680
11/07/30 19:48:56 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=6026699058
11/07/30 19:48:56 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=1928893942
11/07/30 19:48:56 INFO mapred.JobClient:   Map-Reduce Framework
11/07/30 19:48:56 INFO mapred.JobClient:     Reduce input groups=40000000
11/07/30 19:48:56 INFO mapred.JobClient:     Combine output records=0
11/07/30 19:48:56 INFO mapred.JobClient:     Map input records=40000000
11/07/30 19:48:56 INFO mapred.JobClient:     Reduce shuffle bytes=1974162269
11/07/30 19:48:56 INFO mapred.JobClient:     Reduce output records=40000000
11/07/30 19:48:56 INFO mapred.JobClient:     Spilled Records=120000000
11/07/30 19:48:56 INFO mapred.JobClient:     Map output bytes=1928893942
11/07/30 19:48:56 INFO mapred.JobClient:     Combine input records=0
11/07/30 19:48:56 INFO mapred.JobClient:     Map output records=40000000
11/07/30 19:48:56 INFO mapred.JobClient:     Reduce input records=40000000
[hcrc1425n30]s0907855: 
4b9b3361

Ответ 1

Количество задач сопоставления для данного задания определяется количеством входных разбиений, а не параметром mapred.map.tasks. Для каждого входного разбиения порождается задача карты. Таким образом, в течение срока действия задания maprecece количество задач map равно числу входных разбиений. mapred.map.tasks - это просто подсказка InputFormat для количества карт.

В вашем примере Hadoop определил, что существует 24 входных сплита, и в общей сложности создаст 24 задания карты. Но вы можете контролировать, сколько задач карты может выполняться параллельно каждым из трекеров задач.

Кроме того, удаление пробела после -D может решить проблему уменьшения.

Для получения дополнительной информации о количестве карт и сокращении задач, пожалуйста, посмотрите на нижеприведенный URL

https://cwiki.apache.org/confluence/display/HADOOP2/HowManyMapsAndReduces

Ответ 2

Как упоминает Правейн выше, при использовании базовых классов FileInputFormat - это просто количество входных дробей, которые составляют данные. Количество редукторов контролируется mapred.reduce.tasks, указанным в том виде, в котором оно у вас есть: -D mapred.reduce.tasks=10 будет указывать 10 редукторов. Заметим, что пространство после -D требуется; если вы опустите это пространство, свойство конфигурации передается вместе с соответствующим JVM, а не Hadoop.

Вы указываете 0, потому что нет работы по сокращению? В этом случае, если у вас возникнут проблемы с параметром времени выполнения, вы также можете установить значение непосредственно в коде. Учитывая JobConf экземпляр job, вызовите

job.setNumReduceTasks(0);

внутри, скажем, вашей реализации Tool.run. Это должно производить выход непосредственно от картографов. Если ваша работа фактически не производит никакого вывода (потому что вы используете фреймворк только для побочных эффектов, таких как сетевые вызовы или обработка изображений, или если результаты полностью учитываются в значениях счетчика), вы можете отключить вывод, также вызвав

job.setOutputFormat(NullOutputFormat.class);

Ответ 3

Важно помнить, что структура MapReduce в Hadoop позволяет нам только

предложить количество задач Map для задания

который, как указано выше, указывает на количество входных расколов для задачи. В отличие от поведения для количества редукторов (которое напрямую связано с количеством файлов, выводимых с помощью задания MapReduce), где мы можем

потребовать, чтобы он обеспечивал n редукторов.

Ответ 4

Чтобы объяснить это с помощью примера:

Предположим, что размер входного файла вашего приложения составляет 2 ГБ, и вы задаете размер блока как 64 МБ, поэтому 32 задания Mappers настроены на запуск, в то время как каждый обработчик обработает блок 64 МБ для выполнения задания Mapper вашего задания Hadoop.

== > Количество запущенных mappers полностью зависит от 1) Размер файла и 2) Размер блока

Предположим, что у вас есть hasoop на размер кластера 4: Предположим, вы задали параметры mapred.map.tasks и mapred.reduce.tasks в файле conf для узлов следующим образом:

Node 1: mapred.map.tasks = 4 and mapred.reduce.tasks = 4
Node 2: mapred.map.tasks = 2 and mapred.reduce.tasks = 2
Node 3: mapred.map.tasks = 4 and mapred.reduce.tasks = 4
Node 4: mapred.map.tasks = 1 and mapred.reduce.tasks = 1

Предположим, вы установили вышеуказанные параметры для 4 ваших узлов в этом кластере. Если вы заметили, что Node 2 установил только 2 и 2 соответственно, потому что ресурсы обработки Node 2 могут быть меньше, например (2 процессора, 2 ядра) и Node 4, даже установлены ниже только на 1 и 1 соответственно может произойти из-за обработки ресурсов на том, что Node - 1 процессор, 2 ядра, поэтому не может запускать более 1 задачи для сопоставления и 1 редуктора.

Поэтому, когда вы запускаете задание Node 1, Node 2, Node 3, Node 4 настроены на запуск макс. всего (4 + 2 + 4 + 1) 11 задач сопоставления из 42 задач сопоставления, которые должны быть заполнены заданием. После того как каждый Node выполнит свои задачи по карте, он оставит оставшиеся задачи mapper в 42 задачах mapper.

Теперь, переходя к редукторам, когда вы устанавливаете mapred.reduce.tasks = 0, мы получаем только вывод mapper в 42 файла (1 файл для каждой задачи сопоставления) и отсутствие выхода редуктора.

Ответ 5

В более новой версии Hadoop имеется гораздо более гранулированный mapreduce.job.running.map.limit и mapreduce.job.running.reduce.limit, который позволяет вам устанавливать счетчик карт и редукторов независимо от размера разделения файлов hdfs. Это полезно, если вы находитесь под ограничением, чтобы не использовать большие ресурсы в кластере.

JIRA

Ответ 6

Из вашего журнала я понял, что у вас есть 12 входных файлов, так как есть 12 локальных карт. Rack Локальные карты создаются для одного и того же файла, если некоторые из блоков этого файла находятся в некоторых других данных node. Сколько у вас узлов данных?

Ответ 7

В вашем примере части -D не выбраны:

hadoop jar Test_Parallel_for.jar Test_Parallel_for Matrix/test4.txt Result 3 \ -D mapred.map.tasks = 20 \ -D mapred.reduce.tasks =0

Они должны последовать за частью класса следующим образом:

hadoop jar Test_Parallel_for.jar Test_Parallel_for -Dmapred.map.tasks=20 -Dmapred.reduce.tasks=0 Matrix/test4.txt Result 3

Допускается пробел после -D.

Также обратите внимание, что изменение количества картографов, вероятно, является плохой идеей, как упомянули другие люди.

Ответ 8

Количество заданий карты напрямую определяется количеством фрагментов, разделяемых вашим входом. Размер блока данных (т.е. Размер блока HDFS) управляем и может быть установлен для отдельного файла, набора файлов, каталога (-s). Таким образом, задание определенного количества задач карты в задании возможно, но включает установку соответствующего размера блока HDFS для данных ввода задания. mapred.map.tasks также может использоваться для этого, но только если его предоставленное значение больше, чем количество разделов для данных ввода задания.

Контролировать количество редукторов через mapred.reduce.tasks правильно. Однако установка его на нуль - довольно частный случай: выход задания представляет собой конкатенацию выходов (не отсортированных). В ответе Мэт можно увидеть больше способов установить количество редукторов.

Ответ 9

Один из способов увеличить количество картографов - предоставить ваш вход в виде разделенных файлов [вы можете использовать команду разделения Linux]. В потоковом режиме Hadoop обычно присваивается много картографов, так как есть входные файлы [если имеется большое количество файлов], если он не попытается разбить вход на части равного размера.

Ответ 10

  • Использовать -D property = значение, а не -D property = значение (исключить дополнительные пробелы). Таким образом, -D mapred.reduce.tasks = значение будет работать хорошо.

  • Установка количества заданий карты не всегда отражает значение, которое у вас есть потому что это зависит от размера разделения и используемого InputFormat.

  • Установка количества сокращений определенно переопределит количество уменьшает набор в конфигурации с кластером/клиентской стороной.

Ответ 11

Я согласен, что задание числа mapp зависит от входного разделения, но в некоторых сценариях я мог видеть его немного отличающийся

case-1 Я создал простую задачу mapp только, она создает 2 дубликатов из файла (данные такие же)   команда, которую я дал ниже

bin/hadoop jar contrib/streaming/hadoop-streaming-1.2.1.jar -D mapred.reduce.tasks = 0 -input/home/sample.csv -output/home/sample_csv112.txt -mapper/home/Амитав/workpython/readcsv.py

Case-2 Итак, я остановил задачу mapp на 1, когда вышли правильно, с одним выходным файлом, но один редуктор также запустил на экране пользовательского интерфейса, хотя я ограничил работу редуктора. Команда приведена ниже.

bin/hadoop jar contrib/streaming/hadoop-streaming-1.2.1.jar -D mapred.map.tasks = 1 mapred.reduce.tasks = 0 -input/home/sample.csv -output/home/sample_csv115.txt -mapper/home/amitav/workpython/readcsv.py

Ответ 12

В первой части уже был дан ответ, "просто предложение", На вторую часть также был дан ответ: "удалите лишние пробелы вокруг =" Если оба они не работали, уверены ли вы, что вы внедрили ToolRunner?

Ответ 13

Количество задач карты зависит от размера файла. Если вы хотите n число карт, разделите размер файла на n следующим образом:

conf.set("mapred.max.split.size", "41943040"); // maximum split file size in bytes
conf.set("mapred.min.split.size", "20971520"); // minimum split file size in bytes

Ответ 14

Люди из этой теории, похоже, не могут параллельно выполнять задания по сокращению карты.

Предположим, что я сконфигурировал всего 5 заданий сопоставления для работы на определенном node. Также я хочу использовать его таким образом, чтобы JOB1 мог использовать 3 модуля, а JOB2 может использовать 2 картона, чтобы работа могла выполняться параллельно. Но выше свойства игнорируются, то как можно выполнять задания параллельно.

Ответ 15

Из того, что я понимаю выше, это зависит от входных файлов. Если входные файлы равны 100 - Hadoop создаст 100 задач карты. Однако это зависит от конфигурации Node от того, сколько из них может быть запущено в определенный момент времени. Если Node настроен для выполнения 10 задач карты - только 10 задач карты будут выполняться параллельно, выбирая 10 различных входных файлов из доступных 100. Задачи карты будут продолжать извлекать больше файлов по мере завершения обработки файла.