2. В докладе будет рассказано:
• Какую статистику мы собираем
• Зачем нам потребовалось распределенное хранение и
обработка статистики
• Hadoop — это совсем не страшно
• Как и что мы сделали, что получили, что планируем
сделать еще
3. Badoo это:
• Социальная сеть для поиска новых друзей
• 226 млн. зарегистрированных пользователей
• Работаем во всех странах мира
• Мобильные приложения под Android, iOS, Windows,
BlackBerry. А так же Wap и HTML5 версии
• 2,5 дата-центра: в Европе, Америке и Азии
• Более 3 000 серверов
4. Событие в статистике — что это такое?
• Действия пользователей
• Действия модераторов
• Действия скриптов
• Ошибки
• Отчеты о выполнении
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
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
• от версии к версии меняется почти все
• долго искали битый диск
• не замещает битые блоки