73

Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Embed Size (px)

Citation preview

Page 1: Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Page 2: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

О чем доклад?

✦Основные узлы и компоненты Hadoop✦Зачем обеспечивать высокую доступность

кластера✦Как постичь дзен Hadoop

High Availability (HA)✦Наш опыт внедрения HA

Page 3: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Что будет в докладе

5полезных

ссылок

2

72слайда

про Hadoop

2картиныЛожкина

5блок-схем

4

1КО

5классныхсоветов

историифакапов

sequencediagrams

Page 4: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Компоненты кластера

Page 5: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Hadoop "на пальцах"

Hadoop Distributed FileSystemФайловая система

● Иерархическая● Распределенная● С репликацией

Yet Another Resource NegotiatorВычислительные ресурсы кластера

● Набор нод● Ядра (vCores)● RAM

Программный комплекс

Page 6: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HDFS

Page 7: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HDFS

Page 8: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HDFS: узлы и роли

NameNode

✦ Центральный узел кластера

✦ Хранит индекс FS

✦ Предоставляет API для манипуляций с ним

✦ Знает, где лежат данные

Page 9: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HDFS

Page 10: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HDFS: узлы и роли

DataNode

✦ Принимает read/write запросы к содержимому файлов HDFS

✦ Хранит содержимое файлов на своей дисковой подсистеме

Page 11: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HDFS: запрос с отказом DataNode

Page 12: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

NameNode отправляет клиента на “живую” реплику файла

Page 13: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HDFS: запрос с отказом NameNode

Page 14: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HDFS: выводы

✦Выход из строя датанод не критичен, пока есть хотя бы одна, хранящая копию данных

✦Выход из строя неймноды ведёт к полной недоступности HDFS

Page 15: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

YARN

Page 16: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

YARN

Page 17: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

YARN: узлы и роли

ResourceManager

✦ Запущен на одной машине кластера

✦ Принимает пользовательские запросы на запуск программ в кластере

✦ Делит ресурсы кластера между программами

✦ Просит ресурсы у конкретных NodeManager

Page 18: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

YARN

Page 19: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

YARN: узлы и роли

NodeManager

✦ Запущен на “рабочих” машинах кластера

✦ Принимает запросы на создание JVM с заданным размером HEAP и резервированием виртуальных ядер

✦ Исполняет пользовательский код в этих JVM

Page 20: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

YARN: запуск программы пользователя

Page 21: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

YARN: отказ ResourceManager

Вспоминаем картинку про менеджера и разработчика

Page 22: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

YARN: выводы

✦Выход из строя NodeManager’ов приводит к потере части ресурсов кластера

✦Выход из строя ResourceManager’а приводит к невозможности запуска чего-либо на кластере

Page 23: Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Page 24: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Опыт Badoo по эксплуатации

Hadoop до HA

Page 25: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

До HA: edit-logs && fsimageПри старте, NN производит combine своих edit-логов с транзакциями

○ если NN долго не перезапускалась, то restart мог достигать нескольких часов

Решение:○ перезапуск NN не реже чем раз в месяц○ ручное поэтапное подсовывание edit-логов○ использовать свежий Hadoop :)○ правильно настроить edit-logs

Page 26: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

До HA: совсем грустноОднажды мы не смогли подняться из edit-логов1. Пропатчили код восстановления2. Сделали binary-патч одного jar-файла3. Скопировали все edit-логи на отдельную

машину4. Восстановились с патченным кодом5. Скопировали snapshot обратно6. …7. PROFIT!8. Downtime - почти сутки

Page 27: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

В итоге, зачем нужен HA?

Page 28: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

При HA Риски без HA✦Fault-tolerance

✦Низкий downtime

✦Не теряем $$$

✦Крепкий сон

✦HDFS => набор несвязных бинарей

✦Вместо вычислительного кластера - куча несвязных машин

Page 29: Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Page 30: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Hadoop в Badoo

✦Инсталляция из 67 машин

✦Ёмкость HDFS ~ 850 Tb, 50M объектов

✦CPU: 2700 cores

✦RAM: 10 Tb

Page 31: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Hadoop в Badoo: ETL

✦ ETL-процессыЗагрузили много данных из внешних источников, посчитали свёртки, выгрузили в аналитическую БД

✦ > 700 заданий в сутки

✦ Десятки Tb на чтение

Page 32: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Hadoop в Badoo: Deep storage

✦ Deep storage для хранения исторических данных

✦ “Backup” данных из аналитической базы

✦ По некоторым источникам есть история за несколько лет

✦ > 600 Tb занятого дискового пространства

Page 33: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Hadoop в Badoo: deep storage

Кластер “чихает” - выпадают ноды :)

Page 34: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Hadoop в Badoo: realtime

✦Многие считают, что Hadoop и realtime - несовместимо

✦Но при правильных инструментах это не так :)

✦Keywords: Apache Spark, Storm, Samza

Page 35: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Hadoop в Badoo: realtime✦Потоковая агрегация событий

✦> 600 типов событий

✦Входная мощность: 350K событий/сек

✦Выходная мощность: 100К метрик/сек

✦Доклад

Page 36: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Цена downtime

✦Недоступность части данных для аналитиков к началу business time

✦Деградация графиков для realtime

✦Невозможность получения оперативной статистики

Page 37: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

И что же делать?

Page 38: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

High Availability в теории

✦Hot standby✦Round-robin request balancing✦Шардинг

Page 39: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

High Availability в теории

✦Hot standby - используется в Hadoop для резервирования SPOF (NameNode, ResourceManager)

✦Шардинг - Federated NameNode

Page 40: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HA HDFS: общая схема

Page 41: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HA HDFS: общая схема

✦Пользовательские запросы по-прежнему обслуживает одна активная NN

✦Есть реплика, читающая журнал с транзакциями

Page 42: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HA HDFS: компоненты failover

Page 43: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HA HDFS: компоненты (Zookeeper)ZookeeperРаспределённая система с функционалом:

lock-service leader election иерархическое хранение конфигурацийВ рамках HDFS HA: выбирает активную NN предоставляет для неё лок оповещает об изменении статуса NN

Page 44: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HA HDFS: компоненты (ZKFC)ZKFailoverController (ZKFC)Вспомогательный сервис для автоматического failover’а

запускается на машинах NN мониторит живость локальной NN слушает уведомления от Zookeer производит failover

Page 45: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HA HDFS: компоненты (Journal Node)

✦ Реплика состояния NameNode

✦ Распределённость

✦ Отсутствие SPOF

✦ Запись в самую медленную реплику не тормозит общий процесс

Page 46: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Механизм failover

https://issues.apache.org/jira/browse/HDFS-2185

Page 47: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HDFS failover: summary

✦Активная NN держит лок в ZK✦Если лок пропал, то произвольный

ZKFC пытается сделать свою NN активной в ZK

✦Если удалось - переводит остальные NN в standby, а локальную делает active

Page 48: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HA YARN: общая схема

Page 49: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HA YARN: общая схема

✦ResourceManager’ы используют механизм leader-election, предоставляемый YARN

✦Для репликации состояния мастера используется хранилище Zookeeper

✦Контроллер failover’а встроен в сам демон RM, и не требует отдельного приложения

Page 50: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HA: внедрение

✦Research ~ 5 дней✦Инсталляция на dev-кластере: 2 дня✦Стрельбы/проверка

работоспособности – 2 дня✦Адаптация клиентов – 2 дня

Page 51: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HA: внедрение

✦С момента внедрения – не было даунтаймов дольше 10 секунд

✦Переключения между “мастерами” иногда случаются

✦Но не оказывают существенного влияния

Page 52: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

С другой стороны баррикад

(настройка клиентов)

Page 53: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HDFS: клиентский API

✦ Native API

клиенты - в основном - JAVA

JAVA-клиенты знают про конфигурацию HA

✦ WebHDFS

HTTP-based, для любого языка

клиенты не знают, какая NN активная

Page 54: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

WebHDFS: standby NNcurl http://stanbynn.domain:50070/webhdfs/v1/?op=LISTSTATUS

{ "RemoteException":

{"exception":"StandbyException","message":"Operation category READ is not supported in

state standby"}

}

Standby-нода не обслуживает клиентские запросы

http://$host:50070/jmx?qry=Hadoop:service=NameNode,name=NameNodeStatus

Page 55: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

WebHDFS: вариант 1

Page 56: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

WebHDFS: вариант 1Pro:

1. Просто, как валенок

Cons:2. Лишний HTTP-вызов3. Имплементация под

каждый ЯП(у нас их много :)

Page 57: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

WebHDFS: вариант 2Программный балансировщик

прокси перед NN проверяет апстримы через URL http://$host:50070/jmx?qry=Hadoop:service=NameNode,name=NameNodeStatus

Более одного варианта: Nginx HAProxy ваш любимый

Page 58: Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Page 59: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

WebHDFS: вариант 3 (hardware balancer)

✦ В Badoo - на входе в каждый ДЦ

✦ Маршрутизирует весь трафик

✦ Имеет функции и возможности тюнинга, превосходящие программный балансер

✦ Умеем его готовить

✦ Применили для WebHDFS

Page 60: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Советы из опыта эксплуатации

Page 61: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HDFS: rock your NameNode

✦ Простое правило:1М файлов = 1 Gb heap size для NN

✦ В противном случае наблюдается деградация

✦ Не влезли в RAM одного хоста - добро пожаловать в Federated HDFS (мы пока не доросли до него)

Page 62: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HDFS: rock your NameNode

✦ Вдохновлялись статьей от Hortonworks

✦ Асинхронное логирование операций с HDFS (у нас их > 3K RPS)

✦ Достаточное число потоков для обработки API запросов

✦ Выключили atime (как и в обычных FS на наших серверах)

Page 63: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

YARN: tune NodeManager

✦ Увеличили HEAP size

✦ В мирное время не требуется, но у нас приложения Spark используют его для обмена промежуточными данными

Page 64: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HDFS: datanode

✦ Т.к. репликация программная, то нет большого смысла использовать RAID

✦ JBOD - наш друг: сила в шпинделях!

Page 65: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HDFS: выбор диска для блоков

Page 66: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

HDFS: выбор диска для блоков

✦ By default - Round Robin

✦ Но на первом диске - OS => он заведомо меньше

✦ Всегда образуется перекос

✦ Решение 1: настройка для датанодыAvailableSpaceVolumeChoosingPolicy

✦ Решение 2: Hadoop 3 + междисковый балансер

Page 67: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Человек против машины

Может ли один аналитик уложить кластер?

Page 68: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Нет ничего невозможного!

✦ Пишет 4-х этажный SQL

✦ Запускаем, ждём 5 минут

✦ Забиваем IN/OUT eth на датанодах

✦ Забиваем свитч

✦ Залезаем в iowait

✦ PROFIT!

Page 69: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

How to avoid

✦ На датанодах - 10Gb eth

или:

✦ Стараемся уважать data-locality(работаем с данными по месту их физического хранения)

Page 70: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Что вы узнали

✦ Из каких базовых сервисов состоит Hadoop

✦ Какие там существуют SPOF

✦ С помощью каких средств они устраняются

✦ Какие действия предпринять для адаптации клиентов кластера к HA

Page 71: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Полезные материалы

✦ https://tech.badoo.com

✦ Доклад Badoo про использование Hadoop

✦ Инструкции по настройке HA

✦ Тюнинг NameNode

Page 72: Александр Крашенинников "Hadoop High Availability: опыт Badoo"

Кажется, я обещал 2 картины?