SlideShare a Scribd company logo
1 of 29
Hadoop
             практика внедрения




Roman Zykov, Head of analytics at Wikimart.ru
               24.02.2012
Содержание

• Общие принципы
• Система управления кластером
• Языки программирования
Зачем?
Hadoop - простая среда параллельной обработки и хранения
данных.

Преимущества:
•Скорость работы с большими данными
•Удобство работы с данными
•Высокая отказоустойчивость кластера

Минусы:
•Система нереального времени
•Долго «заводится»
•Не отлажена до конца система бекапирования NameNode
MapReduce
{KEY, VALUE} – входная таблица
MAP – Операции над строками, считая их независимыми (VALUE)
REDUCE – Операция GROUP BY над ключем (KEY)

SELECT WORDS(TEXT1), COUNT(*)
FROM TABLE1
GROUP BY WORDS(TEXT1)
MapReduce
Job Execution
HDFS
HDFS Write
HDFS Storage
Compression

Algorithm      Compression Ratio      IO performance increase
Snappy         40%                    25%
LZF            40%                    21%
LZO            41%                    5%
ZLIB           48%                    -16%

Использование кодеков сжатия может существенно поднять
производительность.

На каких этапах могут использоваться кодеки:
•Хранение в HDFS (ускоряет операцию MAP)
•Сжатие выхода MAP (ускоряет SHUFFLE и REDUCE)
•Сжатие tmp файлов
Cloudera SCM - Hardware
Cloudera SCM - Services
Cloudera SCM - HUE



•   Beesfax for HIVE
•   HDFS File Browser
•   Job designer
•   Job browser
•   PIG Shell
•   User admin
Cloudera SCM - HDFS
Cloudera SCM – Job Tracker
Cloudera SCM – Job Tracker
Restore
• Безболезненная потеря нескольких DataNodes. Коэффициент
  репликации по умолчанию равен 3.
• Отсутствует нормальный механизм восстановления NameNode.
  Только через NFS диск.
Programming

Родной язык – Java

•Hive - SQL подобный от Facebook
•PIG - скриптовый от Yahoo
•JQL - IBM
•Cascalog (Clojure) - Twitter
•JavaScript - Microsoft


Можно писать и на других: Python, C и т.д.
HIVE
•   Генерирует jar файлы для каждого map-reduce
•   Обмен данными tmp файлами в HDFS
•   Почти SQL
•   Хранит данные в виде csv или sequence файлов в HDFS
•   Партиции
•   Индексы
•   Любые JOINs, большую таблицу лучше ставить справа
•   CREATE TABLE, CREATE TABLE EXTERNAL,DROP TABLE
•   CREATE DATABASE
•   VIEWS
•   Нет: Delete, Update
•   REGEXP по названию полей
•   Поддерживает сложные структуры данных
•   Поддерживает внешние функции (Java, Python и т.д.)
HIVE - Example

SELECT hs2.search_word, hs2.model_id, hs2.weight, hs2.visitors
FROM
               (select hs1.search_word, hs1.model_id, rank(hs1.search_word) as rank ,hs1.weight, hs1.visitors
               FROM
                               (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(floor((CASE page_type
                                                                                                                  WHEN 'cart_add' THEN 3
                                                                                                                  WHEN 'order' THEN 5
                                                                                                                  ELSE 1 END)
                                                                                                    *EXP((-0.01)*((unix_timestamp()-
date_time)/86400))*100)) AS weight
                                                  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
                                                  LIMIT 1000000
                                                 )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) hs1
               DISTRIBUTE BY hs1.search_word
               SORT BY hs1.search_word, hs1.weight desc) hs2
WHERE hs2.rank < 6
PIG
•   Генерирует jar файлы для каждого map-reduce
•   Обмен данными tmp файлами в HDFS
•   Скриптовый DataFlow
•   Хранит данные в виде csv или sequence файлов, ? AVRO
•   Поддерживает внешние функции (Java, Python и т.д.)
•   Поддерживает Custom Loaders
•   Поддерживает сложные структуры данных
PIG - Example
%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;
--Copy L for join
L2 = FOREACH L GENERATE item_id, weight;

-- calculate cosine value
COS_1 = JOIN G BY item_id1, L BY item_id;
COS_2 = JOIN COS_1 BY item_id2, L2 BY item_id;
COS_3 = FOREACH COS_2 GENERATE $0 as item_id1, $1 as item_id2, (float)$2/(float)$5/(float)$7 as weight, $3 as qty;


--fs -rmr /data/itemview_len;
STORE COS_3 INTO '/tmp/itemview_matrix' USING PigStorage();
Cascalog

                   Раньше он писал на PIG и UDF на Java

                   …. Потом ему …. Надоело

                   И он сделал новый язык Cascalog для Clojure




user=> (?<- (stdout) [?person] (age ?person 25))

user=> (?<- (stdout) [?person1 ?person2 ?delta]
(age ?person1 ?age1) (follows ?person1 ?person2)
(age ?person2 ?age2) (- ?age2 ?age1 :> ?delta)
(< ?delta 0))
Cascalog - Example
(ns cascalog-demo.demo
 (:use cascalog.api)
 (:require [cascalog [vars :as v] [ops :as c]])
 (:gen-class))

(defn textline-parsed [dir num-fields]
 (let [outargs (v/gen-nullable-vars num-fields)
      source (hfs-textline dir)]
   (<- outargs (source ?line) (c/re-parse [#"[^s]+"] ?line :>> outargs) (:distinct false))))


(defn compute-news-feed [output-tap follows-dir action-dir]
 (let [follows (follows-data follows-dir)
      action (action-data action-dir)
      follower-count (<- [?person ?count] (follows ?person2 ?person) (c/count ?count))]
   (?<- output-tap [?person ?feed] (follows ?person ?person2) (action ?person2 ?action ?time)
                      (follower-count ?person2 ?followers)
                      (action-score (System/currentTimeMillis) ?followers ?time :> ?score)
                      (:sort ?score) (:reverse true)
                      (mk-feed ?person2 ?action ?time :> ?feed))))

(defn -main [follows-dir action-dir output-dir]
 (compute-news-feed (hfs-textline output-dir) follows-dir action-dir))
Cascalog - Example
(ns cascalog-demo.demo
 (:use cascalog.api)
 (:require [cascalog [vars :as v] [ops :as c]])
 (:gen-class))

(defn textline-parsed [dir num-fields]
 (let [outargs (v/gen-nullable-vars num-fields)
      source (hfs-textline dir)]
   (<- outargs (source ?line) (c/re-parse [#"[^s]+"] ?line :>> outargs) (:distinct false))))


(defn compute-news-feed [output-tap follows-dir action-dir]
 (let [follows (follows-data follows-dir)
      action (action-data action-dir)
      follower-count (<- [?person ?count] (follows ?person2 ?person) (c/count ?count))]
   (?<- output-tap [?person ?feed] (follows ?person ?person2) (action ?person2 ?action ?time)
                      (follower-count ?person2 ?followers)
                      (action-score (System/currentTimeMillis) ?followers ?time :> ?score)
                      (:sort ?score) (:reverse true)
                      (mk-feed ?person2 ?action ?time :> ?feed))))

(defn -main [follows-dir action-dir output-dir]
 (compute-news-feed (hfs-textline output-dir) follows-dir action-dir))
SQOOP
SQOOP утилита обмена данными между HDFS и базами данных

Настройка подключения:
--connect jdbc:sqlserver://dwh.lan;user=*****;password=*******;database=Web;

Экспорт данных:
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"
Wikimart system: Data flow
BigDataUniversity.com
Thank you

More Related Content

What's hot

Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. SparkTechnopark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)Ontico
 
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache SparkDF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache SparkMoscowDataFest
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 
Программирование на PySpark
Программирование на PySparkПрограммирование на PySpark
Программирование на PySparkRamblerML
 
Игорь Любин - PowerShell - ConfeT&QA 2011
Игорь Любин - PowerShell - ConfeT&QA 2011Игорь Любин - PowerShell - ConfeT&QA 2011
Игорь Любин - PowerShell - ConfeT&QA 2011ilyubin
 
Caching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander ShumenkoCaching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander ShumenkoDrupalCampDN
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Задача распределения ресурсов ЦОД и алгоритмы ее решения
Задача распределения ресурсов ЦОД и алгоритмы ее решенияЗадача распределения ресурсов ЦОД и алгоритмы ее решения
Задача распределения ресурсов ЦОД и алгоритмы ее решенияARCCN
 
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart GammaMongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart GammaEvgeniy Kuzmin
 
Новое в Mongodb 2.4
Новое в Mongodb 2.4Новое в Mongodb 2.4
Новое в Mongodb 2.4Gleb Lebedev
 
Михаил Давыдов - JavaScript. Асинхронность
Михаил Давыдов - JavaScript. АсинхронностьМихаил Давыдов - JavaScript. Асинхронность
Михаил Давыдов - JavaScript. АсинхронностьYandex
 
Михаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьМихаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьYandex
 
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)Ontico
 
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...CocoaHeads
 
Python dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееPython dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееdelimitry
 

What's hot (20)

Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Apache spark
Apache sparkApache spark
Apache spark
 
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
 
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache SparkDF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Программирование на PySpark
Программирование на PySparkПрограммирование на PySpark
Программирование на PySpark
 
Игорь Любин - PowerShell - ConfeT&QA 2011
Игорь Любин - PowerShell - ConfeT&QA 2011Игорь Любин - PowerShell - ConfeT&QA 2011
Игорь Любин - PowerShell - ConfeT&QA 2011
 
Caching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander ShumenkoCaching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander Shumenko
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Задача распределения ресурсов ЦОД и алгоритмы ее решения
Задача распределения ресурсов ЦОД и алгоритмы ее решенияЗадача распределения ресурсов ЦОД и алгоритмы ее решения
Задача распределения ресурсов ЦОД и алгоритмы ее решения
 
msumobi2. Лекция 2
msumobi2. Лекция 2msumobi2. Лекция 2
msumobi2. Лекция 2
 
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart GammaMongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
 
Новое в Mongodb 2.4
Новое в Mongodb 2.4Новое в Mongodb 2.4
Новое в Mongodb 2.4
 
Михаил Давыдов - JavaScript. Асинхронность
Михаил Давыдов - JavaScript. АсинхронностьМихаил Давыдов - JavaScript. Асинхронность
Михаил Давыдов - JavaScript. Асинхронность
 
Михаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьМихаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: Асинхронность
 
Romanenko
RomanenkoRomanenko
Romanenko
 
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
 
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
 
Python dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееPython dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущее
 

Viewers also liked

Kib Rzykov 24th Apr2009
Kib Rzykov 24th Apr2009Kib Rzykov 24th Apr2009
Kib Rzykov 24th Apr2009Roman Zykov
 
Seo Prodvizhenie Short
Seo Prodvizhenie ShortSeo Prodvizhenie Short
Seo Prodvizhenie ShortRoman Zykov
 
Ozon в высшей школе экономики часть 1
Ozon в высшей школе экономики часть 1Ozon в высшей школе экономики часть 1
Ozon в высшей школе экономики часть 1Roman Zykov
 
Roman zykovcertificates
Roman zykovcertificatesRoman zykovcertificates
Roman zykovcertificatesRoman Zykov
 
Связной клуб
Связной клубСвязной клуб
Связной клубRoman Zykov
 
Metrics drivendesign
Metrics drivendesignMetrics drivendesign
Metrics drivendesignRoman Zykov
 
Ozon в высшей школе экономики часть 4
Ozon в высшей школе экономики часть 4Ozon в высшей школе экономики часть 4
Ozon в высшей школе экономики часть 4Roman Zykov
 

Viewers also liked (7)

Kib Rzykov 24th Apr2009
Kib Rzykov 24th Apr2009Kib Rzykov 24th Apr2009
Kib Rzykov 24th Apr2009
 
Seo Prodvizhenie Short
Seo Prodvizhenie ShortSeo Prodvizhenie Short
Seo Prodvizhenie Short
 
Ozon в высшей школе экономики часть 1
Ozon в высшей школе экономики часть 1Ozon в высшей школе экономики часть 1
Ozon в высшей школе экономики часть 1
 
Roman zykovcertificates
Roman zykovcertificatesRoman zykovcertificates
Roman zykovcertificates
 
Связной клуб
Связной клубСвязной клуб
Связной клуб
 
Metrics drivendesign
Metrics drivendesignMetrics drivendesign
Metrics drivendesign
 
Ozon в высшей школе экономики часть 4
Ozon в высшей школе экономики часть 4Ozon в высшей школе экономики часть 4
Ozon в высшей школе экономики часть 4
 

Similar to Hadoop implementation in Wikimart

Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)
Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)
Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)Ontico
 
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...Ivan Muratov
 
Разработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIРазработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIIlya Chesnokov
 
ITCrowd - Метапрограммирование
ITCrowd - МетапрограммированиеITCrowd - Метапрограммирование
ITCrowd - МетапрограммированиеITCrowd Almaty
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...ZFConf Conference
 
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)Ontico
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс СерверPVasili
 
AlaSQL библиотека для обработки JavaScript данных (презентация для ForntEnd 2...
AlaSQL библиотека для обработки JavaScript данных (презентация для ForntEnd 2...AlaSQL библиотека для обработки JavaScript данных (презентация для ForntEnd 2...
AlaSQL библиотека для обработки JavaScript данных (презентация для ForntEnd 2...Andrey Gershun
 
Web весна 2012 лекция 10
Web весна 2012 лекция 10Web весна 2012 лекция 10
Web весна 2012 лекция 10Technopark
 
High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9HighLoad2009
 
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.DrupalCampDN
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...pgdayrussia
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationNikolay Samokhvalov
 
«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42DevDay
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)Ontico
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10Technopark
 

Similar to Hadoop implementation in Wikimart (20)

Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)
Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)
Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)
 
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
 
Разработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIРазработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PI
 
ITCrowd - Метапрограммирование
ITCrowd - МетапрограммированиеITCrowd - Метапрограммирование
ITCrowd - Метапрограммирование
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
 
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс Сервер
 
AlaSQL библиотека для обработки JavaScript данных (презентация для ForntEnd 2...
AlaSQL библиотека для обработки JavaScript данных (презентация для ForntEnd 2...AlaSQL библиотека для обработки JavaScript данных (презентация для ForntEnd 2...
AlaSQL библиотека для обработки JavaScript данных (презентация для ForntEnd 2...
 
Apache Hadoop
Apache HadoopApache Hadoop
Apache Hadoop
 
Web весна 2012 лекция 10
Web весна 2012 лекция 10Web весна 2012 лекция 10
Web весна 2012 лекция 10
 
High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9
 
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentation
 
«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
Seminar psu 05.04.2013
Seminar psu 05.04.2013Seminar psu 05.04.2013
Seminar psu 05.04.2013
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10
 

More from Roman Zykov

How to eliminate ideas as soon as possible
How to eliminate ideas as soon as possibleHow to eliminate ideas as soon as possible
How to eliminate ideas as soon as possibleRoman Zykov
 
Kib Rif 2015. Make money from your data
Kib Rif 2015. Make money from your dataKib Rif 2015. Make money from your data
Kib Rif 2015. Make money from your dataRoman Zykov
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaRoman Zykov
 
сервисы персонализации на основе данных
сервисы персонализации на основе данныхсервисы персонализации на основе данных
сервисы персонализации на основе данныхRoman Zykov
 
Big data europe 2012 brochure (3)
Big data europe 2012 brochure (3)Big data europe 2012 brochure (3)
Big data europe 2012 brochure (3)Roman Zykov
 
Wikimart recommendations
Wikimart recommendationsWikimart recommendations
Wikimart recommendationsRoman Zykov
 
Hadoop in Wikimart. Part 1. Business
Hadoop in Wikimart. Part 1. BusinessHadoop in Wikimart. Part 1. Business
Hadoop in Wikimart. Part 1. BusinessRoman Zykov
 
Google Analytics vs Omniture SiteCatalyst vs In-ouse Webanalytics at iMetrics
Google Analytics vs Omniture SiteCatalyst vs In-ouse Webanalytics at iMetricsGoogle Analytics vs Omniture SiteCatalyst vs In-ouse Webanalytics at iMetrics
Google Analytics vs Omniture SiteCatalyst vs In-ouse Webanalytics at iMetricsRoman Zykov
 
MIPhT presentation about BI
MIPhT presentation about BIMIPhT presentation about BI
MIPhT presentation about BIRoman Zykov
 
Owox rzykov kp_iexamples
Owox rzykov kp_iexamplesOwox rzykov kp_iexamples
Owox rzykov kp_iexamplesRoman Zykov
 
Wpaper 005 functionalism_new_approach
Wpaper 005 functionalism_new_approachWpaper 005 functionalism_new_approach
Wpaper 005 functionalism_new_approachRoman Zykov
 
Searchpatterns 100519055231-phpapp02
Searchpatterns 100519055231-phpapp02Searchpatterns 100519055231-phpapp02
Searchpatterns 100519055231-phpapp02Roman Zykov
 
Ozon в высшей школе экономики часть 3
Ozon в высшей школе экономики часть 3Ozon в высшей школе экономики часть 3
Ozon в высшей школе экономики часть 3Roman Zykov
 
Ozon в высшей школе экономики часть 2
Ozon в высшей школе экономики часть 2Ozon в высшей школе экономики часть 2
Ozon в высшей школе экономики часть 2Roman Zykov
 
Roman Zykov Certificates
Roman Zykov CertificatesRoman Zykov Certificates
Roman Zykov CertificatesRoman Zykov
 
Complete Ga Power User Web
Complete Ga Power User WebComplete Ga Power User Web
Complete Ga Power User WebRoman Zykov
 
RIW2009 Анализ продвижения
RIW2009 Анализ продвиженияRIW2009 Анализ продвижения
RIW2009 Анализ продвиженияRoman Zykov
 

More from Roman Zykov (20)

How to eliminate ideas as soon as possible
How to eliminate ideas as soon as possibleHow to eliminate ideas as soon as possible
How to eliminate ideas as soon as possible
 
Kib Rif 2015. Make money from your data
Kib Rif 2015. Make money from your dataKib Rif 2015. Make money from your data
Kib Rif 2015. Make money from your data
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark Scala
 
сервисы персонализации на основе данных
сервисы персонализации на основе данныхсервисы персонализации на основе данных
сервисы персонализации на основе данных
 
Big data europe 2012 brochure (3)
Big data europe 2012 brochure (3)Big data europe 2012 brochure (3)
Big data europe 2012 brochure (3)
 
Wikimart recommendations
Wikimart recommendationsWikimart recommendations
Wikimart recommendations
 
Hadoop in Wikimart. Part 1. Business
Hadoop in Wikimart. Part 1. BusinessHadoop in Wikimart. Part 1. Business
Hadoop in Wikimart. Part 1. Business
 
Google Analytics vs Omniture SiteCatalyst vs In-ouse Webanalytics at iMetrics
Google Analytics vs Omniture SiteCatalyst vs In-ouse Webanalytics at iMetricsGoogle Analytics vs Omniture SiteCatalyst vs In-ouse Webanalytics at iMetrics
Google Analytics vs Omniture SiteCatalyst vs In-ouse Webanalytics at iMetrics
 
MIPhT presentation about BI
MIPhT presentation about BIMIPhT presentation about BI
MIPhT presentation about BI
 
Owox rzykov kp_iexamples
Owox rzykov kp_iexamplesOwox rzykov kp_iexamples
Owox rzykov kp_iexamples
 
Owox rzykov
Owox rzykovOwox rzykov
Owox rzykov
 
Wpaper 005 functionalism_new_approach
Wpaper 005 functionalism_new_approachWpaper 005 functionalism_new_approach
Wpaper 005 functionalism_new_approach
 
Searchpatterns 100519055231-phpapp02
Searchpatterns 100519055231-phpapp02Searchpatterns 100519055231-phpapp02
Searchpatterns 100519055231-phpapp02
 
E-commerce KPIs
E-commerce KPIsE-commerce KPIs
E-commerce KPIs
 
Ozon в высшей школе экономики часть 3
Ozon в высшей школе экономики часть 3Ozon в высшей школе экономики часть 3
Ozon в высшей школе экономики часть 3
 
Ozon в высшей школе экономики часть 2
Ozon в высшей школе экономики часть 2Ozon в высшей школе экономики часть 2
Ozon в высшей школе экономики часть 2
 
Roman Zykov Certificates
Roman Zykov CertificatesRoman Zykov Certificates
Roman Zykov Certificates
 
Complete Ga Power User Web
Complete Ga Power User WebComplete Ga Power User Web
Complete Ga Power User Web
 
RIW2009 Анализ продвижения
RIW2009 Анализ продвиженияRIW2009 Анализ продвижения
RIW2009 Анализ продвижения
 
Jobremont Ru
Jobremont RuJobremont Ru
Jobremont Ru
 

Hadoop implementation in Wikimart

  • 1. Hadoop практика внедрения Roman Zykov, Head of analytics at Wikimart.ru 24.02.2012
  • 2. Содержание • Общие принципы • Система управления кластером • Языки программирования
  • 3. Зачем? Hadoop - простая среда параллельной обработки и хранения данных. Преимущества: •Скорость работы с большими данными •Удобство работы с данными •Высокая отказоустойчивость кластера Минусы: •Система нереального времени •Долго «заводится» •Не отлажена до конца система бекапирования NameNode
  • 4. MapReduce {KEY, VALUE} – входная таблица MAP – Операции над строками, считая их независимыми (VALUE) REDUCE – Операция GROUP BY над ключем (KEY) SELECT WORDS(TEXT1), COUNT(*) FROM TABLE1 GROUP BY WORDS(TEXT1)
  • 10. Compression Algorithm Compression Ratio IO performance increase Snappy 40% 25% LZF 40% 21% LZO 41% 5% ZLIB 48% -16% Использование кодеков сжатия может существенно поднять производительность. На каких этапах могут использоваться кодеки: •Хранение в HDFS (ускоряет операцию MAP) •Сжатие выхода MAP (ускоряет SHUFFLE и REDUCE) •Сжатие tmp файлов
  • 11. Cloudera SCM - Hardware
  • 12. Cloudera SCM - Services
  • 13. Cloudera SCM - HUE • Beesfax for HIVE • HDFS File Browser • Job designer • Job browser • PIG Shell • User admin
  • 15. Cloudera SCM – Job Tracker
  • 16. Cloudera SCM – Job Tracker
  • 17. Restore • Безболезненная потеря нескольких DataNodes. Коэффициент репликации по умолчанию равен 3. • Отсутствует нормальный механизм восстановления NameNode. Только через NFS диск.
  • 18. Programming Родной язык – Java •Hive - SQL подобный от Facebook •PIG - скриптовый от Yahoo •JQL - IBM •Cascalog (Clojure) - Twitter •JavaScript - Microsoft Можно писать и на других: Python, C и т.д.
  • 19. HIVE • Генерирует jar файлы для каждого map-reduce • Обмен данными tmp файлами в HDFS • Почти SQL • Хранит данные в виде csv или sequence файлов в HDFS • Партиции • Индексы • Любые JOINs, большую таблицу лучше ставить справа • CREATE TABLE, CREATE TABLE EXTERNAL,DROP TABLE • CREATE DATABASE • VIEWS • Нет: Delete, Update • REGEXP по названию полей • Поддерживает сложные структуры данных • Поддерживает внешние функции (Java, Python и т.д.)
  • 20. HIVE - Example SELECT hs2.search_word, hs2.model_id, hs2.weight, hs2.visitors FROM (select hs1.search_word, hs1.model_id, rank(hs1.search_word) as rank ,hs1.weight, hs1.visitors FROM (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(floor((CASE page_type WHEN 'cart_add' THEN 3 WHEN 'order' THEN 5 ELSE 1 END) *EXP((-0.01)*((unix_timestamp()- date_time)/86400))*100)) AS weight 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 LIMIT 1000000 )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) hs1 DISTRIBUTE BY hs1.search_word SORT BY hs1.search_word, hs1.weight desc) hs2 WHERE hs2.rank < 6
  • 21. PIG • Генерирует jar файлы для каждого map-reduce • Обмен данными tmp файлами в HDFS • Скриптовый DataFlow • Хранит данные в виде csv или sequence файлов, ? AVRO • Поддерживает внешние функции (Java, Python и т.д.) • Поддерживает Custom Loaders • Поддерживает сложные структуры данных
  • 22. PIG - Example %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; --Copy L for join L2 = FOREACH L GENERATE item_id, weight; -- calculate cosine value COS_1 = JOIN G BY item_id1, L BY item_id; COS_2 = JOIN COS_1 BY item_id2, L2 BY item_id; COS_3 = FOREACH COS_2 GENERATE $0 as item_id1, $1 as item_id2, (float)$2/(float)$5/(float)$7 as weight, $3 as qty; --fs -rmr /data/itemview_len; STORE COS_3 INTO '/tmp/itemview_matrix' USING PigStorage();
  • 23. Cascalog Раньше он писал на PIG и UDF на Java …. Потом ему …. Надоело И он сделал новый язык Cascalog для Clojure user=> (?<- (stdout) [?person] (age ?person 25)) user=> (?<- (stdout) [?person1 ?person2 ?delta] (age ?person1 ?age1) (follows ?person1 ?person2) (age ?person2 ?age2) (- ?age2 ?age1 :> ?delta) (< ?delta 0))
  • 24. Cascalog - Example (ns cascalog-demo.demo (:use cascalog.api) (:require [cascalog [vars :as v] [ops :as c]]) (:gen-class)) (defn textline-parsed [dir num-fields] (let [outargs (v/gen-nullable-vars num-fields) source (hfs-textline dir)] (<- outargs (source ?line) (c/re-parse [#"[^s]+"] ?line :>> outargs) (:distinct false)))) (defn compute-news-feed [output-tap follows-dir action-dir] (let [follows (follows-data follows-dir) action (action-data action-dir) follower-count (<- [?person ?count] (follows ?person2 ?person) (c/count ?count))] (?<- output-tap [?person ?feed] (follows ?person ?person2) (action ?person2 ?action ?time) (follower-count ?person2 ?followers) (action-score (System/currentTimeMillis) ?followers ?time :> ?score) (:sort ?score) (:reverse true) (mk-feed ?person2 ?action ?time :> ?feed)))) (defn -main [follows-dir action-dir output-dir] (compute-news-feed (hfs-textline output-dir) follows-dir action-dir))
  • 25. Cascalog - Example (ns cascalog-demo.demo (:use cascalog.api) (:require [cascalog [vars :as v] [ops :as c]]) (:gen-class)) (defn textline-parsed [dir num-fields] (let [outargs (v/gen-nullable-vars num-fields) source (hfs-textline dir)] (<- outargs (source ?line) (c/re-parse [#"[^s]+"] ?line :>> outargs) (:distinct false)))) (defn compute-news-feed [output-tap follows-dir action-dir] (let [follows (follows-data follows-dir) action (action-data action-dir) follower-count (<- [?person ?count] (follows ?person2 ?person) (c/count ?count))] (?<- output-tap [?person ?feed] (follows ?person ?person2) (action ?person2 ?action ?time) (follower-count ?person2 ?followers) (action-score (System/currentTimeMillis) ?followers ?time :> ?score) (:sort ?score) (:reverse true) (mk-feed ?person2 ?action ?time :> ?feed)))) (defn -main [follows-dir action-dir output-dir] (compute-news-feed (hfs-textline output-dir) follows-dir action-dir))
  • 26. SQOOP SQOOP утилита обмена данными между HDFS и базами данных Настройка подключения: --connect jdbc:sqlserver://dwh.lan;user=*****;password=*******;database=Web; Экспорт данных: 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"

Editor's Notes

  1. Паша
  2. Паша
  3. Рома
  4. Рома
  5. Рома
  6. Рома
  7. Рома
  8. Рома
  9. Рома
  10. Рома
  11. Рома
  12. Рома
  13. Рома
  14. Рома
  15. Рома
  16. Рома
  17. Рома
  18. Рома
  19. Рома
  20. Рома
  21. Рома
  22. Рома
  23. Рома
  24. Рома
  25. Рома
  26. Рома
  27. Рома
  28. Рома