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

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

description

 

Transcript of Cервис рекомендаций на виртуальном Hadoop кластере (Роман...

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

Сервис рекомендаций на виртуальном Hadoop кластере

Роман Зыков

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

Содержание

• Проблема: сервисы рекомендаций• Архитектуры• Компоненты Hadoop• Конфигурация Hadoop• Интеграция с БД• Hive и Pig• Что дальше

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

Рекомендации

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

Проблема

Алгоритмы рекомендаций это:• перемножение больших матриц• очень большие JOIN

Пример:Лог из 338Мб –> 55 Гб –> 32 Мб

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

Архитектура До

Хранилище MS SQL Enterprise (2 CPU Xeon, 48G RAM, 8x300Gb RAID10 SAS)

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

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

Архитектура После

• виртуальный кластер: 6 нод• 2Gb RAM, 30 Gb HDD, 16 cores• Cloudera Manager (free up to 50)

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

Компоненты Hadoop

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

Конфигурация Hadoop

• Компрессия данных (Snappy или LZO)• Предварительная фильтрация данных• Бекапирование namenode на NFS• 1 map/reduce задача на ноду• Настройка памяти Java

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

КомпрессияAlgorithm Compression Ratio IO performance increaseSnappy 40% 25%LZF 40% 21%LZO 41% 5%ZLIB 48% -16%

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

• HDFS хранение• MAP output• MapReduce output• AVRO!

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

SQOOPSQOOP утилита обмена данными между 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"

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

PIG• Скриптовый DataFlow • Удобен для ETL!• Данные в виде csv или sequence файлов, AVRO • UDF (Java, Python и т.д.)• Поддерживает Custom Loaders• Поддерживает сложные структуры данных• JOINS/ORDER BY• Pig 0.10.0 добавлены DataFu UDF от LinkedIn

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

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 dataA = 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 vectorL_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();

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

Hive•Виртуальное ХД, Почти SQL, ODBC/JDBC•Сsv, Sequence, AVRO в HDFS•HBASE•Партиции•Индексы•JOINS•Таблицы, Views•Нет: Delete, Update !!!•REGEXP по названию полей•Cложные структуры данных: map, arrays, struct•Поддерживает UDF и UDTF функции (Java, Python и т.д.)

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

HiveSELECT 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 hsON 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) > 2GROUP BY hs.search_word, b.model_idHAVING count(distinct hs.visitor_id) >1LIMIT 100

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

Что дальше

• Realtime веб-аналитика на HBASE + HIVE• Хранилище данных на HIVE• AVRO• OLAP?

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

Вопросы[email protected]