Коли в Hadoop починаються завдання зменшення?


82

Коли в Hadoop починаються завдання зменшення? Чи починаються вони після закінчення певного відсотка (порогового значення) картографів? Якщо так, чи встановлено цей поріг? Який поріг зазвичай використовується?

Відповіді:


206

Фаза зменшення складається з 3 кроків: перемішати, відсортувати, зменшити. Перемішати - це місце, де дані збирає редуктор від кожного картографа. Це може статися, поки картографи генерують дані, оскільки це лише передача даних. З іншого боку, сортування та зменшення може розпочатися лише після того, як всі картографування закінчені. Ви можете визначити, що робить MapReduce, дивлячись на відсоток завершення роботи редуктора: 0-33% означає, що його перемішування виконується, 34-66% - це сортування, 67% -100% - зменшення. Ось чому ваші редуктори іноді здаються "застряглими" на 33% - це чекає закінчення картографів.

Редуктори починають перетасовувати, виходячи з порогу відсотка картографов, які закінчили. Ви можете змінити параметр, щоб рано чи пізно запускати редуктори.

Чому ранній запуск редукторів - це добре? Оскільки з часом він поширює передачу даних від картографів до редукторів, що добре, якщо ваша мережа є вузьким місцем.

Чому ранній запуск редукторів поганий? Тому що вони "піднімаються" зменшують слоти, одночасно копіюючи дані та чекаючи закінчення картографів. Інша робота, яка розпочнеться пізніше і фактично використовуватиме зменшені слоти, тепер не може їх використовувати.

Ви можете налаштувати час запуску редукторів, змінивши значення за замовчуванням mapred.reduce.slowstart.completed.mapsв mapred-site.xml. Значення 1.00буде чекати, поки всі картографи закінчать, перш ніж запускати редуктори. Значення 0.0відразу запустить редуктори. Значення 0.5буде запускати редуктори, коли буде завершено половину картографічних програм. Ви також можете змінитись mapred.reduce.slowstart.completed.mapsза окремою роботою. У нових версіях Hadoop (принаймні 2.4.1) параметр викликаєтьсяmapreduce.job.reduce.slowstart.completedmaps (дякую користувачеві yegor256).

Як правило, я люблю дотримуватися mapred.reduce.slowstart.completed.mapsвище, 0.9якщо в системі колись працює кілька завдань одночасно. Таким чином, робота не піднімає редуктори, коли вони не роблять нічого, крім копіювання даних. Якщо у вас виконується лише одна робота за раз, це 0.1, мабуть, було б доречним.


3
Ви знаєте, де я можу прочитати більше про те, що Ви згадали?
мрійник

1
Slowstart, на мій погляд, досить погано документований .... як і більшість незрозумілих параметрів конфігурації.
Дональд Майнер

5
Гарна відповідь @Donald Miner. Просто хочу додати, що в новішій версії Hadoop (я використовую 1.1.2) значення за замовчуванням становить 0,05. hadoop.apache.org/docs/r1.1.2/mapred-default.html
sufinawaz

@Donald Я використовую версію 0.20.205.0 hadoop і встановлюю параметр "mapred.reduce.slowstart.completed.maps" у mapred-site.xml на 0,1, але редуктор все одно працює після завершення створення карт. Чи можу я знати чому?
Гаррі Поттер

3
@nishm, я думаю, ви плутаєте термінологію всієї фази скорочення порівняно із простою зменшенням всередині фази зменшення. Фаза зменшення - це перемішування, сортування та зменшення. Slowstart повідомляє, коли починати загальну фазу. Ви маєте рацію, що зменшення всередині фази зменшення починається лише після закінчення картографувань.
Дональд Майнер

5

Фаза зменшення може початися задовго до того, як буде викликаний редуктор. Як тільки картограф "a" закінчує роботу, згенеровані дані проходять деяке сортування та перетасовку (що включає виклик комбайнеру та розділювачу). "Фаза" редуктора починається з моменту, коли починається обробка даних після відображення карт. По закінченні цієї обробки ви побачите прогрес у відсотках редукторів. Однак жоден з редукторів ще не викликаний. Залежно від кількості доступних / використовуваних процесорів, характеру даних та кількості очікуваних редукторів, можливо, ви захочете змінити параметр, як описано вище @ Donald-miner.


1

Я наскільки я розумію Зменшити фазу, починайте з фази карти і продовжуйте споживати запис із карт. Однак, оскільки існує фаза сортування та перетасування після фази карти, всі виходи повинні бути відсортовані та відправлені на редуктор. Таким чином, логічно ви можете уявити, що фаза зменшення починається лише після фази карти, але насправді, з причини продуктивності, редуктори також ініціалізуються за допомогою карт.


0

Відсоток, показаний для фази зменшення, насправді становить приблизно кількість даних, скопійованих з виводу карт у вхідні каталоги редукторів. Щоб знати, коли починається це копіювання? Цю конфігурацію ви можете встановити, як показав Дональд вище. Як тільки всі дані копіюються на редуктори (тобто 100% зменшення), тоді редуктори починають працювати і, отже, можуть замерзнути на "100% зменшення", якщо ваш код редукторів є інтенсивним введенням-виводом або процесором.


0

Редукція починається лише після того, як усі картографи виконують там завдання, Редуктор повинен спілкуватися з усіма картографами, тому йому потрібно чекати, поки останній картограф завершить своє завдання. Однак картограф починає передавати дані до моменту, коли він виконав своє завдання.


-1

Розглянемо приклад WordCount, щоб краще зрозуміти, як працює завдання зменшення карти. Припустимо, у нас великий файл, скажімо, роман, і наше завдання - знайти кількість випадків, коли кожне слово зустрічається у файлі. Оскільки файл великий, його можна розділити на різні блоки та відтворити в різних робочих вузлах. Завдання підрахунку слів складається з картографії та зменшення завдань. Завдання карти бере для введення кожен блок і створює проміжну пару ключ-значення. У цьому прикладі, оскільки ми підраховуємо кількість випадків слів, картограф при обробці блоку призведе до проміжних результатів форми (word1, count1), (word2, count2) тощо. Проміжними результатами всіх картографувачів є пройшов через фазу перетасовки, яка змінить порядок проміжного результату.

Припустимо, що наша карта, що виводиться з різних картографів, має такий вигляд:

Карта 1: - (є, 24) (була, 32) (і, 12)

Map2: - (моя, 12) (є, 23) (була, 30)

Виходи карти сортуються таким чином, що однакові значення ключа присвоюються одному і тому ж редуктору. Тут це означало б, що ключі, що відповідають is, was і т.д., йдуть тим самим редуктором. Це редуктор, який видає кінцевий результат, який у цьому випадку буде: - (і, 12) (є, 47) (мій, 12 ) (було, 62)


Не відповідає на запитання OP, КОЛИ запускається редуктор.
Sai Kiriti Badam

-1

Завдання редуктора починається лише після того, completionяк всі картографа.

Але передача даних відбувається після eachMap. Насправді це тягне операція.

Це означає, що кожен раз редуктор запитуватиме кожну картографічну задачу, чи є у них якісь дані для вилучення з Map. Якщо вони виявлять, що будь-який картограф виконував своє завдання, Редуктор витягує проміжні дані.

Проміжні дані з Mapper зберігаються в disk. А передача даних від Mapper до Reduce відбувається через мережу ( Data Localityне зберігається у фазі Reduce)


-2

Коли Mapper закінчує своє завдання, тоді Reducer починає свою роботу зі зменшення даних, це завдання Mapreduce.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.