Архитектура хранения и отдачи фотографий в Badoo / Артем Денисов (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
-
Upload
badoo-development -
Category
Internet
-
view
15.519 -
download
5
Transcript of Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo
Валерий Старынин
• Какую статистику мы собираем
• Зачем нам потребовалось распределенное хранение и обработка статистики
• Hadoop — это совсем не страшно
• Как и что мы сделали, что получили, что планируем сделать еще
В докладе будет рассказано:
• Социальная сеть для поиска новых друзей
• 226 млн. зарегистрированных пользователей
• Работаем во всех странах мира
• Мобильные приложения под Android, iOS, Windows, BlackBerry. А так же Wap и HTML5 версии
• 2,5 дата-центра: в Европе, Америке и Азии
• Более 3 000 серверов
Badoo это:
• Действия пользователей
• Действия модераторов
• Действия скриптов
• Ошибки
• Отчеты о выполнении
Событие в статистике — что это такое?
ScribeUSA Europe
Статистика активности
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
Primary key
• Ежемесячный объем таблиц до 350 Гб
• Сложно добавлять колонки
• Не хватает места на серверах
• Нет детальной информации
• Нельзя посчитать COUNT DISTINCT
Проблемы
• хранить все в неагрегированном виде и долго
• расширять объем хранилища без проблем
• максимально упростить добавление колонок
• обеспечить доступность данных для анализа
• использовать SQL для обработки данных
Хочется:
• очень известный продукт
• используется крупными компаниями (Yahoo!, Facebook)
• в команде есть люди с опытом использования
• на конференциях рассказывают истории успеха
• должен подойти и нам
Но!
Мы чего-то боялись!
Найден вариант - Hadoop
• это не «черный ящик»
• данные физически хранятся в виде файлов
• данные реплицируются
• есть HiveQL, похожий на синтаксис MySQL
• можно работать с TSV и JSON
Что хорошего в Hadoop'е?
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;
HiveQL
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
• Activity
• длительное хранение данных
• HotPanel
• ClickStream
Использование в Badoo
И начали собирать события активности пользователей:
ts ; user_id ; passive_user_id ; action; count
Мы перестали бояться
2014-08-31 00:01:00 12345 54321m:n 12014-08-31 00:01:05 23456 0t 452014-08-31 00:01:05 23456 65432m:n 12014-08-31 00:02:03 12345 76543m:y 12014-08-31 00:02:03 12345 0t 502014-08-31 00:05:00 23456 0t 212014-08-31 00:10:00 12345 87654m:n 1
ДоставкаUSA Europe
hadoop
splitgzip
splitgzip
Построение агрегатов
2014-08-31 12345m:n 12014-08-31 23456t 452014-08-31 23456m:n 12014-08-31 12345m:y 12014-08-31 12345t 502014-08-31 23456t 212014-08-31 12345m:n 1
2014-08-31 12345m:n 2 22014-08-31 23456t 66 22014-08-31 23456m:n 1 12014-08-31 12345m:y 2 12014-08-31 12345t 50 1
INSERT INTO f_hadoop_activitySELECT 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_siteFROM staging_f_hadoop_activityGROUP BY activity_date, user_id;
Построение Activity
• StatsCollector собирает в MySQL, а хочется — в Hadoop
• будем периодически перекладывать в Hadoop
• выгружаем данные как есть, с заголовками колонок
• при загрузке из Hadoop'а учитывается требуемый порядок колонок, отсутствующие заменяются значениями по-умолчанию
Сбор из StatsCollector'а
• замена Google Analytics
• собираем события в мобильных приложениях
• события слабо структурированы — собираем и обрабатываем в JSON
• аналитика по всевозможным параметрам
HotPanel
На каждый запрос собираем все, что можно:
• URL, referrer
• ip, user_agent
• user_id
• все события StatsCollector'а
Это позволяет делать подробнейший анализ любого происшествия
ClickStream
• состояние серверов
• количество DataNode и TaskTracker'ов
• количество under/over-replicated блоков
Мониторинг
• исходные файлы хранятся еще 2 дня на серверах загрузки
• делается backup namespace image'а
• делается backup информации от hadoop fsck, в которой есть названия файлов-блоков:
hadoop fsck / -files -locations -blocks
Backup
• Upgrade Hadoop 1.1.2 -> 2.5
• использовать Spark, Shark
• найти замену Scribe
Планы на будущее
• Hadoop выглядит не production-ready
• от версии к версии меняется почти все
• долго искали битый диск
• не замещает битые блоки
Проблемы Hadoop
И напоследок...
Встречайте его!
Немного Geek-порно
Силён!
Быстр!
Вынослив!
NameNode:• CPU 4 Core (+Hyper-threading)
• RAM 64Gb
• HDD 1.1Tb
15x DataNodes• CPU 16 Core (+Hyper-threading)
• RAM 192Gb
• HDD 10x1.1Tb
Наш Hadoop-кластер!Ежедневно:• 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
Спасибо за внимание! Вопросы?