Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

18,175 views

Published on

  • Be the first to comment

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

  1. 1. Сервис рекомендаций навиртуальном Hadoop кластере Роман Зыков
  2. 2. Содержание• Проблема: сервисы рекомендаций• Архитектуры• Компоненты Hadoop• Конфигурация Hadoop• Интеграция с БД• Hive и Pig• Что дальше
  3. 3. Рекомендации
  4. 4. ПроблемаАлгоритмы рекомендаций это:• перемножение больших матриц• очень большие JOINПример:Лог из 338Мб –> 55 Гб –> 32 Мб
  5. 5. Архитектура ДоХранилище MS SQL Enterprise(2 CPU Xeon, 48G RAM, 8x300Gb RAID10 SAS)Эксплуатация: – обновление раз в неделю – 5 часов в лучшем случае – 30% вероятности падения из-за tempdb – блокировал ETL
  6. 6. Архитектура После• виртуальный кластер: 6 нод• 2Gb RAM, 30 Gb HDD, 16 cores• Cloudera Manager (free up to 50)
  7. 7. Компоненты Hadoop
  8. 8. Конфигурация Hadoop• Компрессия данных (Snappy или LZO)• Предварительная фильтрация данных• Бекапирование namenode на NFS• 1 map/reduce задача на ноду• Настройка памяти Java
  9. 9. Компрессия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!
  10. 10. SQOOPSQOOP утилита обмена данными между Hadoop (HDFS, HIVE,HBASE) и базами данных.sqoop export --options-file ./sqoop_recommendations_connect --table ItemView--export-dir /data/itemview --input-fields-terminated-by tsqoop import --options-file ./sqoop_web_connect --table hadoop_webstat_daily-m 1 --warehouse-dir /data --fields-terminated-by tsqoop eval --options-file ./sqoop_warehouse_connect --query "execdbo._hadoop_model_value"
  11. 11. PIG• Скриптовый DataFlow• Удобен для ETL!• Данные в виде csv или sequence файлов, AVRO• UDF (Java, Python и т.д.)• Поддерживает Custom Loaders• Поддерживает сложные структуры данных• JOINS/ORDER BY• Pig 0.10.0 добавлены DataFu UDF от LinkedIn
  12. 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 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();
  13. 13. Hive•Виртуальное ХД, Почти SQL, ODBC/JDBC•Сsv, Sequence, AVRO в HDFS•HBASE•Партиции•Индексы•JOINS•Таблицы, Views•Нет: Delete, Update !!!•REGEXP по названию полей•Cложные структуры данных: map, arrays, struct•Поддерживает UDF и UDTF функции (Java, Python и т.д.)
  14. 14. HiveSELECT hs.search_word, b.model_id, SUM(b.weight) as weight, count(distinct hs.visitor_id) asvisitors 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) bJOIN hadoop_searchwords hsON b.visitor_id = hs.visitor_id AND ROUND(hs.date_time/86400)*86400 = b.date_timeWHERE ! (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
  15. 15. Что дальше• Realtime веб-аналитика на HBASE + HIVE• Хранилище данных на HIVE• AVRO• OLAP?
  16. 16. Вопросы??? rzykov@gmail.com

×