Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Использование 
Hadoop в Badoo 
Валерий Старынин
В докладе будет рассказано: 
• Какую статистику мы собираем 
• Зачем нам потребовалось распределенное хранение и 
обработк...
Badoo это: 
• Социальная сеть для поиска новых друзей 
• 226 млн. зарегистрированных пользователей 
• Работаем во всех стр...
Событие в статистике — что это такое? 
• Действия пользователей 
• Действия модераторов 
• Действия скриптов 
• Ошибки 
• ...
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 2...
Проблемы 
• Ежемесячный объем таблиц до 350 Гб 
• Сложно добавлять колонки 
• Не хватает места на серверах 
• Нет детально...
Хочется: 
• хранить все в неагрегированном виде и долго 
• расширять объем хранилища без проблем 
• максимально упростить ...
Найден вариант - Hadoop 
• очень известный продукт 
• используется крупными компаниями (Yahoo!, Facebook) 
• в команде ест...
Что хорошего в Hadoop'е? 
• это не «черный ящик» 
• данные физически хранятся в виде файлов 
• данные реплицируются 
• ест...
HiveQL 
CREATE EXTERNAL TABLE hadoop_activity_dump ( 
ts int, 
user_id bigint, 
passive_user_id bigint, 
action string, 
v...
HiveQL 
SELECT * FROM hadoop_activity_dump; 
1409443200 247868708 3275040429 m:n 1 2014-08-31 
1409443200 2624466230 22844...
Использование в Badoo 
• Activity 
• длительное хранение данных 
• HotPanel 
• ClickStream
Мы перестали бояться 
И начали собирать события активности пользователей: 
ts ; user_id ; passive_user_id ; action; count ...
Доставка 
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-3...
Построение Activity 
INSERT INTO f_hadoop_activity 
SELECT 
activity_date 
, user_id 
, sum(case when act IN ('m:y') then ...
Сбор из StatsCollector'а 
• StatsCollector собирает в MySQL, а хочется — в Hadoop 
• будем периодически перекладывать в Ha...
HotPanel 
• замена Google Analytics 
• собираем события в мобильных приложениях 
• события слабо структурированы — собирае...
ClickStream 
На каждый запрос собираем все, что можно: 
• URL, referrer 
• ip, user_agent 
• user_id 
• все события StatsC...
Мониторинг 
• состояние серверов 
• количество DataNode и TaskTracker'ов 
• количество under/over-replicated блоков
Backup 
• исходные файлы хранятся еще 2 дня на серверах загрузки 
• делается backup namespace image'а 
• делается backup и...
Планы на будущее 
• 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 (+H...
Спасибо за внимание! Вопросы? 
http://fb.com/BadooMoscow 
http://vk.com/badoocom 
http://twitter.com/BadooDev 
http://habr...
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Upcoming SlideShare
Loading in …5
×

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

1,284 views

Published on

Доклад Валерия Старынина на HighLoad++ 2014.

Published in: Internet
  • Be the first to comment

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

  1. 1. Использование Hadoop в Badoo Валерий Старынин
  2. 2. В докладе будет рассказано: • Какую статистику мы собираем • Зачем нам потребовалось распределенное хранение и обработка статистики • Hadoop — это совсем не страшно • Как и что мы сделали, что получили, что планируем сделать еще
  3. 3. Badoo это: • Социальная сеть для поиска новых друзей • 226 млн. зарегистрированных пользователей • Работаем во всех странах мира • Мобильные приложения под Android, iOS, Windows, BlackBerry. А так же Wap и HTML5 версии • 2,5 дата-центра: в Европе, Америке и Азии • Более 3 000 серверов
  4. 4. Событие в статистике — что это такое? • Действия пользователей • Действия модераторов • Действия скриптов • Ошибки • Отчеты о выполнении
  5. 5. Scribe USA Europe
  6. 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. 7. Проблемы • Ежемесячный объем таблиц до 350 Гб • Сложно добавлять колонки • Не хватает места на серверах • Нет детальной информации • Нельзя посчитать COUNT DISTINCT
  8. 8. Хочется: • хранить все в неагрегированном виде и долго • расширять объем хранилища без проблем • максимально упростить добавление колонок • обеспечить доступность данных для анализа • использовать SQL для обработки данных
  9. 9. Найден вариант - Hadoop • очень известный продукт • используется крупными компаниями (Yahoo!, Facebook) • в команде есть люди с опытом использования • на конференциях рассказывают истории успеха • должен подойти и нам Но! Мы чего-то боялись!
  10. 10. Что хорошего в Hadoop'е? • это не «черный ящик» • данные физически хранятся в виде файлов • данные реплицируются • есть HiveQL, похожий на синтаксис MySQL • можно работать с TSV и JSON
  11. 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. 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. 13. Использование в Badoo • Activity • длительное хранение данных • HotPanel • ClickStream
  14. 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. 15. Доставка USA Europe hadoop split gzip split gzip
  16. 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. 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. 18. Сбор из StatsCollector'а • StatsCollector собирает в MySQL, а хочется — в Hadoop • будем периодически перекладывать в Hadoop • выгружаем данные как есть, с заголовками колонок • при загрузке из Hadoop'а учитывается требуемый порядок колонок, отсутствующие заменяются значениями по-умолчанию
  19. 19. HotPanel • замена Google Analytics • собираем события в мобильных приложениях • события слабо структурированы — собираем и обрабатываем в JSON • аналитика по всевозможным параметрам
  20. 20. ClickStream На каждый запрос собираем все, что можно: • URL, referrer • ip, user_agent • user_id • все события StatsCollector'а Это позволяет делать подробнейший анализ любого происшествия
  21. 21. Мониторинг • состояние серверов • количество DataNode и TaskTracker'ов • количество under/over-replicated блоков
  22. 22. Backup • исходные файлы хранятся еще 2 дня на серверах загрузки • делается backup namespace image'а • делается backup информации от hadoop fsck, в которой есть названия файлов-блоков: hadoop fsck / -files -locations -blocks
  23. 23. Планы на будущее • Upgrade Hadoop 1.1.2 -> 2.5 • использовать Spark, Shark • найти замену Scribe
  24. 24. Проблемы Hadoop • Hadoop выглядит не production-ready • от версии к версии меняется почти все • долго искали битый диск • не замещает битые блоки
  25. 25. И напоследок...
  26. 26. Немного Geek-порно Встречайте его!
  27. 27. Силён!
  28. 28. Быстр!
  29. 29. Вынослив!
  30. 30. Наш 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 событий
  31. 31. Спасибо за внимание! Вопросы? http://fb.com/BadooMoscow http://vk.com/badoocom http://twitter.com/BadooDev http://habrahabr.ru/company/badoo

×