SlideShare a Scribd company logo
Загрузка больших объемов
данных для бизнес-аналитики
Старынин Валерий, BI-разработчик в Badoo
В докладе будет рассказано:
• Что делает BI в Badoo
• Какие задачи по сбору
данных у нас есть
• Про наш инструмент загрузки
данных: ETLMaster
• Tips & Tricks: как ускорить
загрузку данных
Badoo это
• Социальная сеть для поиска новых друзей
• 250 млн. пользователей
• Работаем во всех странах мира
• Мобильные приложения под Android, iOS, Windows, BlackBerry.
А так же Wap и HTML5 версии
• 2,5 датацентра: в Европе, Америке и Азии
• Более 3 000 серверов
Что мы делаем в BI?
Аналитическая БД
Как мы загружали данные
• 1 запуск в день, загрузка до
начала рабочего дня
• Куча скриптов
• Жесткий порядок выполнения
• XML
Требования к системе
• Зависимости а не последовательность действий
• Текстовый конфиг (хранить в git'е)
• Замена cron
• Загрузка данных из STDIN
• Поддержка используемых БД
• Повтор выполнения при сбое
Дополнительные требования к системе
• Простой перезапуск заданий и перезагрузка данных
• Параметризация SQL
• Мониторинг ресурсов
• Интерфейс для просмотра статуса и управления запуском
• Изоляция dev-окружений
Альтернативы
Не удовлетворяют нашим
требованиям!
• Плохая поддержка БД
• Нет текстовых конфигов
• Нет запуска по зависимостям
Наше решение!
ETLMaster
Extract Transform Load
Интерфейс
Пример задания
"autorun": {
"timeshift": "00:45",
"conflict": ["dim_profile.hourly"]
},
"tasks": [
{
"class": "LoadFromPhpDumperTask",
"params": {
"table_name": "staging_dim_profile",
"dumper_name": "dumpDimProfileCli.php",
"threads": "400"
}
},
{
"class":"SQLScriptTask",
"params":{
"file":"dim_profile_dedup.sql"
}
},
{
"class": "Stage2ProdAppendTask",
"params": {
"table_name": "dim_profile",
"primary_key":"profile_user_id"
}
}
]
Условия запуска
Получение
Преобразование
Загрузка
Dumper'ы
ETLMaster
Dumper'ы
ETLMaster
Dumper'ы
ETLMaster
Dumper'ы
ETLMaster
fdlinecombine
Dumper'ы
ETLMaster
fdlinecombine
Dumper'ы
ETLMaster
fdlinecombine
Возможности ETLMaster'а
• Ежедневная загрузка (старт по расписанию)
• Ожидание данных в источнике
• Ожидание выполнения зависимостей
• Возобновление загрузки после устранения проблем
• Перезагрузка данных за произвольный период с
автоматическим запуском всех зависимых шагов
Пример зависимостей
"autorun": {
"cron": "0 3 2 * *"
},
"wait": [
{
"name":"f_activity_abp",
"type":"MaxOffset"
},
{
"name":"f_incomelog_audit",
"type":"FinishedToday"
},
{
"name":"f_credits.daily",
"type":"FinishedToday"
}
],
Какие стратегии загрузки применяем
• по периодичности — есть ежедневная и ежечасная загрузка
• по параллельности — данные можно грузить в 1 или несколько
потоков
• инкрементально/перезагрузка всего/поддержание окна
Получение данных из данных
• Консолидация (объединение нескольких таблиц в одну)
• Агрегация (агрегация данных за месяц)
Перезагрузка и дозагрузка данных
Откуда мы собираем данные?
• MySQL — базы данных
• Шарды
• Данные из кода (конфиги)
• Hadoop
• Данные от сторонних компаний (api/sftp)
Сбор из MySQL, шардов и конфигов
• Собираем дамперами
Сбор из MySQL, шардов и конфигов
• Собираем дамперами
• В несколько потоков
Сбор из MySQL, шардов и конфигов
• Собираем дамперами
• В несколько потоков
• Указываем дамперу последовательность полей в
результирующем потоке
Сбор из MySQL, шардов и конфигов
• Собираем дамперами
• В несколько потоков
• Указываем дамперу последовательность полей в
результирующем потоке
• Получаем поток, готовый к загрузке
Сбор из MySQL, шардов и конфигов
• Собираем дамперами
• В несколько потоков
• Указываем дамперу последовательность полей в
результирующем потоке
• Получаем поток, готовый к загрузке
• Иногда просто запускаем SQL, выдающий данные
Загрузка из Hadoop
• В старых данных нет новых столбцов
Загрузка из Hadoop
• В старых данных нет новых столбцов
• В первой строке каждого файла — заголовок (список колонок)
Загрузка из Hadoop
• В старых данных нет новых столбцов
• В первой строке каждого файла — заголовок (список колонок)
• Для каждого файла формируется команда обработки на awk
Загрузка из Hadoop
• В старых данных нет новых столбцов
• В первой строке каждого файла — заголовок (список колонок)
• Для каждого файла формируется команда обработки на awk
• Получаем готовый поток данных
Данные от сторонних компаний (api/sftp)
• Все данные нестандартизированы
• Приходится писать специфичные скрипты обработки
• Раньше приходилось обрабатывать отдельными скриптами,
сохранять промежуточный результат и потом загружать;
Теперь обрабатываем и загружаем сразу
Использование Staging—таблиц
Staging Prod
1 транзакция
Данные Просмотр
Tips & Tricks
• Подгоняем данные под таблицу:
– Изменяем порядок столбцов на требуемый
– Подставляем отсутствующие колонки
– Обрезаем строки по длине (только MySQL делает это сам)
• Обеспечиваем обновление данных за 1 транзакцию
Tips & Tricks
• Вычисления в MySQL — это быстрее, чем в PHP
• Выгрузка из MySQL быстрее всего — через
passthru('mysql -s -q -e "SELECT * FROM DB.table"')
• Выгружаем из 1 таблицы в несколько потоков, когда упёрлись
в CPU, а не в диск (т.е. почти всегда)
WHERE (id % 3)=0
WHERE (id % 3)=1
WHERE (id % 3)=2
Tips & Tricks
• ssh используем вот так:
ssh -c arcfour -n -o BatchMode=yes -o StrictHostKeyChecking=no -T
• Сливаем потоки через fdlinecombine
Немного цифр
• Загрузка происходит за 4 часа
• Загружается 1,5 Tb данных
• 250 цепочек для запуска, примерно 600 задач
• 90% задач решается без написания кода на PHP
• 347 таблиц в аналитической базе
Спасибо за внимание!
Вопросы?
http://fb.com/BadooMoscow
http://vk.com/badoocom
http://twitter.com/BadooDev
http://habrahabr.ru/company/badoo

More Related Content

What's hot

Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Badoo Development
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Ontico
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
Roman Pavlushko
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Ontico
 
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Ontico
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
Badoo Development
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
Ontico
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Ontico
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
Михаил Тюрин
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012Roman Pavlushko
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
Alexandr Krasheninnikov
 
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Ontico
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустя
Yuriy Nasretdinov
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
Alex Chistyakov
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
Ontico
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
Andrey Smirnov
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
Andrey Smirnov
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Ontico
 

What's hot (19)

Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
 
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустя
 
Avito Stachka 2012
Avito Stachka 2012Avito Stachka 2012
Avito Stachka 2012
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
 

Similar to Загрузка больших объемов данных для бизнес-аналитики

Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Positive Hack Days
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитики
Илья Середа
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
Nikolay Samokhvalov
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Ontico
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Anton Baranov
 
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай КондратовБыстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай КондратовFuenteovejuna
 
Александр Шарак, "Одноклассники"
Александр Шарак, "Одноклассники"Александр Шарак, "Одноклассники"
Александр Шарак, "Одноклассники"
Ontico
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
Alexander Frolov
 
Подводные камни при внедрении электронного архива и оцифровке документов
Подводные камни при внедрении электронного архива и оцифровке документовПодводные камни при внедрении электронного архива и оцифровке документов
Подводные камни при внедрении электронного архива и оцифровке документов
LANIT
 
Cистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruCистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ru
odnoklassniki.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, Михаил Тюрин
pgdayrussia
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это просто
Александр Ежов
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Sergey Xek
 
Performance Testing Methodology for Enterprise Solutions
Performance Testing Methodology for Enterprise SolutionsPerformance Testing Methodology for Enterprise Solutions
Performance Testing Methodology for Enterprise Solutions
Egor Eremeev
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush
 
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...it-people
 
Миграция данных при помощи Feeds
Миграция данных при помощи FeedsМиграция данных при помощи Feeds
Миграция данных при помощи Feeds
zabej
 

Similar to Загрузка больших объемов данных для бизнес-аналитики (20)

Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитики
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай КондратовБыстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
 
Александр Шарак, "Одноклассники"
Александр Шарак, "Одноклассники"Александр Шарак, "Одноклассники"
Александр Шарак, "Одноклассники"
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
 
Подводные камни при внедрении электронного архива и оцифровке документов
Подводные камни при внедрении электронного архива и оцифровке документовПодводные камни при внедрении электронного архива и оцифровке документов
Подводные камни при внедрении электронного архива и оцифровке документов
 
Cистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruCистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.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, Михаил Тюрин
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это просто
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
 
Performance Testing Methodology for Enterprise Solutions
Performance Testing Methodology for Enterprise SolutionsPerformance Testing Methodology for Enterprise Solutions
Performance Testing Methodology for Enterprise Solutions
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster
 
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
 
Миграция данных при помощи Feeds
Миграция данных при помощи FeedsМиграция данных при помощи Feeds
Миграция данных при помощи Feeds
 

More from Badoo Development

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

Загрузка больших объемов данных для бизнес-аналитики

  • 1. Загрузка больших объемов данных для бизнес-аналитики Старынин Валерий, BI-разработчик в Badoo
  • 2. В докладе будет рассказано: • Что делает BI в Badoo • Какие задачи по сбору данных у нас есть • Про наш инструмент загрузки данных: ETLMaster • Tips & Tricks: как ускорить загрузку данных
  • 3. Badoo это • Социальная сеть для поиска новых друзей • 250 млн. пользователей • Работаем во всех странах мира • Мобильные приложения под Android, iOS, Windows, BlackBerry. А так же Wap и HTML5 версии • 2,5 датацентра: в Европе, Америке и Азии • Более 3 000 серверов
  • 6. Как мы загружали данные • 1 запуск в день, загрузка до начала рабочего дня • Куча скриптов • Жесткий порядок выполнения • XML
  • 7. Требования к системе • Зависимости а не последовательность действий • Текстовый конфиг (хранить в git'е) • Замена cron • Загрузка данных из STDIN • Поддержка используемых БД • Повтор выполнения при сбое
  • 8. Дополнительные требования к системе • Простой перезапуск заданий и перезагрузка данных • Параметризация SQL • Мониторинг ресурсов • Интерфейс для просмотра статуса и управления запуском • Изоляция dev-окружений
  • 9. Альтернативы Не удовлетворяют нашим требованиям! • Плохая поддержка БД • Нет текстовых конфигов • Нет запуска по зависимостям
  • 12. Пример задания "autorun": { "timeshift": "00:45", "conflict": ["dim_profile.hourly"] }, "tasks": [ { "class": "LoadFromPhpDumperTask", "params": { "table_name": "staging_dim_profile", "dumper_name": "dumpDimProfileCli.php", "threads": "400" } }, { "class":"SQLScriptTask", "params":{ "file":"dim_profile_dedup.sql" } }, { "class": "Stage2ProdAppendTask", "params": { "table_name": "dim_profile", "primary_key":"profile_user_id" } } ] Условия запуска Получение Преобразование Загрузка
  • 19. Возможности ETLMaster'а • Ежедневная загрузка (старт по расписанию) • Ожидание данных в источнике • Ожидание выполнения зависимостей • Возобновление загрузки после устранения проблем • Перезагрузка данных за произвольный период с автоматическим запуском всех зависимых шагов
  • 20. Пример зависимостей "autorun": { "cron": "0 3 2 * *" }, "wait": [ { "name":"f_activity_abp", "type":"MaxOffset" }, { "name":"f_incomelog_audit", "type":"FinishedToday" }, { "name":"f_credits.daily", "type":"FinishedToday" } ],
  • 21. Какие стратегии загрузки применяем • по периодичности — есть ежедневная и ежечасная загрузка • по параллельности — данные можно грузить в 1 или несколько потоков • инкрементально/перезагрузка всего/поддержание окна
  • 22. Получение данных из данных • Консолидация (объединение нескольких таблиц в одну) • Агрегация (агрегация данных за месяц)
  • 24. Откуда мы собираем данные? • MySQL — базы данных • Шарды • Данные из кода (конфиги) • Hadoop • Данные от сторонних компаний (api/sftp)
  • 25. Сбор из MySQL, шардов и конфигов • Собираем дамперами
  • 26. Сбор из MySQL, шардов и конфигов • Собираем дамперами • В несколько потоков
  • 27. Сбор из MySQL, шардов и конфигов • Собираем дамперами • В несколько потоков • Указываем дамперу последовательность полей в результирующем потоке
  • 28. Сбор из MySQL, шардов и конфигов • Собираем дамперами • В несколько потоков • Указываем дамперу последовательность полей в результирующем потоке • Получаем поток, готовый к загрузке
  • 29. Сбор из MySQL, шардов и конфигов • Собираем дамперами • В несколько потоков • Указываем дамперу последовательность полей в результирующем потоке • Получаем поток, готовый к загрузке • Иногда просто запускаем SQL, выдающий данные
  • 30. Загрузка из Hadoop • В старых данных нет новых столбцов
  • 31. Загрузка из Hadoop • В старых данных нет новых столбцов • В первой строке каждого файла — заголовок (список колонок)
  • 32. Загрузка из Hadoop • В старых данных нет новых столбцов • В первой строке каждого файла — заголовок (список колонок) • Для каждого файла формируется команда обработки на awk
  • 33. Загрузка из Hadoop • В старых данных нет новых столбцов • В первой строке каждого файла — заголовок (список колонок) • Для каждого файла формируется команда обработки на awk • Получаем готовый поток данных
  • 34. Данные от сторонних компаний (api/sftp) • Все данные нестандартизированы • Приходится писать специфичные скрипты обработки • Раньше приходилось обрабатывать отдельными скриптами, сохранять промежуточный результат и потом загружать; Теперь обрабатываем и загружаем сразу
  • 35. Использование Staging—таблиц Staging Prod 1 транзакция Данные Просмотр
  • 36. Tips & Tricks • Подгоняем данные под таблицу: – Изменяем порядок столбцов на требуемый – Подставляем отсутствующие колонки – Обрезаем строки по длине (только MySQL делает это сам) • Обеспечиваем обновление данных за 1 транзакцию
  • 37. Tips & Tricks • Вычисления в MySQL — это быстрее, чем в PHP • Выгрузка из MySQL быстрее всего — через passthru('mysql -s -q -e "SELECT * FROM DB.table"') • Выгружаем из 1 таблицы в несколько потоков, когда упёрлись в CPU, а не в диск (т.е. почти всегда) WHERE (id % 3)=0 WHERE (id % 3)=1 WHERE (id % 3)=2
  • 38. Tips & Tricks • ssh используем вот так: ssh -c arcfour -n -o BatchMode=yes -o StrictHostKeyChecking=no -T • Сливаем потоки через fdlinecombine
  • 39. Немного цифр • Загрузка происходит за 4 часа • Загружается 1,5 Tb данных • 250 цепочек для запуска, примерно 600 задач • 90% задач решается без написания кода на PHP • 347 таблиц в аналитической базе