8. проблематика
15 из 17
секторов экономики в США имеют больше
данных, хранящихся на компанию, чем
Библиотека Конгресса США
http://bit.ly/big-data-mk-2011
11. MapReduce история вопроса
Начат проект Hadoop*
Дуг Каттинг и Майк Кафарелла
2005
* назван в честь игрушечного слонёнка ребёнка Дуга
12. MapReduce история вопроса
В течение 2005 — 2006 годов Hadoop
развивался усилиями двух разработчиков —
Каттинга и Майка Кафареллы в режиме
частичной занятости, сначала в рамках
проекта Nutch, затем — проекта Lucene.
http://ru.wikipedia.org/wiki/Hadoop
13. MapReduce история вопроса
В январе 2006 г. Yahoo пригласила Каттинга
возглавить команду разработки
инфраструктуры распределённых
вычислений (выделение Hadoop в
отдельный проект). В феврале 2008 г.
Yahoo запустила кластерную поисковую
машину на 10 тыс. процессорных ядер,
управляемую средствами Hadoop.
18. Apache Hadoop
Hadoop Common
● абстракция над файловыми системами
(HDFS, S3, maprfs, CloudStore, FTP, read only
HTTP...)
● FS shell (cat, chmod, chown, chgrp, cp, du, ls, mkdir,
mv, rm, tail)
● утилиты
19. Apache Hadoop
HDFS
● распределённая файловая система
● файлы можно дописывать в конец
● distributed, scalable, reliable portable…
http://en.wikipedia.org/wiki/Hadoop#Hadoop_distributed_file_system
21. Cascading
Cascading is a data processing API
and processing query planner used
for defining, sharing, and executing
data-processing workflows on a single
computing
node
or
distributed
computing cluster.
http://docs.cascading.org/cascading/2.0/userguide/htmlsingle/
23. Cascading с разных точек зрения
С точки зрения бизнеса:
● управление бизнес процессами для
оркестрации потоков выполнения (аля
BPM / BPEL)
http://www.slideshare.net/pacoid/cascading-for-the-impatient
24. Cascading с разных точек зрения
С точки зрения системного интегратора:
● система интеграции гетерогенных
источников данных и платформ
вычисления
http://www.slideshare.net/pacoid/cascading-for-the-impatient
25. Cascading с разных точек зрения
С точки зрения data scientist:
● направленный ациклический граф для
которого можно применить закон Амдала*
http://www.slideshare.net/pacoid/cascading-for-the-impatient
26. *для любознательных
Закон Амдала:
В случае, когда задача разделяется на
несколько частей, суммарное время её
выполнения на параллельной системе
не может быть меньше времени
выполнения
самого
длинного
фрагмента.
27. Cascading с разных точек зрения
С точки зрения data архитектора:
● физический план управления большими
потоками данных
http://www.slideshare.net/pacoid/cascading-for-the-impatient
28. Cascading с разных точек зрения
С точки зрения архитектора ПО:
● язык паттернов, похожий на план
водопровода или проектирование
принципиальных схем устройств
http://www.slideshare.net/pacoid/cascading-for-the-impatient
29. Cascading с разных точек зрения
С точки зрения разработчика:
● связывающий API для скалы, кложура,
пайтона, руби, джава
http://www.slideshare.net/pacoid/cascading-for-the-impatient
30. Cascading с разных точек зрения
С точки зрения админа/Ops’а:
● JAR файл
● которому можно передать параметры
через командную строку
● валяется в Maven Repo
http://www.slideshare.net/pacoid/cascading-for-the-impatient
31. история
● Крис Венсель (Chris Wensel)
● Начал разработку Cascading’а в начале
2008 (запись в блоге)
● Основал компанию Concurrent в
середине 2008
● В 2011 Concurrent получила инвестиции
для дальнейшего развития Cascading’а
● 2008 20 KLOC
● 2013 106 KLOC
● 3 контрибьютера
32. Yep, it is open source!
https://github.com/cwensel/cascading
37. основные понятия
Набор разных труб (pipes) позволяет*:
●
●
●
●
разделять данные
мёрджить данные
группировать
джойнить
* Для каждого кортежа или для группы
кортежей.
40. основные понятия: tuples
● Аналог тапла -- это строка в таблице базы
данных.
● В каскадинге для кортежей есть
специальный тип: cascading.tuple.
Tuple
● Внутри это List<Object> elements;
42. основные понятия: fields
● Определяет имя элемента кортежа.
● В каскадинге для полей есть специальный
тип: cascading.tuple.Fields
● Поле может быть строкой, целым
числом или специальным значением из
предопределённого множества.
● Специальные значения нужны для
выполнения шаблонных операций.
44. основные понятия: pipes
● Это узел в котором может что-то
происходить с кортежами (в документации нет
чёткого определения пайпа).
● В каскадинге для пайпов есть
специальный тип: cascading.pipe.
Pipe
45. основные понятия: pipes
Типы пайпов:
● Класс Pipe -- нужно для создания и
именования пайпа (планировщик использует
имена для соединения с тапами).
● Подкласс SubAssembly -- повторное
использование сборок пайпов.
● Шесть основных подклассов: Each,
Merge, GroupBy, Every, CoGroup,
HashJoin.
46. основные понятия: pipes
Each:
● операции основанные на содержимом
кортежа: анализ, трансформация или
фильтрация
● оперирует конкретным кортежем из потока
● применяет функции или фильтры такие как
условная замена определённых значений
полей, удаление кортежей значение полей
которых выходит за заданные пределы…
● откалывание отдельной ветки потока данных
● удаление ненужных полей из потока данных
47. основные понятия: pipes
Merge:
● слияние нескольких потоков данных в один
● принимает несколько потоков с идентичными
полями
● отдаёт один поток с кортежами из входных
потоков в произвольном порядке
48. основные понятия: pipes
GroupBy:
● группирует кортежи потока данных по общим
значениям указанных полей
● если на вход подать несколько потоков, то
перед группировкой происходит слияние
(поля потоков должны быть одинаковые)
● обычно группировку делают перед
операциями “aggregator” или “buffer”
● по сути сортирует все кортежи в группы (в
группах кортежи в произвольном порядке)
49. основные понятия: pipes
Every:
● оперирует сгруппированными кортежами
● используется для применения операций
“aggregator” или “buffer”
● используется только после GroupBy или
CoGroup
● можно несколько операций “aggregator”
ставить подряд (для “buffer” не работает)
50. основные понятия: pipes
CoGroup:
● выполняет операцию “join” на нескольких
входных потоках данных или на самом себе
● похож на SQL join (тоже может быть inner,
outer, left, или right)
● отдаёт поток данных сгруппированный по
указанным полям
● выходной поток данных содержит все поля
входных потоков
● входные потоки не могут содержать
одинаковые имена полей
51. основные понятия: pipes
HashJoin:
● выполняет операцию “join” на нескольких
входных потоках данных или на самом себе
● похож на SQL join (тоже может быть inner,
outer, left, или right)
● отдаёт поток данных в произвольном прядке
● если не нужна группировка, быстрее чем
CoGroup (при условии нескольких маленьких
входных потоков и не более одного большого)
56. паттерны работы с потоками
Split:
● Разделение данных из одного
потока на несколько потоков.
● К одному Pipe’у присоединяется
несколько последующих Pipe’ов.
57. паттерны работы с потоками
Merge:
● Слияние нескольких потоков
данных в один.
● Несколько Pipe’ов
присоединяются к Pipe’у типа
Merge или GroupBy.
58. паттерны работы с потоками
Join:
● Комбинирование данных из
нескольких потоков с разными
полями по общим полям (аналог
SQL join).
● Несколько Pipe’ов
присоединяются к Pipe’у типа
HashJoin или CoGroup.
62. основные понятия: флоу
● Важный момент: флоу -- это
информация о том где брать данные, как
обрабатывать и куда складывать
результат.
● Где и куда должны существовать в
момент выполнения.
● После создания, флоу нужно выполнить
в одной из платформ.
66. основные понятия: фунции
● Ожидает на вход один кортеж.
● Хороший тон: указать набор
входных и выходных полей.
● Возвращает ноль или больше
кортежей.
● Используется с пайпом Each,
который может следовать после
пайпа любого типа.
68. основные понятия: фильтры
● Ожидает на вход один кортеж.
● Возвращает true или false
(выбрасываем кортеж из потока
или нет).
● Используется с пайпом Each,
который может следовать после
пайпа любого типа.
69. основные понятия: агрегаторы
● Ожидает на вход группу кортежей
(вывод пайпа GroupBy или
CoGroup).
● Возвращает ноль или несколько
кортежей для каждой входной
группы кортежей.
● Примеры: Average, Count, First,
Last, Max, Min, Sum
70. основные понятия: буфферы
● Ожидает на вход группу кортежей
(вывод пайпа GroupBy или
CoGroup).
● Возвращает ноль или несколько
кортежей для каждой входной группы
кортежей.
● Получает всю группу кортежей сразу
(доступ через итератор).
● Удобно для вставки кортежа в
группу.
72. тестирование
● Юнит-тесты для функций, фильтров,
агрегаторов и буфферов (cascading.
CascadingTestCase).
● cascading.operation.Debug -фильтр, печатает кортеж в stdout или
stderr.
● запуск в локальном режиме.
● пишите логи (в коде своих операций)
73. дебаг
● в локальном режиме:
https://github.com/ScaleUnlimited/cascading.utils
final FlowRunner runner = new FlowRunner();
runner.addFlow(flow);
runner.complete();
● Hadoop кластер из одной ноды:
export HADOOP_OPTS = "-agentlib:
jdwp=transport=dt_socket,server=y,suspend=y,
address=8788"
hadoop jar your-casc.jar <параметры>
77. ещё один шаг вперёд
● Cascading -- это высокоуровневый API
● Меньше кода и проще проектировать
сложную обработку данных (по
сравнению с обычным MapReduce)
● Следующий логичный шаг -- DSL
● Выразительный
● Гибкий
● Правильная идеология
81. datalog
● Декларативный логический язык
программирования.
● Синтаксически является подмножеством
Пролога.
● Часто используется как язык запросов к
дедуктивным базам данных (более
выразительный чем SQL).
82. datalog
1
2
3
4
5
6
родил(Авраам,Исаак).
родил(Исаак,Иаков).
предок(X,Y) :- родил(X,Y).
предок(X,Y) :родил(X,Z),предок(Z,Y).
?- предок(Авраам,X).
1 - Авраам родитель Исаака; 2 - Исаак родитель Иакова; 3, 4, 5 - правила
определения предков; структура правила: <голова> :- <тело>; 3 - X предок
Y’а если известно что X родитель Y’а; 4, 5 - X предок Y’а если известно
что X родитель Z’а и Z предок Y’а; 6 - запрос “найти всех людей у кого в
предках Авраам”, результат: Исаак и Иаков.
83. история
● Натан Марц (Nathan Marz)
● Первый коммит в гитхабе весной 2010
(пруф)
●
●
●
●
Прародитель
2010 1 KLOC
2013 9 KLOC
29 контрибьютеров
84. Yep, it is open source!
https://github.com/nathanmarz/cascalog
94. проблемы каскалога
● Высокий порог вхождения (clojure).
● Мало документации.
● В Украине практически нет людей с
опытом использования сабжа.
● Нет формальной грамматики
описывающей язык запросов.
95. сообщество
● Гугл группа каскалога.
● Гугл-группа каскадинга.
● Как ни странно на stackoverflow.com
практически ничего нет о сабжах.
● Митапы в Сан-Франциско и Лондоне.
96. кто использует cascalog
●
●
●
●
●
●
●
●
Twitter
Amazon продукты MultiTool и LogAnalyzer
Etsy рынок для хенмейда
FlightCaster предсказание задержек
рейсов
Ion Flux биоинформатика
RapLeaf рекомендательные системы
Razorfish рекламное агенство
The Climate Corporation страхование от
неурожая
97. развитие
● Каскалог 2.0 не будет привязан к
каскадингу.
● Storm -- одна из возможных платформ.
98. когда использовать
● Данных должно быть ОЧЕНЬ много (не
помещаются в память).
● Исторические данные (логи).
● Данные всё время добавляются.
99. документация
● Отличный User Guide по каскадингу.
● Замечательный туториал по каскадингу.
● Вики по каскалогу в гитхабе.