У програмі Map Reduce скорочення фаза зменшення, сортування та зменшення є її підрозділами. Сортування - дорога справа.
Яка мета переміщення та сортування фази редуктора в програмі зменшення карт?
У програмі Map Reduce скорочення фаза зменшення, сортування та зменшення є її підрозділами. Сортування - дорога справа.
Яка мета переміщення та сортування фази редуктора в програмі зменшення карт?
Відповіді:
Перш за все, shuffling
це процес передачі даних з картографів на редуктори, тому я думаю, що очевидно, що це потрібно для редукторів, оскільки в іншому випадку вони не змогли б мати жодного вводу (або вводу від кожного картографа) . Перемішування може розпочатися ще до того, як завершиться фаза карти, щоб заощадити деякий час. Ось чому ви можете бачити статус зменшення більше 0% (але менше 33%), коли стан карти ще не 100%.
Sorting
економить час для редуктора, допомагаючи легко визначити, коли має розпочатися нове завдання зменшення. Він просто запускає нове завдання зменшення, коли наступна клавіша в упорядкованих вхідних даних відрізняється від попередньої, простіше кажучи. Кожне завдання зменшення містить список пар ключових значень, але воно повинно викликати метод скарачення (), який приймає введення списку ключів (значення), тому воно має групувати значення за ключем. Це легко зробити, якщо вхідні дані попередньо сортуються (локально) у фазі карти та просто сортуються у фазі зменшення (оскільки редуктори отримують дані від багатьох картографів).
Partitioning
, що ви згадали в одній з відповідей, це інший процес. Він визначає, в який редуктор пара (ключ, значення) буде виведена фаза карти. Партнер за замовчуванням використовує хешування на клавішах для розподілу їх на завдання зменшення, але ви можете їх перекрити і використовувати власний спеціальний учасник.
Чудовим джерелом інформації для цих кроків є цей підручник з Yahoo .
Приємним графічним поданням цього є наступне (переміщення називається "копія" на цій фігурі):
Зверніть увагу , що shuffling
і sorting
не виконуються взагалі , якщо вказати нуль восстановителей (setNumReduceTasks (0)). Потім завдання MapReduce зупиняється на фазі карти, і фаза карти не включає будь-якого сортування (тому навіть фаза карти швидша).
ОНОВЛЕННЯ: Оскільки ви шукаєте щось більш офіційне, ви також можете прочитати книгу Тома Уайта "Hadoop: Постійний посібник". Ось цікава частина вашого запитання.
Том Уайт був членом Apache Hadoop з лютого 2007 року і є членом програмного фонду Apache, тому я думаю, що це досить надійно і офіційно ...
Переглянемо основні етапи програми Mapreduce.
Фаза карти здійснюється картографами. Мапідери працюють на несортованих парах вводу ключ / значення. Кожен картограф випромінює нуль, один або кілька пар вихідних ключів / значень для кожної пари вводу / значення.
Фаза комбінату здійснюється комбайнерів. Комбайнер повинен поєднувати в собі пари ключ / значення з тим же ключем. Кожен комбайнер може виконувати нуль, один раз або кілька разів.
Фаза перетасувати і сортування здійснюється в рамках. Дані всіх картографів групуються за ключем, розбиваються між редукторами та сортуються за ключем. Кожен редуктор отримує всі значення, пов'язані з одним ключем. Програміст може надати спеціальні функції порівняння для сортування та роздільник для поділу даних.
Розмітки вирішують , який редуктор отримає певну пару ключів значення.
У редукторі Отримує відсортований ключ / [список значень] пар, відсортоване по ключу. Список значень містить усі значення з тим самим ключем, який виробляють картографи. Кожен редуктор випромінює нуль, одну або кілька пар вихідних ключів / значень для кожної пари вводу / значення .
Перегляньте цю статтю javacodegeeks Марії Юрковічової та статтю mssqltips від Датти для кращого розуміння
Нижче зображено статтю safaribooksonline
ie
рядки в розділі "Редуктори" та "Вихідні дані" насправді повинні бути is
.
Я думав просто додати деякі пункти, пропущені у вищезазначених відповідях. Ця діаграма, взята звідси, чітко говорить про те, що відбувається насправді.
Якщо я знову констатую реальну мету
Розділити: Покращує паралельну обробку, розподіляючи навантаження на обробку по різних вузлах (Mappers), що дозволить заощадити загальний час обробки.
Поєднання: зменшує вихід кожного Mapper. Це заощадило б час на переміщення даних з одного вузла в інший.
Сортування (Shuffle & Sort): полегшує час розробки планування (нересту / запуску) нових редукторів, де під час перегляду відсортованого списку елементів, коли вся поточна клавіша відрізняється від попередньої, вона може породити новий редуктор .
Деякі вимоги щодо обробки даних взагалі не потребують сортування. Syncsort зробив сортування в Hadoop підключеним. Ось приємний блог з них про сортування. Процес переміщення даних з картографів на редуктори називається перетасуванням, перегляньте цю статтю для отримання додаткової інформації про те саме.
Я завжди вважав, що це необхідно, оскільки вихід з картографа є входом для редуктора, тому його сортували на основі простору клавіш, а потім розбивали на відра для кожного вводу редуктора. Ви хочете, щоб усі однакові значення ключа в кінці знаходились у тому ж відрі, що йде до редуктора, щоб вони зменшувалися разом. Немає сенсу надсилати K1, V2 і K1, V4 до різних редукторів, оскільки вони повинні бути разом, щоб зменшити їх.
Спробував пояснити це якомога простіше
Перемішування - це процес, за допомогою якого проміжні дані від картографів переносяться на 0,1 або більше редукторів. Кожен редуктор отримує 1 або більше клавіш і пов'язані з ним значення залежно від кількості редукторів (для збалансованого навантаження). Далі значення, пов'язані з кожною клавішею, локально сортуються.
Є лише дві речі, які MapReduce робить NATIVELY: Сортування та (реалізована за сортуванням) масштабована GroupBy.
Більшість застосунків та шаблонів дизайну над MapReduce побудовані на цих двох операціях, які забезпечуються переміщенням та сортуванням.
Це хороше читання. Сподіваюся, це допомагає. Щодо сортування, щодо якого ви ставитесь, я думаю, що це стосується операції злиття на останньому кроці Map. Коли операція з картою буде виконана і потрібно записати результат на локальний диск, на розщепленнях, створених з буфера, буде здійснено багатозмінне злиття. А для операції злиття корисно сортування кожного розділу за розширеним.
Що ж, у Mapreduce є дві важливі фрази під назвою Mapper та reducer обидва є надто важливими, але Reducer є обов'язковим. У деяких програмах редуктори необов’язкові. Тепер прийдемо до вашого питання. Перемішування і сортування - дві важливі операції в Mapreduce. Перший фреймворк Hadoop бере структуровані / неструктуровані дані та розділяє дані на Key, Value.
Тепер програма Mapper відокремлює і впорядковує дані у ключі та значення, які підлягають обробці. Створити значення ключа 2 та значення 2. Ці значення слід обробити і впорядкувати в належному порядку, щоб отримати бажане рішення. Тепер це переміщення та сортування зроблено у вашій локальній системі (Framework подбайте про це) та обробляйте в локальній системі після очищення фреймворку даних у локальній системі. Гаразд
Тут ми використовуємо комбінатор і розділ, щоб також оптимізувати процес перетасування та сортування. Після правильного розташування ці ключові значення переходять до редуктора, щоб отримати бажаний вихід клієнта. Нарешті редуктор отримує бажаний вихід.
K1, V1 -> K2, V2 (будемо писати програму Mapper), -> K2, V '(тут перетасовуйте і згладжуйте дані) -> K3, V3 Зробіть вихід. K4, V4.
Зверніть увагу, що всі ці кроки є лише логічними операціями, а не зміною вихідних даних.
Ваше запитання: Яка мета переміщення та сортування фази редуктора в програмі зменшення карт?
Коротка відповідь: обробити дані, щоб отримати бажаний вихід. Перемішування - це сукупність даних, зменшення - очікуваний вихід.