5. Архитектура До
Хранилище MS SQL Enterprise
(2 CPU Xeon, 48G RAM, 8x300Gb RAID10 SAS)
Эксплуатация:
– обновление раз в неделю
– 5 часов в лучшем случае
– 30% вероятности падения из-за tempdb
– блокировал ETL
8. Конфигурация Hadoop
• Компрессия данных (Snappy или LZO)
• Предварительная фильтрация данных
• Бекапирование namenode на NFS
• 1 map/reduce задача на ноду
• Настройка памяти Java
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?