SlideShare a Scribd company logo
Сервис рекомендаций на
виртуальном Hadoop кластере
         Роман Зыков
Содержание
•   Проблема: сервисы рекомендаций
•   Архитектуры
•   Компоненты Hadoop
•   Конфигурация Hadoop
•   Интеграция с БД
•   Hive и Pig
•   Что дальше
Рекомендации
Проблема
Алгоритмы рекомендаций это:
• перемножение больших матриц
• очень большие JOIN

Пример:
Лог из 338Мб –> 55 Гб –> 32 Мб
Архитектура До
Хранилище MS SQL Enterprise
(2 CPU Xeon, 48G RAM, 8x300Gb RAID10 SAS)

Эксплуатация:
  – обновление раз в неделю
  – 5 часов в лучшем случае
  – 30% вероятности падения из-за tempdb
  – блокировал ETL
Архитектура После




• виртуальный кластер: 6 нод
• 2Gb RAM, 30 Gb HDD, 16 cores
• Cloudera Manager (free up to 50)
Компоненты Hadoop
Конфигурация Hadoop
• Компрессия данных (Snappy или LZO)
• Предварительная фильтрация данных
• Бекапирование namenode на NFS
• 1 map/reduce задача на ноду
• Настройка памяти Java
Компрессия
Algorithm     Compression Ratio   IO performance increase
Snappy        40%                 25%
LZF           40%                 21%
LZO           41%                 5%
ZLIB          48%                 -16%

Snappy – Sequence Files, Avro, HBASE, txt
LZO – поддерживает индексацию для split операции

•   HDFS хранение
•   MAP output
•   MapReduce output
•   AVRO!
SQOOP
SQOOP утилита обмена данными между Hadoop (HDFS, HIVE,
HBASE) и базами данных.

sqoop export --options-file ./sqoop_recommendations_connect --table ItemView
--export-dir /data/itemview --input-fields-terminated-by 't'


sqoop import --options-file ./sqoop_web_connect --table hadoop_webstat_daily
-m 1 --warehouse-dir /data --fields-terminated-by 't'

sqoop eval --options-file ./sqoop_warehouse_connect --query "exec
dbo._hadoop_model_value"
PIG
•   Скриптовый DataFlow
•   Удобен для ETL!
•   Данные в виде csv или sequence файлов, AVRO
•   UDF (Java, Python и т.д.)
•   Поддерживает Custom Loaders
•   Поддерживает сложные структуры данных
•   JOINS/ORDER BY
•   Pig 0.10.0 добавлены DataFu UDF от LinkedIn
PIG
%declare cur_date `date +%s`;
set mapred.output.compress true;
set mapred.output.compression.codec 'org.apache.hadoop.io.compress.SnappyCodec';
set mapred.output.compression.type 'BLOCK';
set mapred.compress.map.output true;
set mapred.map.output.compression.codec 'org.apache.hadoop.io.compress.SnappyCodec';

-- load data
A = load '/tmp/itemview_input' AS (session_id1:int, item_id1:int, val1:int);
B = load '/tmp/itemview_input' AS (session_id2:int, item_id2:int, val2:int);

-- calculate the length of one item vector
L_0 = load '/tmp/itemview_input' AS (session_id:int, item_id:int, val:int);
L_1 = FOREACH L_0 GENERATE item_id, val*val as val;
L_2 = GROUP L_1 BY item_id;
L = FOREACH L_2 GENERATE FLATTEN(group) as item_id, (long)SQRT(SUM(L_1.val)) as weight;

STORE L INTO '/tmp/itemview_matrix' USING PigStorage();
Hive
•Виртуальное ХД, Почти SQL, ODBC/JDBC
•Сsv, Sequence, AVRO в HDFS
•HBASE
•Партиции
•Индексы
•JOINS
•Таблицы, Views
•Нет: Delete, Update !!!
•REGEXP по названию полей
•Cложные структуры данных: map, arrays, struct
•Поддерживает UDF и UDTF функции (Java, Python и т.д.)
Hive
SELECT hs.search_word, b.model_id, SUM(b.weight) as weight, count(distinct hs.visitor_id) as
visitors
                        FROM
                                   (SELECT hw.visitor_id, hw.date_time, hw.model_id,
                                    SUM(CASE page_type WHEN 'cart_add' THEN 3
                                                           WHEN 'order' THEN 5 ELSE 1)
                                      FROM hadoop_catalog_model hc JOIN
                                             hadoop_webstat hw
                                             ON (hc.model_id=hw.model_id)
                                    WHERE hc.t_recommended_good_id > 0
                                    GROUP BY hw.visitor_id, hw.date_time, hw.model_id) b
JOIN hadoop_searchwords hs
ON b.visitor_id = hs.visitor_id AND ROUND(hs.date_time/86400)*86400 = b.date_time
WHERE ! (hs.search_word RLIKE '^[-+]?[0-9]*.?[0-9]+$')
and length(hs.search_word) > 2
GROUP BY hs.search_word, b.model_id
HAVING count(distinct hs.visitor_id) >1
LIMIT 100
Что дальше
• Realtime веб-аналитика на HBASE + HIVE
• Хранилище данных на HIVE
• AVRO
• OLAP?
Вопросы???
 rzykov@gmail.com

More Related Content

What's hot (20)

PDF
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
IT-Portfolio
 
PPTX
Виталий Гаврилов (Ленвендо)
Ontico
 
PDF
Где сегодня использовать ElasticSearch
Илья Середа
 
PPTX
доклад на вмк 15.10.2015
Alexandr Petrov
 
PDF
«Облачная платформа Windows Azure для высоконагруженных проектов»
Nata_Churda
 
PDF
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
it-people
 
PDF
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
it-people
 
PDF
Clickhouse
Clickky
 
PDF
Электронная коммерция: от Hadoop к Spark Scala
Roman Zykov
 
PDF
Разработка аналитической системы для высоконагруженного медиа, Олег Новиков, ...
Ontico
 
PPTX
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Ontico
 
ODP
ClickHouse
Alexey Milovidov
 
PPTX
Андрей Созыкин — ИММ УрО РАН — ICDBA2016
rusbase
 
PDF
HappyDev'15 Keynote: Когда все данные станут большими...
Alexey Zinoviev
 
PPTX
Azure
drupalconf
 
PDF
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
IT-Portfolio
 
PDF
SSAS: multidemention vs tabular mode
Andrey Korshikov
 
PPTX
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
HOWWEDOIT
 
PDF
SSAS Multidimension и Tabular: что выбрать?
Andrey Korshikov
 
PDF
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
Ontico
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
IT-Portfolio
 
Виталий Гаврилов (Ленвендо)
Ontico
 
Где сегодня использовать ElasticSearch
Илья Середа
 
доклад на вмк 15.10.2015
Alexandr Petrov
 
«Облачная платформа Windows Azure для высоконагруженных проектов»
Nata_Churda
 
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
it-people
 
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
it-people
 
Clickhouse
Clickky
 
Электронная коммерция: от Hadoop к Spark Scala
Roman Zykov
 
Разработка аналитической системы для высоконагруженного медиа, Олег Новиков, ...
Ontico
 
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Ontico
 
ClickHouse
Alexey Milovidov
 
Андрей Созыкин — ИММ УрО РАН — ICDBA2016
rusbase
 
HappyDev'15 Keynote: Когда все данные станут большими...
Alexey Zinoviev
 
Azure
drupalconf
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
IT-Portfolio
 
SSAS: multidemention vs tabular mode
Andrey Korshikov
 
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
HOWWEDOIT
 
SSAS Multidimension и Tabular: что выбрать?
Andrey Korshikov
 
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
Ontico
 

Viewers also liked (6)

PPT
Ozon в высшей школе экономики часть 2
Roman Zykov
 
PPT
Ozon в высшей школе экономики часть 4
Roman Zykov
 
PPT
Owox rzykov
Roman Zykov
 
PPT
Ozon в высшей школе экономики часть 3
Roman Zykov
 
PDF
Kib Rif 2015. Make money from your data
Roman Zykov
 
PDF
How to eliminate ideas as soon as possible
Roman Zykov
 
Ozon в высшей школе экономики часть 2
Roman Zykov
 
Ozon в высшей школе экономики часть 4
Roman Zykov
 
Owox rzykov
Roman Zykov
 
Ozon в высшей школе экономики часть 3
Roman Zykov
 
Kib Rif 2015. Make money from your data
Roman Zykov
 
How to eliminate ideas as soon as possible
Roman Zykov
 
Ad

Similar to Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков) (20)

PPT
Hadoop implementation in Wikimart
Roman Zykov
 
PPT
ADD2010: Обработка большого объема данных на платформеApache Hadoop
Vladimir Klimontovich
 
PDF
Thumbtack Expertise Days # 5 - Dataset
Alexey Remnev
 
PPTX
Архитектура Apache HAWQ Highload++ 2015
Alexey Grishchenko
 
PDF
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
Ontico
 
PDF
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Badoo Development
 
PDF
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ontico
 
PPTX
DBD lection 4. Big Data, NoSQL. In Russian.
mikhaelsmirnov
 
PDF
Lapan 20.04 hadoop h-base
kuchinskaya
 
PDF
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Ontico
 
PDF
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Badoo Development
 
PDF
Cостав дистрибутва Hortonworks data platform 2.3
Евгений Плакса
 
PDF
Nosql and Mongodb
Eduard Antsupov
 
PPTX
Построение аналитического хранилища на 100 петабайт
Alexander Mazurov
 
PDF
Мастер-класс по BigData Tools для HappyDev'15
Alexey Zinoviev
 
PPT
HBase
collabock
 
PDF
Лекция 2. Основы Hadoop
Technopark
 
PDF
12 HappyDev-lite-2014. Иван Погудин, Анатолий Никулин. Решение задач, связан...
HappyDev-lite
 
PDF
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Ontico
 
PDF
Hive vs Pig
Anatoliy Nikulin
 
Hadoop implementation in Wikimart
Roman Zykov
 
ADD2010: Обработка большого объема данных на платформеApache Hadoop
Vladimir Klimontovich
 
Thumbtack Expertise Days # 5 - Dataset
Alexey Remnev
 
Архитектура Apache HAWQ Highload++ 2015
Alexey Grishchenko
 
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
Ontico
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Badoo Development
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ontico
 
DBD lection 4. Big Data, NoSQL. In Russian.
mikhaelsmirnov
 
Lapan 20.04 hadoop h-base
kuchinskaya
 
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Ontico
 
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Badoo Development
 
Cостав дистрибутва Hortonworks data platform 2.3
Евгений Плакса
 
Nosql and Mongodb
Eduard Antsupov
 
Построение аналитического хранилища на 100 петабайт
Alexander Mazurov
 
Мастер-класс по BigData Tools для HappyDev'15
Alexey Zinoviev
 
HBase
collabock
 
Лекция 2. Основы Hadoop
Technopark
 
12 HappyDev-lite-2014. Иван Погудин, Анатолий Никулин. Решение задач, связан...
HappyDev-lite
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Ontico
 
Hive vs Pig
Anatoliy Nikulin
 
Ad

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Ontico
 
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Ontico
 
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Ontico
 
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Ontico
 
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Ontico
 
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Ontico
 
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico
 
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
Ontico
 
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Ontico
 
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Ontico
 
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Ontico
 
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Ontico
 
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Ontico
 
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Ontico
 
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Ontico
 
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
 
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Ontico
 
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Ontico
 
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Ontico
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Ontico
 

Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)

  • 1. Сервис рекомендаций на виртуальном Hadoop кластере Роман Зыков
  • 2. Содержание • Проблема: сервисы рекомендаций • Архитектуры • Компоненты Hadoop • Конфигурация Hadoop • Интеграция с БД • Hive и Pig • Что дальше
  • 4. Проблема Алгоритмы рекомендаций это: • перемножение больших матриц • очень большие JOIN Пример: Лог из 338Мб –> 55 Гб –> 32 Мб
  • 5. Архитектура До Хранилище MS SQL Enterprise (2 CPU Xeon, 48G RAM, 8x300Gb RAID10 SAS) Эксплуатация: – обновление раз в неделю – 5 часов в лучшем случае – 30% вероятности падения из-за tempdb – блокировал ETL
  • 6. Архитектура После • виртуальный кластер: 6 нод • 2Gb RAM, 30 Gb HDD, 16 cores • Cloudera Manager (free up to 50)
  • 8. Конфигурация Hadoop • Компрессия данных (Snappy или LZO) • Предварительная фильтрация данных • Бекапирование namenode на NFS • 1 map/reduce задача на ноду • Настройка памяти Java
  • 9. Компрессия Algorithm Compression Ratio IO performance increase Snappy 40% 25% LZF 40% 21% LZO 41% 5% ZLIB 48% -16% Snappy – Sequence Files, Avro, HBASE, txt LZO – поддерживает индексацию для split операции • HDFS хранение • MAP output • MapReduce output • AVRO!
  • 10. SQOOP SQOOP утилита обмена данными между Hadoop (HDFS, HIVE, HBASE) и базами данных. sqoop export --options-file ./sqoop_recommendations_connect --table ItemView --export-dir /data/itemview --input-fields-terminated-by 't' sqoop import --options-file ./sqoop_web_connect --table hadoop_webstat_daily -m 1 --warehouse-dir /data --fields-terminated-by 't' sqoop eval --options-file ./sqoop_warehouse_connect --query "exec dbo._hadoop_model_value"
  • 11. PIG • Скриптовый DataFlow • Удобен для ETL! • Данные в виде csv или sequence файлов, AVRO • UDF (Java, Python и т.д.) • Поддерживает Custom Loaders • Поддерживает сложные структуры данных • JOINS/ORDER BY • Pig 0.10.0 добавлены DataFu UDF от LinkedIn
  • 12. PIG %declare cur_date `date +%s`; set mapred.output.compress true; set mapred.output.compression.codec 'org.apache.hadoop.io.compress.SnappyCodec'; set mapred.output.compression.type 'BLOCK'; set mapred.compress.map.output true; set mapred.map.output.compression.codec 'org.apache.hadoop.io.compress.SnappyCodec'; -- load data A = load '/tmp/itemview_input' AS (session_id1:int, item_id1:int, val1:int); B = load '/tmp/itemview_input' AS (session_id2:int, item_id2:int, val2:int); -- calculate the length of one item vector L_0 = load '/tmp/itemview_input' AS (session_id:int, item_id:int, val:int); L_1 = FOREACH L_0 GENERATE item_id, val*val as val; L_2 = GROUP L_1 BY item_id; L = FOREACH L_2 GENERATE FLATTEN(group) as item_id, (long)SQRT(SUM(L_1.val)) as weight; STORE L INTO '/tmp/itemview_matrix' USING PigStorage();
  • 13. Hive •Виртуальное ХД, Почти SQL, ODBC/JDBC •Сsv, Sequence, AVRO в HDFS •HBASE •Партиции •Индексы •JOINS •Таблицы, Views •Нет: Delete, Update !!! •REGEXP по названию полей •Cложные структуры данных: map, arrays, struct •Поддерживает UDF и UDTF функции (Java, Python и т.д.)
  • 14. Hive SELECT hs.search_word, b.model_id, SUM(b.weight) as weight, count(distinct hs.visitor_id) as visitors FROM (SELECT hw.visitor_id, hw.date_time, hw.model_id, SUM(CASE page_type WHEN 'cart_add' THEN 3 WHEN 'order' THEN 5 ELSE 1) FROM hadoop_catalog_model hc JOIN hadoop_webstat hw ON (hc.model_id=hw.model_id) WHERE hc.t_recommended_good_id > 0 GROUP BY hw.visitor_id, hw.date_time, hw.model_id) b JOIN hadoop_searchwords hs ON b.visitor_id = hs.visitor_id AND ROUND(hs.date_time/86400)*86400 = b.date_time WHERE ! (hs.search_word RLIKE '^[-+]?[0-9]*.?[0-9]+$') and length(hs.search_word) > 2 GROUP BY hs.search_word, b.model_id HAVING count(distinct hs.visitor_id) >1 LIMIT 100
  • 15. Что дальше • Realtime веб-аналитика на HBASE + HIVE • Хранилище данных на HIVE • AVRO • OLAP?