SlideShare a Scribd company logo
1 of 32
Download to read offline
Использование 
Hadoop в Badoo 
Валерий Старынин
В докладе будет рассказано: 
• Какую статистику мы собираем 
• Зачем нам потребовалось распределенное хранение и 
обработка статистики 
• Hadoop — это совсем не страшно 
• Как и что мы сделали, что получили, что планируем 
сделать еще
Badoo это: 
• Социальная сеть для поиска новых друзей 
• 226 млн. зарегистрированных пользователей 
• Работаем во всех странах мира 
• Мобильные приложения под Android, iOS, Windows, 
BlackBerry. А так же Wap и HTML5 версии 
• 2,5 дата-центра: в Европе, Америке и Азии 
• Более 3 000 серверов
Событие в статистике — что это такое? 
• Действия пользователей 
• Действия модераторов 
• Действия скриптов 
• Ошибки 
• Отчеты о выполнении
Scribe 
USA Europe
Статистика активности 
Primary key 
ts id vote_yes vote_no time_on_site 
2014-07-01 17476 57 6 730 
2014-07-01 19847 1 0 245 
2014-07-01 21822 4 18 223 
2014-07-01 21999 4 36 269 
2014-07-01 22069 14 18 6428 
2014-07-02 17476 55 49 4067 
2014-07-02 19847 3 0 1967 
2014-07-02 28406 6 7 591 
2014-07-02 30557 8 111 892
Проблемы 
• Ежемесячный объем таблиц до 350 Гб 
• Сложно добавлять колонки 
• Не хватает места на серверах 
• Нет детальной информации 
• Нельзя посчитать COUNT DISTINCT
Хочется: 
• хранить все в неагрегированном виде и долго 
• расширять объем хранилища без проблем 
• максимально упростить добавление колонок 
• обеспечить доступность данных для анализа 
• использовать SQL для обработки данных
Найден вариант - Hadoop 
• очень известный продукт 
• используется крупными компаниями (Yahoo!, Facebook) 
• в команде есть люди с опытом использования 
• на конференциях рассказывают истории успеха 
• должен подойти и нам 
Но! 
Мы чего-то боялись!
Что хорошего в Hadoop'е? 
• это не «черный ящик» 
• данные физически хранятся в виде файлов 
• данные реплицируются 
• есть HiveQL, похожий на синтаксис MySQL 
• можно работать с TSV и JSON
HiveQL 
CREATE EXTERNAL TABLE hadoop_activity_dump ( 
ts int, 
user_id bigint, 
passive_user_id bigint, 
action string, 
val int 
) 
PARTITIONED BY (dt string) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY 't' 
LINES TERMINATED BY 'n' 
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' 
LOCATION '#DATA_LOCATION#';
HiveQL 
SELECT * FROM hadoop_activity_dump; 
1409443200 247868708 3275040429 m:n 1 2014-08-31 
1409443200 2624466230 2284443029 m:y 1 2014-08-31 
1409443200 1195110158 0 t 11 2014-08-31 
1409443200 1286688141 0 t 21 2014-08-31 
1409443201 4038376852 0 t 45 2014-08-31 
1409443201 466067351 3099962807 m:n 1 2014-08-31 
1409443201 493584063 324505095 m:y 1 2014-08-31 
1409443201 1325438477 0 t 11 2014-08-31 
1409443201 881632551 0 t 32 2014-08-31
Использование в Badoo 
• Activity 
• длительное хранение данных 
• HotPanel 
• ClickStream
Мы перестали бояться 
И начали собирать события активности пользователей: 
ts ; user_id ; passive_user_id ; action; count 
2014-08-31 00:01:00 12345 54321m:n 1 
2014-08-31 00:01:05 23456 0t 45 
2014-08-31 00:01:05 23456 65432m:n 1 
2014-08-31 00:02:03 12345 76543m:y 1 
2014-08-31 00:02:03 12345 0t 50 
2014-08-31 00:05:00 23456 0t 21 
2014-08-31 00:10:00 12345 87654m:n 1
Доставка 
USA Europe 
hadoop 
split 
gzip 
split 
gzip
Построение агрегатов 
2014-08-31 12345m:n 1 
2014-08-31 23456t 45 
2014-08-31 23456m:n 1 
2014-08-31 12345m:y 1 
2014-08-31 12345t 50 
2014-08-31 23456t 21 
2014-08-31 12345m:n 1 
2014-08-31 12345m:n 2 2 
2014-08-31 23456t 66 2 
2014-08-31 23456m:n 1 1 
2014-08-31 12345m:y 2 1 
2014-08-31 12345t 50 1
Построение Activity 
INSERT INTO f_hadoop_activity 
SELECT 
activity_date 
, user_id 
, sum(case when act IN ('m:y') then val_sum else 0 end) as mm_vote_yes 
, sum(case when act IN ('m:n') then val_sum else 0 end) as mm_vote_no 
, sum(case when act IN ('t') then val_sum else 0 end) as time_on_site 
FROM staging_f_hadoop_activity 
GROUP BY activity_date, user_id;
Сбор из StatsCollector'а 
• StatsCollector собирает в MySQL, а хочется — в Hadoop 
• будем периодически перекладывать в Hadoop 
• выгружаем данные как есть, с заголовками колонок 
• при загрузке из Hadoop'а учитывается требуемый 
порядок колонок, отсутствующие заменяются значениями 
по-умолчанию
HotPanel 
• замена Google Analytics 
• собираем события в мобильных приложениях 
• события слабо структурированы — собираем и 
обрабатываем в JSON 
• аналитика по всевозможным параметрам
ClickStream 
На каждый запрос собираем все, что можно: 
• URL, referrer 
• ip, user_agent 
• user_id 
• все события StatsCollector'а 
Это позволяет делать подробнейший анализ любого 
происшествия
Мониторинг 
• состояние серверов 
• количество DataNode и TaskTracker'ов 
• количество under/over-replicated блоков
Backup 
• исходные файлы хранятся еще 2 дня на серверах загрузки 
• делается backup namespace image'а 
• делается backup информации от hadoop fsck, в которой 
есть названия файлов-блоков: 
hadoop fsck / -files -locations -blocks
Планы на будущее 
• Upgrade Hadoop 1.1.2 -> 2.5 
• использовать Spark, Shark 
• найти замену Scribe
Проблемы Hadoop 
• Hadoop выглядит не production-ready 
• от версии к версии меняется почти все 
• долго искали битый диск 
• не замещает битые блоки
И напоследок...
Немного Geek-порно 
Встречайте его!
Силён!
Быстр!
Вынослив!
Наш Hadoop-кластер! 
NameNode: 
• CPU 4 Core (+Hyper-threading) 
• RAM 64Gb 
• HDD 1.1Tb 
15x DataNodes 
• CPU 16 Core (+Hyper-threading) 
• RAM 192Gb 
• HDD 10x1.1Tb 
Ежедневно: 
• 100 Гб данных Activity 
• 1,2 Тб данных ClickStream 
• 270 Гб в сжатом виде, 
810 Гб с учетом репликации 
• 2∙109 событий
Спасибо за внимание! Вопросы? 
http://fb.com/BadooMoscow 
http://vk.com/badoocom 
http://twitter.com/BadooDev 
http://habrahabr.ru/company/badoo

More Related Content

What's hot

Архитектура хранения фотографий в Badoo
Архитектура хранения фотографий в BadooАрхитектура хранения фотографий в Badoo
Архитектура хранения фотографий в Badoo
Badoo Development
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
Ontico
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
Ontico
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Ontico
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
Ontico
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Ontico
 
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Ontico
 

What's hot (20)

Архитектура хранения фотографий в Badoo
Архитектура хранения фотографий в BadooАрхитектура хранения фотографий в Badoo
Архитектура хранения фотографий в Badoo
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
 
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераСпасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного Хецнера
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
 
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон Турецкий
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав Бахмутов
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
 
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
 

Viewers also liked

"Выбраться из спама - как повысить CTR рассылки без потери активности". Андре...
"Выбраться из спама - как повысить CTR рассылки без потери активности". Андре..."Выбраться из спама - как повысить CTR рассылки без потери активности". Андре...
"Выбраться из спама - как повысить CTR рассылки без потери активности". Андре...
Badoo Development
 
"Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан...
"Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан..."Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан...
"Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан...
Badoo Development
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Ontico
 
Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...
Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...
Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...
Andrey Sas
 
Информационная безопасность Олимпийских игр
Информационная безопасность Олимпийских игрИнформационная безопасность Олимпийских игр
Информационная безопасность Олимпийских игр
Cisco Russia
 
Case Study of Toyota Unintended Acceleration and Software Safety
Case Study of Toyota Unintended Acceleration and Software SafetyCase Study of Toyota Unintended Acceleration and Software Safety
Case Study of Toyota Unintended Acceleration and Software Safety
Philip Koopman
 

Viewers also liked (20)

Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
 
Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
 
"Выбраться из спама - как повысить CTR рассылки без потери активности". Андре...
"Выбраться из спама - как повысить CTR рассылки без потери активности". Андре..."Выбраться из спама - как повысить CTR рассылки без потери активности". Андре...
"Выбраться из спама - как повысить CTR рассылки без потери активности". Андре...
 
Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)
Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)
Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)
 
"Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан...
"Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан..."Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан...
"Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан...
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
 
Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...
Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...
Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...
 
Информационная безопасность Олимпийских игр
Информационная безопасность Олимпийских игрИнформационная безопасность Олимпийских игр
Информационная безопасность Олимпийских игр
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Docker networking
Docker networkingDocker networking
Docker networking
 
Мониторь, автоматизируй Docker
Мониторь, автоматизируй DockerМониторь, автоматизируй Docker
Мониторь, автоматизируй Docker
 
Docker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияDocker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрация
 
Docker penetration
Docker penetrationDocker penetration
Docker penetration
 
Case Study of Toyota Unintended Acceleration and Software Safety
Case Study of Toyota Unintended Acceleration and Software SafetyCase Study of Toyota Unintended Acceleration and Software Safety
Case Study of Toyota Unintended Acceleration and Software Safety
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
 
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, Erlyvideo
 
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma
 
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooTechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, Badoo
 

Similar to Использование Hadoop в Badoo, Валерий Старынин (Badoo)

Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Ontico
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
Oleg Tsarev
 
DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...
DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...
DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...
it-people
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
pgdayrussia
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.
Alexander Titov
 
Информационная безопасность в веб - основы
Информационная безопасность в веб - основыИнформационная безопасность в веб - основы
Информационная безопасность в веб - основы
Alex Chistyakov
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
Ontico
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилище
it-people
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Ontico
 

Similar to Использование Hadoop в Badoo, Валерий Старынин (Badoo) (20)

Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
 
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Software Analytics in frontend
Software Analytics in frontendSoftware Analytics in frontend
Software Analytics in frontend
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
 
DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...
DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...
DUMP-2015: «Использование социального графа одноклассников в Target Mail.Ru» ...
 
Социальный граф Одноклассников в Target Mail.Ru
Социальный граф Одноклассников в Target Mail.RuСоциальный граф Одноклассников в Target Mail.Ru
Социальный граф Одноклассников в Target Mail.Ru
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
 
Как использовать JupyterHub на 100% на примере ML-школы DataGym и компании La...
Как использовать JupyterHub на 100% на примере ML-школы DataGym и компании La...Как использовать JupyterHub на 100% на примере ML-школы DataGym и компании La...
Как использовать JupyterHub на 100% на примере ML-школы DataGym и компании La...
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитики
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.
 
Mmx cvk-2015
Mmx cvk-2015Mmx cvk-2015
Mmx cvk-2015
 
Информационная безопасность в веб - основы
Информационная безопасность в веб - основыИнформационная безопасность в веб - основы
Информационная безопасность в веб - основы
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилище
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
 
Хранилище данных Avito: аналитика для микросервисной архитектуры / Артем Дани...
Хранилище данных Avito: аналитика для микросервисной архитектуры / Артем Дани...Хранилище данных Avito: аналитика для микросервисной архитектуры / Артем Дани...
Хранилище данных Avito: аналитика для микросервисной архитектуры / Артем Дани...
 

More from Badoo Development

Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
Badoo Development
 
Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo
Badoo Development
 
5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада
Badoo Development
 

More from Badoo Development (20)

Viktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationViktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel Automation
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Григорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUГригорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RU
 
Андрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерАндрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.Браузер
 
Филипп Уваров, Avito
Филипп Уваров, AvitoФилипп Уваров, Avito
Филипп Уваров, Avito
 
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicCocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magic
 
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentCocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
 
Alex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityAlex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High Availability
 
Андрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхАндрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данных
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana Labs
 
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноИлья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
 
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruTechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
 
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»  Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
 
Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo
 
5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада
 
ChromeDriver Jailbreak
ChromeDriver JailbreakChromeDriver Jailbreak
ChromeDriver Jailbreak
 
Git хуки на страже качества кода
Git хуки на страже качества кодаGit хуки на страже качества кода
Git хуки на страже качества кода
 
Versioning strategy for a complex internal API
Versioning strategy for a complex internal APIVersioning strategy for a complex internal API
Versioning strategy for a complex internal API
 
Как мы готовим MySQL
Как мы готовим MySQLКак мы готовим MySQL
Как мы готовим MySQL
 

Использование Hadoop в Badoo, Валерий Старынин (Badoo)

  • 1. Использование Hadoop в Badoo Валерий Старынин
  • 2. В докладе будет рассказано: • Какую статистику мы собираем • Зачем нам потребовалось распределенное хранение и обработка статистики • Hadoop — это совсем не страшно • Как и что мы сделали, что получили, что планируем сделать еще
  • 3. Badoo это: • Социальная сеть для поиска новых друзей • 226 млн. зарегистрированных пользователей • Работаем во всех странах мира • Мобильные приложения под Android, iOS, Windows, BlackBerry. А так же Wap и HTML5 версии • 2,5 дата-центра: в Европе, Америке и Азии • Более 3 000 серверов
  • 4. Событие в статистике — что это такое? • Действия пользователей • Действия модераторов • Действия скриптов • Ошибки • Отчеты о выполнении
  • 6. Статистика активности Primary key ts id vote_yes vote_no time_on_site 2014-07-01 17476 57 6 730 2014-07-01 19847 1 0 245 2014-07-01 21822 4 18 223 2014-07-01 21999 4 36 269 2014-07-01 22069 14 18 6428 2014-07-02 17476 55 49 4067 2014-07-02 19847 3 0 1967 2014-07-02 28406 6 7 591 2014-07-02 30557 8 111 892
  • 7. Проблемы • Ежемесячный объем таблиц до 350 Гб • Сложно добавлять колонки • Не хватает места на серверах • Нет детальной информации • Нельзя посчитать COUNT DISTINCT
  • 8. Хочется: • хранить все в неагрегированном виде и долго • расширять объем хранилища без проблем • максимально упростить добавление колонок • обеспечить доступность данных для анализа • использовать SQL для обработки данных
  • 9. Найден вариант - Hadoop • очень известный продукт • используется крупными компаниями (Yahoo!, Facebook) • в команде есть люди с опытом использования • на конференциях рассказывают истории успеха • должен подойти и нам Но! Мы чего-то боялись!
  • 10. Что хорошего в Hadoop'е? • это не «черный ящик» • данные физически хранятся в виде файлов • данные реплицируются • есть HiveQL, похожий на синтаксис MySQL • можно работать с TSV и JSON
  • 11. HiveQL CREATE EXTERNAL TABLE hadoop_activity_dump ( ts int, user_id bigint, passive_user_id bigint, action string, val int ) PARTITIONED BY (dt string) ROW FORMAT DELIMITED FIELDS TERMINATED BY 't' LINES TERMINATED BY 'n' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' LOCATION '#DATA_LOCATION#';
  • 12. HiveQL SELECT * FROM hadoop_activity_dump; 1409443200 247868708 3275040429 m:n 1 2014-08-31 1409443200 2624466230 2284443029 m:y 1 2014-08-31 1409443200 1195110158 0 t 11 2014-08-31 1409443200 1286688141 0 t 21 2014-08-31 1409443201 4038376852 0 t 45 2014-08-31 1409443201 466067351 3099962807 m:n 1 2014-08-31 1409443201 493584063 324505095 m:y 1 2014-08-31 1409443201 1325438477 0 t 11 2014-08-31 1409443201 881632551 0 t 32 2014-08-31
  • 13. Использование в Badoo • Activity • длительное хранение данных • HotPanel • ClickStream
  • 14. Мы перестали бояться И начали собирать события активности пользователей: ts ; user_id ; passive_user_id ; action; count 2014-08-31 00:01:00 12345 54321m:n 1 2014-08-31 00:01:05 23456 0t 45 2014-08-31 00:01:05 23456 65432m:n 1 2014-08-31 00:02:03 12345 76543m:y 1 2014-08-31 00:02:03 12345 0t 50 2014-08-31 00:05:00 23456 0t 21 2014-08-31 00:10:00 12345 87654m:n 1
  • 15. Доставка USA Europe hadoop split gzip split gzip
  • 16. Построение агрегатов 2014-08-31 12345m:n 1 2014-08-31 23456t 45 2014-08-31 23456m:n 1 2014-08-31 12345m:y 1 2014-08-31 12345t 50 2014-08-31 23456t 21 2014-08-31 12345m:n 1 2014-08-31 12345m:n 2 2 2014-08-31 23456t 66 2 2014-08-31 23456m:n 1 1 2014-08-31 12345m:y 2 1 2014-08-31 12345t 50 1
  • 17. Построение Activity INSERT INTO f_hadoop_activity SELECT activity_date , user_id , sum(case when act IN ('m:y') then val_sum else 0 end) as mm_vote_yes , sum(case when act IN ('m:n') then val_sum else 0 end) as mm_vote_no , sum(case when act IN ('t') then val_sum else 0 end) as time_on_site FROM staging_f_hadoop_activity GROUP BY activity_date, user_id;
  • 18. Сбор из StatsCollector'а • StatsCollector собирает в MySQL, а хочется — в Hadoop • будем периодически перекладывать в Hadoop • выгружаем данные как есть, с заголовками колонок • при загрузке из Hadoop'а учитывается требуемый порядок колонок, отсутствующие заменяются значениями по-умолчанию
  • 19. HotPanel • замена Google Analytics • собираем события в мобильных приложениях • события слабо структурированы — собираем и обрабатываем в JSON • аналитика по всевозможным параметрам
  • 20.
  • 21. ClickStream На каждый запрос собираем все, что можно: • URL, referrer • ip, user_agent • user_id • все события StatsCollector'а Это позволяет делать подробнейший анализ любого происшествия
  • 22. Мониторинг • состояние серверов • количество DataNode и TaskTracker'ов • количество under/over-replicated блоков
  • 23. Backup • исходные файлы хранятся еще 2 дня на серверах загрузки • делается backup namespace image'а • делается backup информации от hadoop fsck, в которой есть названия файлов-блоков: hadoop fsck / -files -locations -blocks
  • 24. Планы на будущее • Upgrade Hadoop 1.1.2 -> 2.5 • использовать Spark, Shark • найти замену Scribe
  • 25. Проблемы Hadoop • Hadoop выглядит не production-ready • от версии к версии меняется почти все • долго искали битый диск • не замещает битые блоки
  • 31. Наш Hadoop-кластер! NameNode: • CPU 4 Core (+Hyper-threading) • RAM 64Gb • HDD 1.1Tb 15x DataNodes • CPU 16 Core (+Hyper-threading) • RAM 192Gb • HDD 10x1.1Tb Ежедневно: • 100 Гб данных Activity • 1,2 Тб данных ClickStream • 270 Гб в сжатом виде, 810 Гб с учетом репликации • 2∙109 событий
  • 32. Спасибо за внимание! Вопросы? http://fb.com/BadooMoscow http://vk.com/badoocom http://twitter.com/BadooDev http://habrahabr.ru/company/badoo