Your SlideShare is downloading. ×
0
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Hadoop implementation in Wikimart
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Hadoop implementation in Wikimart

7,720

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,720
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
15
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Паша
  • Паша
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Рома
  • Transcript

    • 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 TABLE1GROUP BY WORDS(TEXT1)
    • 5. MapReduce
    • 6. Job Execution
    • 7. HDFS
    • 8. HDFS Write
    • 9. HDFS Storage
    • 10. CompressionAlgorithm Compression Ratio IO performance increaseSnappy 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
    • 14. Cloudera SCM - HDFS
    • 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 - ExampleSELECT hs2.search_word, hs2.model_id, hs2.weight, hs2.visitorsFROM (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) hs2WHERE 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 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;--Copy L for joinL2 = FOREACH L GENERATE item_id, weight;-- calculate cosine valueCOS_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 для Clojureuser=> (?<- (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. SQOOPSQOOP утилита обмена данными между 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 "execdbo._hadoop_model_value"
    • 27. Wikimart system: Data flow
    • 28. BigDataUniversity.com
    • 29. Thank you

    ×