You are on page 1of 28

Hadoop

Складові Hadoop:
Основні:
• Розподілена файлова система (Hadoop Distributed File System (HDFS))
• YARN (Yet Another Resource Negotiator)
• MapReduce (MR)
Додаткові:
Hive, Pig, HBase, Mahout і т.д.
HDFS
HDFS - це файлова система на основі програмного забезпечення,
реалізована на Java, і вона розташовується поверх рідної файлової
системи. Основна концепція HDFS полягає в тому, що вона розділяє
файл на блоки (зазвичай 128 MB) замість того, щоб мати справу з
цілим файлом. Завдяки цьому забезпечується багато функцій, таких як
розподілення , реплікація, відновлення збоїв і, що більш важливо,
розподілена обробка блоків за допомогою декількох машин. Розміри
блоків можуть бути 64 МБ, 128 МБ, 256 МБ або 512 МБ, в залежності
від задачі.
HDFS
Блоки HDFS мають великі розміри порівняно з дисковими блоками, і
причина полягає в мінімізації витрат на пошук. Якщо блок досить
великий, час, необхідний для передачі даних з диска, може бути
значно більшим, ніж час пошуку до початку блоку. Таким чином,
передача великого файлу з кількох блоків працює зі швидкістю
передачі диска.
HDFS
Кластер HDFS має два типи вузлів, що працюють у шаблоні майстер -
слейв: іменний вузол (namenode - майстер) та ряд вузлів даних
(datanodes - слейви). Namenode керує простором імен файлової
системи. Він підтримує дерево файлової системи та метадані для всіх
файлів і каталогів у дереві. Ця інформація постійно зберігається на
локальному диску у вигляді двох файлів: відображення простору імен
(namespace image) та журналу редагування. Namenodе також знає
вузли даних, на яких розташовані всі блоки для даного файлу; проте він
не зберігає місця розташування блоків постійно, оскільки ця
інформація реконструюється з вузлів даних при запуску системи.
HDFS
Вузли даних - це основні робочі вузли файлової системи. Вони
зберігають і отримують блоки, коли їм це повідомляють (клієнти або
namenode), і вони періодично повідомляють на namenode списки
блоків, які вони зберігають.
HDFS
З цієї причини важливо зробити namenode стійким до відмов, і Hadoop
надає для цього два механізми.
Перший спосіб - створити резервну копію файлів, що описують
поточний стан файлової системи - метадані. Hadoop можна
налаштувати так, щоб namenode записував свій поточний стан до
кількох файлових систем.
Також можна запустити вторинний namenode, який, незважаючи на
свою назву, не діє як namenode. Його основна роль - періодично
об’єднувати відображення простору імен з журналом редагування,
щоб запобігти надмірному розміру журналу редагування. Вторинний
namenode зазвичай працює на окремій фізичній машині. Він зберігає
копію об’єднаного відображення простору імен, яке може бути
використано у разі виходу з ладу namenode.
HDFS
Зазвичай вузол даних читає блоки з диска, але для файлів, до яких
часто звертаються, блоки можуть явно кешуватися в пам'яті вузла
даних. За замовчуванням блок кешується лише в пам’яті одного вузла
даних, хоча їхню кількість можна налаштувати для кожного файлу.
Користувачі або програми вказують іменному вузлу, які файли
кешувати (і як довго).
HDFS
Поєднання реплікації метаданих namenode у кількох файлових
системах та використання вторинного namenode для створення
контрольних точок захищає від втрати даних, але не забезпечує високої
доступності файлової системи. Іменний вузол все ще залишається
вузьким місцем.
Для виправлення цієї проблеми у пізніших версіях Hadoop є пара
іменних вузлів, один активний, інший – в режимі очікування. У разі
виходу з ладу активного namenode, вони беруть на себе свої обов'язки
щодо продовження обслуговування запитів клієнтів без значних
перерв.
В Hadoop 3 можна мати два іменних вузли в режимі очікування, а
також кілька journalnode.
HDFS
Для того, щоб це сталося, потрібні деякі архітектурні зміни:
• Для того, щоб надсилати журнал редагування, namenodes повинні
використовувати легкодоступне спільне сховище.
• Вузли даних повинні надсилати звіти про блоки обом namenodes,
оскільки відображення блоків зберігаються в пам’яті namenode, а не
на диску.
• Клієнти повинні бути налаштовані на обробку відмови namenode,
використовуючи механізм, прозорий для користувачів.
• Роль вторинного namenode підпорядковується режиму очікування,
який приймає періодичні контрольні точки простору імен активного
namenode.
HDFS
Найпростішим способом взаємодії з HDFS є командний рядок.
Файлова система готова до використання, і можна виконувати всі
звичайні операції з файловою системою, такі як читання файлів,
створення каталогів, переміщення файлів, видалення даних та перелік
каталогів. Можна скористатись командою hadoop fs -help, щоб
отримати детальну інформацію щодо кожної команди.
HDFS
HDFS має модель дозволів для файлів і каталогів, яка дуже нагадує
модель POSIX. Існує три типи дозволів: дозвіл на читання (r), дозвіл на
запис (w) і дозвіл на виконання (x). Дозвіл на читання потрібен для
читання файлів або перегляду вмісту каталогу. Дозвіл на запис потрібен
для запису файлу або, для каталогу, для створення або видалення
файлів або каталогів у ньому. Дозвіл на виконання ігнорується для
файлу, оскільки не можна виконати файл у HDFS, а для каталогу цей
дозвіл потрібен для доступу до його дочірніх елементів. Кожен файл і
каталог мають власника, групу та режим. Режим складається з дозволів
для користувача, який є власником, дозволів для користувачів, які є
членами групи, і дозволів для користувачів, які не є ні власниками, ні
учасниками групи.
HDFS
Читання файлу:
HDFS
Запис файлу:
MapReduce
MapReduce - це модель програмування для обробки даних. Hadoop
може запускати програми MapReduce, написані різними мовами;
наприклад, Java чи Python. Найголовніше, що програми MapReduce за
своєю суттю паралельні, тобто підходять для аналізу великих даних за
умови наявності достатньої кількості машин.
MapReduce
MapReduce працює, поділяючи обробку на дві фази: фазу map та фазу
reduce. Кожна фаза має вхідні та вихідні пари ключ-значення, типи яких
можуть бути обрані програмістом. Програміст також визначає дві
функції: функцію map та функцію reduce.
Перший фаза - це фаза map, яке бере набір даних та перетворює їх на
інший набір даних, де окремі елементи розбиваються на кортежі (пари
ключ/значення).
Фаза reduce приймає вихідні дані з map як вхідні дані та об’єднує ці
кортежі даних у менший набір кортежів.
MapReduce
MapReduce
Функція map бере серію пар ключ/значення, обробляє кожну і генерує
нуль або більше пар вивід/ключ. Типи введення та виведення map
можуть відрізнятися, часто є різними.
Наприклад, якщо програма виконує підрахунок слів, функція map
розбиває рядок на слова і виводить пару ключ/значення для кожного
слова. Кожна пара виводу буде містити слово як ключ і кількість
екземплярів цього слова у рядку як значення.
Ключ - це те, на чому групуватимуться дані, а значення - частина даних,
яка буде використовуватися в reduce для створення необхідного
результату.
MapReduce
Розділювач бере проміжні пари ключ/значення з відображувача (mapper) і
розбиває їх на фрагменти, по одному фрагменту на редуктор (reducer).
Після того, як обробка вхідних даних в фазі map завершено (по суті, розбиття
даних та генерування пар ключ/значення), вихідні дані мають бути
розподілені по кластеру, щоб розпочати завдання reduce. Отже, завдання
reduce починається з перемішування та сортування, приймаючи вихідні
файли, записані усіма відображувачами та розділювачами, та завантажує їх
на локальну машину, на якій виконується задача reduce. Потім ці окремі
фрагменти даних сортуються за ключем у один більший список пар ключ -
значення. Мета такого сортування - об’єднати еквівалентні ключі разом, щоб
їх значення можна було легко перебирати у завданні reduce. Фреймворк
обробляє все автоматично, з можливістю користувацького коду
контролювати порядок сортування та групування ключів.
MapReduce
Редуктор (reducer) приймає згруповані дані як вхідні дані і запускає
функцію reduce один раз для кожної групи ключів. Функції передається
ключ та ітератор для всіх значень, пов'язаних з цим ключем. Дані
можна агрегувати, фільтрувати та об’єднувати різними способами.
Після того, як функція reduce виконана, вона посилає нуль або більше
пар ключ/значення на останній крок, вихідне форматування.
Вихідне форматування переводить кінцеву пару ключ/значення з
функції reduce та записує її у файл. За замовчуванням ключ і значення
розділяються за допомогою tab та окремі записи розділяються
символом нового рядка.
YARN
Apache YARN (Yet Another Resource Negotiator) - це система управління
кластерними ресурсами Hadoop.
YARN надає API для запитів та роботи з ресурсами кластера, але ці API
зазвичай не використовуються безпосередньо кодом користувача.
Натомість користувачі пишуть до API вищого рівня, що надаються
розподіленими обчислювальними платформами, які самі побудовані
на YARN і приховують дані користувача про управління ресурсами.
YARN
YARN надає свої основні послуги за допомогою двох типів фонових
програм (демонів): менеджера ресурсів (по одному на кластер) для
управління використанням ресурсів у кластері, та менеджерів вузлів,
що працюють на всіх вузлах кластера для запуску та моніторингу
контейнерів. Контейнер виконує специфічний для програми процес із
обмеженим набором ресурсів (пам’ять, процесор тощо).
YARN
YARN
YARN має гнучку модель для подання запитів на ресурси. Запит на
набір контейнерів може виражати кількість комп'ютерних ресурсів,
необхідних для кожного контейнера (пам'ять і процесор), а також
обмеження на розташування контейнерів у цьому запиті.
У загальному випадку запуску контейнера для обробки блоку HDFS
(скажімо, для запуску завдання Map в MapReduce), програма буде
запитувати контейнер на одному з вузлів, що містять три репліки блоку,
або на вузлі в одному з стійки, на яких розміщені репліки, або, якщо це
не вдасться, на будь-якому вузлі кластера.
YARN
Додаток YARN може надсилати запити на ресурси в будь-який час під час роботи.
Наприклад, програма може подати всі свої запити заздалегідь, або вона може
застосувати більш динамічний підхід, за допомогою якого вона динамічно запитує
більше ресурсів для задоволення змін у вимогахпрограми.
Тривалість роботи програми YARN може різко змінюватися: від короткотривалої
програми, яка триває кілька секунд, до довготривалої програми, яка працює
протягом кількох днів або навіть місяців. Має сенс класифікувати програми з точки
зору того, як вони впливають на виконання завдання від користувачів.
Найпростіший випадок - це одна програма на кожне завдання користувача, такий
підхід використовується в MapReduce.
Друга модель полягає у запуску однієї програми на робочий процес або сеанс
користувача (можливо, не пов’язаних між собою) завдань. Цей підхід може бути
більш ефективним, ніж перший, оскільки контейнери можна використовувати
повторно між завданнями, а також існує можливість кешування проміжних даних
між завданнями. Spark - приклад, який використовує цю модель.
Третя модель-це тривала програма, якою користуються різні користувачі. Така
програма часто виконує роль координатора.
YARN
Друга модель полягає у запуску однієї програми на завдання або сеанс
користувача, що складається з кількох можливо не пов’язаних між
собою завдань. Цей підхід може бути більш ефективним, ніж перший,
оскільки контейнери можна використовувати повторно між
завданнями, а також існує можливість кешування проміжних даних між
завданнями. Таку модель використовує Spark.
Третя модель - це довготривала програма, якою користуються різні
користувачі. Така програма часто виконує роль координатора.
YARN
В ідеальному світі запити, які подає додаток YARN, будуть негайно
задоволені. У реальному світі, однак, ресурси обмежені, і на
завантаженому кластері додатку часто доведеться чекати, щоб
виконати деякі свої запити. Завдання планувальника YARN -
розподіляти ресурси для програм відповідно до певної політики.
Планування в цілому є складною проблемою, і немає однієї
"найкращої" політики, тому YARN надає можливість вибору
планувальників та політик, які можна налаштувати.
YARN
У YARN доступні три планувальники: FIFO, Capacity та Fair Schedulers.
YARN
У YARN доступні три планувальники: FIFO, Capacity та Fair Schedulers.

You might also like