SlideShare a Scribd company logo
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
О чем доклад?
✦Основные узлы и компоненты Hadoop
✦Зачем обеспечивать высокую доступность
кластера
✦Как постичь дзен Hadoop
High Availability (HA)
✦Наш опыт внедрения HA
Что будет в докладе
5полезных
ссылок
2
72слайда
про
Hadoop
2картины
Ложкина
5блок-схем
4
1
КО
5классных
советов
истории
факапов
sequence
diagrams
Компоненты кластера
Hadoop "на пальцах"
Hadoop Distributed FileSystem
Файловая система
● Иерархическая
● Распределенная
● С репликацией
Yet Another Resource Negotiator
Вычислительные ресурсы кластера
● Набор нод
● Ядра (vCores)
● RAM
Программный комплекс
HDFS
HDFS
HDFS: узлы и роли
NameNode
✦ Центральный узел кластера
✦ Хранит индекс FS
✦ Предоставляет API для манипуляций с ним
✦ Знает, где лежат данные
HDFS
HDFS: узлы и роли
DataNode
✦ Принимает read/write запросы к содержимому
файлов HDFS
✦ Хранит содержимое файлов на своей дисковой
подсистеме
HDFS: запрос с отказом DataNode
NameNode отправляет клиента на “живую” реплику файла
HDFS: запрос с отказом NameNode
HDFS: выводы
✦Выход из строя датанод не критичен,
пока есть хотя бы одна, хранящая
копию данных
✦Выход из строя неймноды ведёт к
полной недоступности HDFS
YARN
YARN
YARN: узлы и роли
ResourceManager
✦ Запущен на одной машине кластера
✦ Принимает пользовательские запросы на
запуск программ в кластере
✦ Делит ресурсы кластера между программами
✦ Просит ресурсы у конкретных NodeManager
YARN
YARN: узлы и роли
NodeManager
✦ Запущен на “рабочих” машинах кластера
✦ Принимает запросы на создание JVM с
заданным размером HEAP и резервированием
виртуальных ядер
✦ Исполняет пользовательский код в этих JVM
YARN: запуск программы пользователя
YARN: отказ ResourceManager
Вспоминаем картинку про
менеджера и разработчика
YARN: выводы
✦Выход из строя NodeManager’ов
приводит к потере части ресурсов
кластера
✦Выход из строя ResourceManager’а
приводит к невозможности запуска
чего-либо на кластере
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Опыт Badoo по эксплуатации
Hadoop до HA
До HA: edit-logs && fsimage
При старте, NN производит combine своих edit-
логов с транзакциями
○ если NN долго не перезапускалась, то
restart мог достигать нескольких часов
Решение:
○ перезапуск NN не реже чем раз в месяц
○ ручное поэтапное подсовывание edit-логов
○ использовать свежий Hadoop :)
○ правильно настроить edit-logs
До HA: совсем грустно
Однажды мы не смогли подняться из edit-логов
1. Пропатчили код восстановления
2. Сделали binary-патч одного jar-файла
3. Скопировали все edit-логи на отдельную
машину
4. Восстановились с патченным кодом
5. Скопировали snapshot обратно
6. …
7. PROFIT!
8. Downtime - почти сутки
В итоге, зачем нужен HA?
При HA Риски без HA
✦Fault-tolerance
✦Низкий downtime
✦Не теряем $$$
✦Крепкий сон
✦HDFS => набор
несвязных
бинарей
✦Вместо
вычислительного
кластера - куча
несвязных машин
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Hadoop в Badoo
✦Инсталляция из 67 машин
✦Ёмкость HDFS ~ 850 Tb, 50M объектов
✦CPU: 2700 cores
✦RAM: 10 Tb
Hadoop в Badoo: ETL
✦ ETL-процессы
Загрузили много данных из внешних
источников, посчитали свёртки, выгрузили в
аналитическую БД
✦ > 700 заданий в сутки
✦ Десятки Tb на чтение
Hadoop в Badoo: Deep storage
✦ Deep storage для хранения исторических данных
✦ “Backup” данных из аналитической базы
✦ По некоторым источникам есть история за
несколько лет
✦ > 600 Tb занятого дискового пространства
Hadoop в Badoo: deep storage
Кластер “чихает” - выпадают ноды :)
Hadoop в Badoo: realtime
✦Многие считают, что Hadoop и realtime -
несовместимо
✦Но при правильных инструментах это не
так :)
✦Keywords: Apache Spark, Storm, Samza
Hadoop в Badoo: realtime
✦Потоковая агрегация событий
✦> 600 типов событий
✦Входная мощность: 350K событий/сек
✦Выходная мощность: 100К метрик/сек
✦Доклад
Цена downtime
✦ Недоступность части данных для аналитиков к
началу business time
✦ Деградация графиков для realtime
✦ Невозможность получения оперативной
статистики
И что же делать?
High Availability в теории
✦Hot standby
✦Round-robin request balancing
✦Шардинг
High Availability в теории
✦Hot standby - используется в
Hadoop для резервирования SPOF
(NameNode, ResourceManager)
✦Шардинг - Federated NameNode
HA HDFS: общая схема
HA HDFS: общая схема
✦Пользовательские запросы по-
прежнему обслуживает одна
активная NN
✦Есть реплика, читающая
журнал с транзакциями
HA HDFS: компоненты failover
HA HDFS: компоненты (Zookeeper)
Zookeeper
Распределённая система с функционалом:

lock-service

leader election

иерархическое хранение конфигураций
В рамках HDFS HA:

выбирает активную NN

предоставляет для неё лок

оповещает об изменении статуса NN
HA HDFS: компоненты (ZKFC)
ZKFailoverController (ZKFC)
Вспомогательный сервис для автоматического
failover’а

запускается на машинах NN

мониторит живость локальной NN

слушает уведомления от Zookeer

производит failover
HA HDFS: компоненты (Journal Node)
✦ Реплика состояния NameNode
✦ Распределённость
✦ Отсутствие SPOF
✦ Запись в самую медленную реплику не тормозит
общий процесс
Механизм failover
https://issues.apache.org/jira/browse/HDFS-2185
HDFS failover: summary
✦Активная NN держит лок в ZK
✦Если лок пропал, то произвольный
ZKFC пытается сделать свою NN
активной в ZK
✦Если удалось - переводит остальные
NN в standby, а локальную делает
active
HA YARN: общая схема
HA YARN: общая схема
✦ResourceManager’ы используют
механизм leader-election,
предоставляемый YARN
✦Для репликации состояния мастера
используется хранилище Zookeeper
✦Контроллер failover’а встроен в сам
демон RM, и не требует отдельного
приложения
HA: внедрение
✦Research ~ 5 дней
✦Инсталляция на dev-кластере: 2 дня
✦Стрельбы/проверка
работоспособности – 2 дня
✦Адаптация клиентов – 2 дня
HA: внедрение
✦С момента внедрения – не было
даунтаймов дольше 10 секунд
✦Переключения между “мастерами”
иногда случаются
✦Но не оказывают существенного
влияния
С другой стороны баррикад
(настройка клиентов)
HDFS: клиентский API
✦ Native API
клиенты - в основном - JAVA
JAVA-клиенты знают про конфигурацию HA
✦ WebHDFS
HTTP-based, для любого языка
клиенты не знают, какая NN активная
WebHDFS: standby NN
curl 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
WebHDFS: вариант 1
WebHDFS: вариант 1
Pro:
1. Просто, как валенок
Cons:
2. Лишний HTTP-вызов
3. Имплементация под
каждый ЯП
(у нас их много :)
WebHDFS: вариант 2
Программный балансировщик

прокси перед NN

проверяет апстримы через URL
http://$host:50070/jmx?qry=Hadoop:service=NameNode,name=NameNodeStatus
Более одного варианта:

Nginx

HAProxy

ваш любимый
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
WebHDFS: вариант 3 (hardware balancer)
✦ В Badoo - на входе в каждый ДЦ
✦ Маршрутизирует весь трафик
✦ Имеет функции и возможности тюнинга,
превосходящие программный балансер
✦ Умеем его готовить
✦ Применили для WebHDFS
Советы из опыта эксплуатации
HDFS: rock your NameNode
✦ Простое правило:
1М файлов = 1 Gb heap size для NN
✦ В противном случае наблюдается деградация
✦ Не влезли в RAM одного хоста - добро
пожаловать в Federated HDFS (мы пока не
доросли до него)
HDFS: rock your NameNode
✦ Вдохновлялись статьей от Hortonworks
✦ Асинхронное логирование операций с HDFS (у
нас их > 3K RPS)
✦ Достаточное число потоков для обработки API
запросов
✦ Выключили atime (как и в обычных FS на
наших серверах)
YARN: tune NodeManager
✦ Увеличили HEAP size
✦ В мирное время не требуется, но у нас
приложения Spark используют его для обмена
промежуточными данными
HDFS: datanode
✦ Т.к. репликация
программная, то нет
большого смысла
использовать RAID
✦ JBOD - наш друг: сила
в шпинделях!
HDFS: выбор диска для блоков
HDFS: выбор диска для блоков
✦ By default - Round Robin
✦ Но на первом диске - OS => он заведомо меньше
✦ Всегда образуется перекос
✦ Решение 1: настройка для датаноды
AvailableSpaceVolumeChoosingPolicy
✦ Решение 2: Hadoop 3 + междисковый балансер
Человек против машины
Может ли один аналитик уложить кластер?
Нет ничего невозможного!
✦ Пишет 4-х этажный SQL
✦ Запускаем, ждём 5 минут
✦ Забиваем IN/OUT eth на датанодах
✦ Забиваем свитч
✦ Залезаем в iowait
✦ PROFIT!
How to avoid
✦ На датанодах - 10Gb eth
или:
✦ Стараемся уважать data-locality
(работаем с данными по месту их физического
хранения)
Что вы узнали
✦ Из каких базовых сервисов состоит Hadoop
✦ Какие там существуют SPOF
✦ С помощью каких средств они устраняются
✦ Какие действия предпринять для адаптации
клиентов кластера к HA
Полезные материалы
✦ https://tech.badoo.com
✦ Доклад Badoo про использование Hadoop
✦ Инструкции по настройке HA
✦ Тюнинг NameNode
Кажется, я обещал 2 картины?
Спасибо!
krash@corp.badoo.com
krash3@gmail.com

More Related Content

PPTX
Docker в работе: взгляд на использование в Badoo через год
PDF
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
PDF
Архитектура HAWQ / Алексей Грищенко (Pivotal)
PPTX
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
PDF
Архитектура хранения фотографий в Badoo
PPTX
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
PDF
My talk at Highload++ 2015
PPTX
Алексей Рагозин "Java и linux борьба за микросекунды"
Docker в работе: взгляд на использование в Badoo через год
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Архитектура HAWQ / Алексей Грищенко (Pivotal)
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
Архитектура хранения фотографий в Badoo
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
My talk at Highload++ 2015
Алексей Рагозин "Java и linux борьба за микросекунды"

What's hot (20)

PPTX
Денис Иванов
PDF
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
PPTX
Hosting for forbes.ru_
PDF
Загрузка больших объемов данных для бизнес-аналитики
PDF
Вадим Мадисон "Опыт разработки через микросервисы"
PDF
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
PDF
Docker & Puppet: как их скрестить и надо ли вам это?
PDF
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
PPTX
Тестируем производительность распределённых систем, Александр Киров (Parallels)
PPTX
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
PDF
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
PDF
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
PPTX
Net core and linux in production
PPTX
MyRocks: табличный движок для MySQL на основе RocksDB
PDF
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
PPTX
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
PDF
Реализация восстановления после аварий / Сергей Бурладян (Avito)
PDF
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
PDF
My talk on monitoring systems at RootConf 2016
PDF
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Денис Иванов
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Hosting for forbes.ru_
Загрузка больших объемов данных для бизнес-аналитики
Вадим Мадисон "Опыт разработки через микросервисы"
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Docker & Puppet: как их скрестить и надо ли вам это?
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Net core and linux in production
MyRocks: табличный движок для MySQL на основе RocksDB
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
My talk on monitoring systems at RootConf 2016
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ad

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

PDF
Мастер-класс по BigData Tools для HappyDev'15
PDF
Rapid Deployment of Hadoop Development Environments
PDF
Cостав дистрибутва Hortonworks data platform 2.3
PDF
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
PDF
Лекция 14. Hadoop в Поиске Mail.Ru
PPTX
Андрей Созыкин — ИММ УрО РАН — ICDBA2016
PDF
Introductory Keynote at Hadoop Workshop by Ospcon (2014)
PPT
ADD2010: Обработка большого объема данных на платформеApache Hadoop
ODP
Apache Hadoop
PDF
Лекция 2. Основы Hadoop
PDF
10 HappyDev-lite'14 Иван Погудин, Анатолий Никулин. Решение задач, связанных...
PDF
Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...
PDF
12 HappyDev-lite-2014. Иван Погудин, Анатолий Никулин. Решение задач, связан...
PDF
Лекция 3. Распределённая файловая система HDFS
PDF
Платформа Apache Hadoop
PDF
02 - Hadoop. Архитектура HDFS
PDF
Практика миграции реляционных баз данных в экосистему Hadoop
PDF
Hadoop presentation
PPTX
ElasticSearch и Heka: как мы учились просеивать слона через сито / Адель Сачк...
PPTX
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Мастер-класс по BigData Tools для HappyDev'15
Rapid Deployment of Hadoop Development Environments
Cостав дистрибутва Hortonworks data platform 2.3
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
Лекция 14. Hadoop в Поиске Mail.Ru
Андрей Созыкин — ИММ УрО РАН — ICDBA2016
Introductory Keynote at Hadoop Workshop by Ospcon (2014)
ADD2010: Обработка большого объема данных на платформеApache Hadoop
Apache Hadoop
Лекция 2. Основы Hadoop
10 HappyDev-lite'14 Иван Погудин, Анатолий Никулин. Решение задач, связанных...
Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...
12 HappyDev-lite-2014. Иван Погудин, Анатолий Никулин. Решение задач, связан...
Лекция 3. Распределённая файловая система HDFS
Платформа Apache Hadoop
02 - Hadoop. Архитектура HDFS
Практика миграции реляционных баз данных в экосистему Hadoop
Hadoop presentation
ElasticSearch и Heka: как мы учились просеивать слона через сито / Адель Сачк...
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Ad

More from IT Event (20)

PDF
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
PDF
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
PDF
Max Voloshin - "Organization of frontend development for products with micros...
PDF
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
PDF
Konstantin Krivlenia - "Continuous integration for frontend"
PPTX
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
PDF
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
PDF
Vladimir Grinenko - "Dependencies in component web done right"
PDF
Dmitry Bartalevich - "How to train your WebVR"
PDF
Aleksey Bogachuk - "Offline Second"
PDF
James Allardice - "Building a better login with the credential management API"
PDF
Fedor Skuratov "Dark Social: as messengers change the market of social media ...
PPTX
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
PPTX
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
PDF
Наш ответ Uber’у
PDF
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
PDF
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
PDF
Mete Atamel "Resilient microservices with kubernetes"
PDF
Andrew Stain "User acquisition"
PDF
Anna Lavrova "How to build a mutually beneficial relationships with the clien...
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
Max Voloshin - "Organization of frontend development for products with micros...
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Konstantin Krivlenia - "Continuous integration for frontend"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
Vladimir Grinenko - "Dependencies in component web done right"
Dmitry Bartalevich - "How to train your WebVR"
Aleksey Bogachuk - "Offline Second"
James Allardice - "Building a better login with the credential management API"
Fedor Skuratov "Dark Social: as messengers change the market of social media ...
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
Наш ответ Uber’у
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Mete Atamel "Resilient microservices with kubernetes"
Andrew Stain "User acquisition"
Anna Lavrova "How to build a mutually beneficial relationships with the clien...

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

  • 2. О чем доклад? ✦Основные узлы и компоненты Hadoop ✦Зачем обеспечивать высокую доступность кластера ✦Как постичь дзен Hadoop High Availability (HA) ✦Наш опыт внедрения HA
  • 3. Что будет в докладе 5полезных ссылок 2 72слайда про Hadoop 2картины Ложкина 5блок-схем 4 1 КО 5классных советов истории факапов sequence diagrams
  • 5. Hadoop "на пальцах" Hadoop Distributed FileSystem Файловая система ● Иерархическая ● Распределенная ● С репликацией Yet Another Resource Negotiator Вычислительные ресурсы кластера ● Набор нод ● Ядра (vCores) ● RAM Программный комплекс
  • 8. HDFS: узлы и роли NameNode ✦ Центральный узел кластера ✦ Хранит индекс FS ✦ Предоставляет API для манипуляций с ним ✦ Знает, где лежат данные
  • 10. HDFS: узлы и роли DataNode ✦ Принимает read/write запросы к содержимому файлов HDFS ✦ Хранит содержимое файлов на своей дисковой подсистеме
  • 11. HDFS: запрос с отказом DataNode
  • 12. NameNode отправляет клиента на “живую” реплику файла
  • 13. HDFS: запрос с отказом NameNode
  • 14. HDFS: выводы ✦Выход из строя датанод не критичен, пока есть хотя бы одна, хранящая копию данных ✦Выход из строя неймноды ведёт к полной недоступности HDFS
  • 15. YARN
  • 16. YARN
  • 17. YARN: узлы и роли ResourceManager ✦ Запущен на одной машине кластера ✦ Принимает пользовательские запросы на запуск программ в кластере ✦ Делит ресурсы кластера между программами ✦ Просит ресурсы у конкретных NodeManager
  • 18. YARN
  • 19. YARN: узлы и роли NodeManager ✦ Запущен на “рабочих” машинах кластера ✦ Принимает запросы на создание JVM с заданным размером HEAP и резервированием виртуальных ядер ✦ Исполняет пользовательский код в этих JVM
  • 20. YARN: запуск программы пользователя
  • 21. YARN: отказ ResourceManager Вспоминаем картинку про менеджера и разработчика
  • 22. YARN: выводы ✦Выход из строя NodeManager’ов приводит к потере части ресурсов кластера ✦Выход из строя ResourceManager’а приводит к невозможности запуска чего-либо на кластере
  • 24. Опыт Badoo по эксплуатации Hadoop до HA
  • 25. До HA: edit-logs && fsimage При старте, NN производит combine своих edit- логов с транзакциями ○ если NN долго не перезапускалась, то restart мог достигать нескольких часов Решение: ○ перезапуск NN не реже чем раз в месяц ○ ручное поэтапное подсовывание edit-логов ○ использовать свежий Hadoop :) ○ правильно настроить edit-logs
  • 26. До HA: совсем грустно Однажды мы не смогли подняться из edit-логов 1. Пропатчили код восстановления 2. Сделали binary-патч одного jar-файла 3. Скопировали все edit-логи на отдельную машину 4. Восстановились с патченным кодом 5. Скопировали snapshot обратно 6. … 7. PROFIT! 8. Downtime - почти сутки
  • 27. В итоге, зачем нужен HA?
  • 28. При HA Риски без HA ✦Fault-tolerance ✦Низкий downtime ✦Не теряем $$$ ✦Крепкий сон ✦HDFS => набор несвязных бинарей ✦Вместо вычислительного кластера - куча несвязных машин
  • 30. Hadoop в Badoo ✦Инсталляция из 67 машин ✦Ёмкость HDFS ~ 850 Tb, 50M объектов ✦CPU: 2700 cores ✦RAM: 10 Tb
  • 31. Hadoop в Badoo: ETL ✦ ETL-процессы Загрузили много данных из внешних источников, посчитали свёртки, выгрузили в аналитическую БД ✦ > 700 заданий в сутки ✦ Десятки Tb на чтение
  • 32. Hadoop в Badoo: Deep storage ✦ Deep storage для хранения исторических данных ✦ “Backup” данных из аналитической базы ✦ По некоторым источникам есть история за несколько лет ✦ > 600 Tb занятого дискового пространства
  • 33. Hadoop в Badoo: deep storage Кластер “чихает” - выпадают ноды :)
  • 34. Hadoop в Badoo: realtime ✦Многие считают, что Hadoop и realtime - несовместимо ✦Но при правильных инструментах это не так :) ✦Keywords: Apache Spark, Storm, Samza
  • 35. Hadoop в Badoo: realtime ✦Потоковая агрегация событий ✦> 600 типов событий ✦Входная мощность: 350K событий/сек ✦Выходная мощность: 100К метрик/сек ✦Доклад
  • 36. Цена downtime ✦ Недоступность части данных для аналитиков к началу business time ✦ Деградация графиков для realtime ✦ Невозможность получения оперативной статистики
  • 37. И что же делать?
  • 38. High Availability в теории ✦Hot standby ✦Round-robin request balancing ✦Шардинг
  • 39. High Availability в теории ✦Hot standby - используется в Hadoop для резервирования SPOF (NameNode, ResourceManager) ✦Шардинг - Federated NameNode
  • 40. HA HDFS: общая схема
  • 41. HA HDFS: общая схема ✦Пользовательские запросы по- прежнему обслуживает одна активная NN ✦Есть реплика, читающая журнал с транзакциями
  • 43. HA HDFS: компоненты (Zookeeper) Zookeeper Распределённая система с функционалом:  lock-service  leader election  иерархическое хранение конфигураций В рамках HDFS HA:  выбирает активную NN  предоставляет для неё лок  оповещает об изменении статуса NN
  • 44. HA HDFS: компоненты (ZKFC) ZKFailoverController (ZKFC) Вспомогательный сервис для автоматического failover’а  запускается на машинах NN  мониторит живость локальной NN  слушает уведомления от Zookeer  производит failover
  • 45. HA HDFS: компоненты (Journal Node) ✦ Реплика состояния NameNode ✦ Распределённость ✦ Отсутствие SPOF ✦ Запись в самую медленную реплику не тормозит общий процесс
  • 47. HDFS failover: summary ✦Активная NN держит лок в ZK ✦Если лок пропал, то произвольный ZKFC пытается сделать свою NN активной в ZK ✦Если удалось - переводит остальные NN в standby, а локальную делает active
  • 48. HA YARN: общая схема
  • 49. HA YARN: общая схема ✦ResourceManager’ы используют механизм leader-election, предоставляемый YARN ✦Для репликации состояния мастера используется хранилище Zookeeper ✦Контроллер failover’а встроен в сам демон RM, и не требует отдельного приложения
  • 50. HA: внедрение ✦Research ~ 5 дней ✦Инсталляция на dev-кластере: 2 дня ✦Стрельбы/проверка работоспособности – 2 дня ✦Адаптация клиентов – 2 дня
  • 51. HA: внедрение ✦С момента внедрения – не было даунтаймов дольше 10 секунд ✦Переключения между “мастерами” иногда случаются ✦Но не оказывают существенного влияния
  • 52. С другой стороны баррикад (настройка клиентов)
  • 53. HDFS: клиентский API ✦ Native API клиенты - в основном - JAVA JAVA-клиенты знают про конфигурацию HA ✦ WebHDFS HTTP-based, для любого языка клиенты не знают, какая NN активная
  • 54. WebHDFS: standby NN curl 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
  • 56. WebHDFS: вариант 1 Pro: 1. Просто, как валенок Cons: 2. Лишний HTTP-вызов 3. Имплементация под каждый ЯП (у нас их много :)
  • 57. WebHDFS: вариант 2 Программный балансировщик  прокси перед NN  проверяет апстримы через URL http://$host:50070/jmx?qry=Hadoop:service=NameNode,name=NameNodeStatus Более одного варианта:  Nginx  HAProxy  ваш любимый
  • 59. WebHDFS: вариант 3 (hardware balancer) ✦ В Badoo - на входе в каждый ДЦ ✦ Маршрутизирует весь трафик ✦ Имеет функции и возможности тюнинга, превосходящие программный балансер ✦ Умеем его готовить ✦ Применили для WebHDFS
  • 60. Советы из опыта эксплуатации
  • 61. HDFS: rock your NameNode ✦ Простое правило: 1М файлов = 1 Gb heap size для NN ✦ В противном случае наблюдается деградация ✦ Не влезли в RAM одного хоста - добро пожаловать в Federated HDFS (мы пока не доросли до него)
  • 62. HDFS: rock your NameNode ✦ Вдохновлялись статьей от Hortonworks ✦ Асинхронное логирование операций с HDFS (у нас их > 3K RPS) ✦ Достаточное число потоков для обработки API запросов ✦ Выключили atime (как и в обычных FS на наших серверах)
  • 63. YARN: tune NodeManager ✦ Увеличили HEAP size ✦ В мирное время не требуется, но у нас приложения Spark используют его для обмена промежуточными данными
  • 64. HDFS: datanode ✦ Т.к. репликация программная, то нет большого смысла использовать RAID ✦ JBOD - наш друг: сила в шпинделях!
  • 65. HDFS: выбор диска для блоков
  • 66. HDFS: выбор диска для блоков ✦ By default - Round Robin ✦ Но на первом диске - OS => он заведомо меньше ✦ Всегда образуется перекос ✦ Решение 1: настройка для датаноды AvailableSpaceVolumeChoosingPolicy ✦ Решение 2: Hadoop 3 + междисковый балансер
  • 67. Человек против машины Может ли один аналитик уложить кластер?
  • 68. Нет ничего невозможного! ✦ Пишет 4-х этажный SQL ✦ Запускаем, ждём 5 минут ✦ Забиваем IN/OUT eth на датанодах ✦ Забиваем свитч ✦ Залезаем в iowait ✦ PROFIT!
  • 69. How to avoid ✦ На датанодах - 10Gb eth или: ✦ Стараемся уважать data-locality (работаем с данными по месту их физического хранения)
  • 70. Что вы узнали ✦ Из каких базовых сервисов состоит Hadoop ✦ Какие там существуют SPOF ✦ С помощью каких средств они устраняются ✦ Какие действия предпринять для адаптации клиентов кластера к HA
  • 71. Полезные материалы ✦ https://tech.badoo.com ✦ Доклад Badoo про использование Hadoop ✦ Инструкции по настройке HA ✦ Тюнинг NameNode
  • 72. Кажется, я обещал 2 картины?