почему количество редукторов больше, чем то, что я указал в Hadoop?

Вот вывод на консоли моей работы MR. Работа успешно завершена. Но у меня есть две проблемы.

1) Я указал -D mapred.reduce.slowstart.completed.maps=0.75. однако редуктор не запустился, когда карта готова на 75%, как показано ниже.

2) Я указал -D mapred.reduce.tasks=2. Но количество запущенных задач редьюсера равно 3 (как показано ниже).

почему эти два параметра не были учтены?

hadoop jar hadoop-examples-1.2.1.jar wordcount -D mapred.reduce.slowstart.completed.maps=0.75 -D mapred.reduce.tasks=2 /data /output/result1
2014-07-06 22:25:11.733 java[3236:1903] Unable to load realm info from SCDynamicStore
14/07/06 22:25:13 INFO input.FileInputFormat: Total input paths to process : 4
14/07/06 22:25:13 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
14/07/06 22:25:13 WARN snappy.LoadSnappy: Snappy native library not loaded
14/07/06 22:25:13 INFO mapred.JobClient: Running job: job_201407061919_0015
14/07/06 22:25:14 INFO mapred.JobClient:  map 0% reduce 0%
14/07/06 22:25:49 INFO mapred.JobClient:  map 25% reduce 0%
14/07/06 22:25:50 INFO mapred.JobClient:  map 50% reduce 0%
14/07/06 22:26:08 INFO mapred.JobClient:  map 75% reduce 0%
14/07/06 22:26:14 INFO mapred.JobClient:  map 100% reduce 0%
14/07/06 22:26:23 INFO mapred.JobClient:  map 100% reduce 8%
14/07/06 22:26:26 INFO mapred.JobClient:  map 100% reduce 33%
14/07/06 22:26:29 INFO mapred.JobClient:  map 100% reduce 37%
14/07/06 22:26:30 INFO mapred.JobClient:  map 100% reduce 54%
14/07/06 22:26:33 INFO mapred.JobClient:  map 100% reduce 66%
14/07/06 22:26:37 INFO mapred.JobClient:  map 100% reduce 86%
14/07/06 22:26:39 INFO mapred.JobClient:  map 100% reduce 100%
14/07/06 22:26:50 INFO mapred.JobClient: Job complete: job_201407061919_0015
14/07/06 22:26:50 INFO mapred.JobClient: Counters: 29
14/07/06 22:26:50 INFO mapred.JobClient:   Job Counters 
14/07/06 22:26:50 INFO mapred.JobClient:     Launched reduce tasks=3
14/07/06 22:26:50 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=107522
14/07/06 22:26:50 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
14/07/06 22:26:50 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
14/07/06 22:26:50 INFO mapred.JobClient:     Launched map tasks=4
14/07/06 22:26:50 INFO mapred.JobClient:     Data-local map tasks=4
14/07/06 22:26:50 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=51153
14/07/06 22:26:50 INFO mapred.JobClient:   File Output Format Counters 
14/07/06 22:26:50 INFO mapred.JobClient:     Bytes Written=880862
14/07/06 22:26:50 INFO mapred.JobClient:   FileSystemCounters
14/07/06 22:26:50 INFO mapred.JobClient:     FILE_BYTES_READ=2217446
14/07/06 22:26:50 INFO mapred.JobClient:     HDFS_BYTES_READ=3672001
14/07/06 22:26:50 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=4030974
14/07/06 22:26:50 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=880862
14/07/06 22:26:50 INFO mapred.JobClient:   File Input Format Counters 
14/07/06 22:26:50 INFO mapred.JobClient:     Bytes Read=3671571
14/07/06 22:26:50 INFO mapred.JobClient:   Map-Reduce Framework
14/07/06 22:26:50 INFO mapred.JobClient:     Map output materialized bytes=1474437
14/07/06 22:26:50 INFO mapred.JobClient:     Map input records=77934
14/07/06 22:26:50 INFO mapred.JobClient:     Reduce shuffle bytes=1474437
14/07/06 22:26:50 INFO mapred.JobClient:     Spilled Records=255974
14/07/06 22:26:50 INFO mapred.JobClient:     Map output bytes=6076197
14/07/06 22:26:50 INFO mapred.JobClient:     Total committed heap usage (bytes)=589447168
14/07/06 22:26:50 INFO mapred.JobClient:     CPU time spent (ms)=19030
14/07/06 22:26:50 INFO mapred.JobClient:     Combine input records=629184
14/07/06 22:26:50 INFO mapred.JobClient:     SPLIT_RAW_BYTES=430
14/07/06 22:26:50 INFO mapred.JobClient:     Reduce input records=102328
14/07/06 22:26:50 INFO mapred.JobClient:     Reduce input groups=82339
14/07/06 22:26:50 INFO mapred.JobClient:     Combine output records=102328
14/07/06 22:26:50 INFO mapred.JobClient:     Physical memory (bytes) snapshot=888221696
14/07/06 22:26:50 INFO mapred.JobClient:     Reduce output records=82339
14/07/06 22:26:50 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=6509461504
14/07/06 22:26:50 INFO mapred.JobClient:     Map output records=629184

РЕДАКТИРОВАТЬ: без каких-либо параметров в командной строке:

hadoop jar hadoop-examples-1.2.1.jar wordcount /data/ /output/results2
2014-07-06 20:05:29.428 java[2869:1903] Unable to load realm info from SCDynamicStore
14/07/06 20:05:29 INFO input.FileInputFormat: Total input paths to process : 4
14/07/06 20:05:29 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
14/07/06 20:05:29 WARN snappy.LoadSnappy: Snappy native library not loaded
14/07/06 20:05:30 INFO mapred.JobClient: Running job: job_201407061919_0009
14/07/06 20:05:31 INFO mapred.JobClient:  map 0% reduce 0%
14/07/06 20:05:43 INFO mapred.JobClient:  map 25% reduce 0%
14/07/06 20:05:47 INFO mapred.JobClient:  map 50% reduce 0%
14/07/06 20:05:48 INFO mapred.JobClient:  map 100% reduce 0%
14/07/06 20:05:55 INFO mapred.JobClient:  map 100% reduce 33%
14/07/06 20:05:57 INFO mapred.JobClient:  map 100% reduce 100%
14/07/06 20:06:00 INFO mapred.JobClient: Job complete: job_201407061919_0009
14/07/06 20:06:00 INFO mapred.JobClient: Counters: 29
14/07/06 20:06:00 INFO mapred.JobClient:   Job Counters 
14/07/06 20:06:00 INFO mapred.JobClient:     Launched reduce tasks=1
14/07/06 20:06:00 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=53468
14/07/06 20:06:00 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
14/07/06 20:06:00 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
14/07/06 20:06:00 INFO mapred.JobClient:     Launched map tasks=4
14/07/06 20:06:00 INFO mapred.JobClient:     Data-local map tasks=4
14/07/06 20:06:00 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=14440
14/07/06 20:06:00 INFO mapred.JobClient:   File Output Format Counters 
14/07/06 20:06:00 INFO mapred.JobClient:     Bytes Written=880862
14/07/06 20:06:00 INFO mapred.JobClient:   FileSystemCounters
14/07/06 20:06:00 INFO mapred.JobClient:     FILE_BYTES_READ=2214915
14/07/06 20:06:00 INFO mapred.JobClient:     HDFS_BYTES_READ=3672001
14/07/06 20:06:00 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=3974001
14/07/06 20:06:00 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=880862
14/07/06 20:06:00 INFO mapred.JobClient:   File Input Format Counters 
14/07/06 20:06:00 INFO mapred.JobClient:     Bytes Read=3671571
14/07/06 20:06:00 INFO mapred.JobClient:   Map-Reduce Framework
14/07/06 20:06:00 INFO mapred.JobClient:     Map output materialized bytes=1474413
14/07/06 20:06:00 INFO mapred.JobClient:     Map input records=77934
14/07/06 20:06:00 INFO mapred.JobClient:     Reduce shuffle bytes=1474413
14/07/06 20:06:00 INFO mapred.JobClient:     Spilled Records=255974
14/07/06 20:06:00 INFO mapred.JobClient:     Map output bytes=6076197
14/07/06 20:06:00 INFO mapred.JobClient:     Total committed heap usage (bytes)=557662208
14/07/06 20:06:00 INFO mapred.JobClient:     CPU time spent (ms)=10370
14/07/06 20:06:00 INFO mapred.JobClient:     Combine input records=629184
14/07/06 20:06:00 INFO mapred.JobClient:     SPLIT_RAW_BYTES=430
14/07/06 20:06:00 INFO mapred.JobClient:     Reduce input records=102328
14/07/06 20:06:00 INFO mapred.JobClient:     Reduce input groups=82339
14/07/06 20:06:00 INFO mapred.JobClient:     Combine output records=102328
14/07/06 20:06:00 INFO mapred.JobClient:     Physical memory (bytes) snapshot=802287616
14/07/06 20:06:00 INFO mapred.JobClient:     Reduce output records=82339
14/07/06 20:06:00 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=5418221568
14/07/06 20:06:00 INFO mapred.JobClient:     Map output records=629184

person brain storm    schedule 07.07.2014    source источник
comment
Убедитесь, что вы пишете либо -Dproperty=value (без пробелов), либо -Dproperty value (с одним пробелом), иначе оно может быть проанализировано неправильно.   -  person rVr    schedule 07.07.2014
comment
@rVr: без указания я вижу, что мой редуктор равен 1. поэтому установка значения действительно меняет его   -  person brain storm    schedule 07.07.2014
comment
похоже, вы также используете объединитель, который может вызываться или не вызываться фреймворком? Можете ли вы вставить полную распечатку с настройкой mapred.reduce.tasks=2 и без нее?   -  person rVr    schedule 07.07.2014
comment
@rVr: я обновил выше   -  person brain storm    schedule 08.07.2014
comment
Одно можно сказать наверняка: прогресс редьюсера в выводе задания не включает фазу перемешивания. Фаза уменьшения состоит из 3 шагов: перемешивание, сортировка, уменьшение. Shuffle — это место, где редуктор собирает данные с каждого маппера. То, что вы просите, указав mapred.reduce.slowstart.completed.maps=0.75, заключается в том, чтобы редукторы начали перетасовывать данные, когда 75% задачи карты выполнено. Он по-прежнему не запускает фазу сортировки и уменьшения редуктора (которая начинается только после того, как 100% задач карты выполнены), это было бы моим пониманием вашего вопроса 1.   -  person rVr    schedule 08.07.2014
comment
В каком режиме вы используете хауп? Можете ли вы проверить графический интерфейс Job tracker, чтобы подтвердить, сколько задач сокращения было использовано заданием?   -  person rVr    schedule 08.07.2014
comment
@rVr: я думал так же. но этап сортировки выполняется до перемешивания. То есть данные сортируются/разделяются и, наконец, перетасовываются по сети на разные узлы данных. Этап сортировки больше похож на этап слияния. когда преобразователь создает промежуточные пары ключ-значение, прежде чем он будет сохранен на диске, он разделяется (сортируется) для редукторов. (Это мое понимание из hadoop: полное руководство)   -  person brain storm    schedule 08.07.2014
comment
@rVr: но почему редукторов 3, а не 2??   -  person brain storm    schedule 08.07.2014


Ответы (1)


1) Я указал -D mapred.reduce.slowstart.completed.maps=0,75. однако редуктор не запустился, когда карта готова на 75%, как показано ниже.

75% прогресса карты не обязательно означает, что 75% задач карты завершены. Эта команда означает, что когда 75% (3 задачи карты из 4 в вашем случае) задач карты будут завершены, редукторы начнут фазу перетасовки. См. эту публикацию. подробнее о том, как определяется прогресс.

2) Я указал -D mapred.reduce.tasks=2. Но количество запущенных задач редьюсера равно 3 (как показано ниже).

Одна и та же задача редукции может быть запущена на нескольких узлах (это называется "спекулятивное выполнение»). Когда один из узлов завершает его первым, другой узел получает сигнал «убить» для этой задачи.

Другая возможность заключается в том, что одна из задач редукции не выполняется в одном узле и успешно выполняется в другом.

person vefthym    schedule 08.07.2014