2. Обо мне
● Андрей Панфилов
● Java-разработчик
● Интересуюсь: BigData, ФП
3. Проблематика
● $600 стоимость диска на который поместится вся музыка
в мире
● 5B мобильников использовалось в 2010
● 30B расшариваний всякой фигни в Facebook каждый
месяц в 2011-м году
● 40% прогнозируемого роста данных во всём мире в год
VS 5% роста ИТ-расходов во всём мире (2011 год)
● 235 терабайт данных собрано Библиотекой Конгресса
США в апреле 2011-го
● 15 из 17 секторов экономики в США имеют больше
данных, хранящихся на компанию, чем Библиотека
Конгресса США
http://bit.ly/big-data-mk-2011
4. MapReduce история вопроса
● 2004: Опубликована работа “MapReduce: Simplified Data
Processing on Large Clusters” (Джеффри Дин и Санжай
Гемават).
● 2005: Начат проект Hadoop (Дуг Каттинг и Майк
Кафарелла).
● 2005 - 2006: Hadoop развивался усилиями двух
разработчиков — Каттинга и Майка Кафареллы в режиме
частичной занятости, сначала в рамках проекта Nutch,
затем — проекта Lucene.
● 2006: Yahoo пригласила Каттинга возглавить команду
разработки (выделение Hadoop в отдельный проект).
● 2008: Yahoo запустила кластер на 10K ядер,
управляемую средствами Hadoop.
http://ru.wikipedia.org/wiki/Hadoop
6. Apache Hadoop
● Java based open source framework.
● Common (утилиты), HDFS, MapReduce.
● http://en.wikipedia.org/wiki/Hadoop
7. 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/
9. Cascading с разных точек зрения
● Бизнеса: управление бизнес процессами для оркестрации
потоков выполнения (аля BPM / BPEL).
● Системного интегратора: система интеграции гетерогенных
источников данных и платформ вычисления.
● Data scientist: направленный ациклический граф
подчиняющийся закону Амдала*.
● Data architect: физический план управления большими
потоками данных.
● Архитектора: язык паттернов, похожий на план водопровода
или проектирование принципиальных схем устройств.
● Разработчика: связывающий API для скалы, кложура,
пайтона, руби, джава.
● Админа: JAR файл (лежит в Maven Repo).
http://www.slideshare.net/pacoid/cascading-for-the-impatient
10. *для любознательных
Закон Амдала:
В случае, когда задача разделяется на
несколько частей, суммарное время её
выполнения на параллельной системе не
может быть меньше времени выполнения
самого длинного фрагмента.
11. История
● Крис Венсель (Chris Wensel).
● Начал разработку Cascading’а в начале
2008 (запись в блоге).
● Основал компанию Concurrent в
середине 2008.
● В 2011 Concurrent получила инвестиции
для дальнейшего развития Cascading’а
● 2008 20 KLOC.
● 2013 106 KLOC.
● 3 контрибьютера.
12. Общие сведения
● Open source https://github.
com/cwensel/cascading
● Лицензия Apache License 2.0.
● Коммерческая поддержка http://www.
concurrentinc.com/support/
15. Основные понятия
Набор разных pipe’ов позволяет
производить над данными следующие
операции*:
●
●
●
●
Split
Merge
Group by
Join
* Для каждого кортежа или для группы кортежей.
18. Основные понятия: tuples
● Аналог: строка в таблице базы данных.
● В каскадинге для кортежей есть
специальный тип: cascading.tuple.
Tuple
● Внутри это List<Object> elements;
20. Основные понятия: fields
● Определяет имя элемента кортежа.
● В каскадинге для полей есть специальный
тип: cascading.tuple.Fields
● Поле может быть строкой, целым
числом или специальным значением из
предопределённого множества.
● Специальные значения нужны для
выполнения шаблонных операций.
21. Основные понятия: pipes
● Это узел в котором может что-то
происходить с кортежами (в
документации нет чёткого определения
pipe’а).
● В каскадинге для pipe’ов есть
специальный тип: cascading.pipe.
Pipe
22. Основные понятия: pipes
Типы pipe’ов:
● Класс Pipe: нужен для создания и
именования пайпа (планировщик использует
имена для соединения с tap’ами).
● Подкласс SubAssembly: повторное
использование сборок pipe’ов.
● Шесть основных подклассов: Each,
Merge, GroupBy, Every, CoGroup,
HashJoin.
23. Основные понятия: pipes
● Each: операции основанные на содержимом
кортежа: анализ, трансформация или фильтрация.
● Merge: слияние нескольких потоков данных в один.
● GroupBy: группирует кортежи потока данных по
общим значениям указанных полей.
● Every: оперирует сгруппированными кортежами.
● CoGroup: выполняет операцию join на нескольких
входных потоках данных или на самом себе
(группирует).
● HashJoin: выполняет операцию “join” на нескольких
входных потоках данных или на самом себе (не
группирует).
25. Основные понятия: pipe assembly
Простая последовательность pipe’ов без
разветвлений и слияний.
26. Основные понятия: tuple stream
Последовательность кортежей проходящая
через ветвь pipe’ов или сборку (assembly).
27. Паттерны работы с потоками
● Split разделение данных из одного потока
на несколько.
● Merge слияние нескольких потоков в
один.
● Join Комбинирование данных из
нескольких потоков с разными полями по
общим полям (аналог SQL join).
31. Основные понятия: flow
● Важный момент: flow -- это информация
о том где брать данные, как
обрабатывать и куда складывать
результат.
● Где и куда должны существовать в
момент выполнения.
● После создания, flow нужно выполнить в
одной из платформ.
● Flow можно соединять в цепочки.
● Можно запускать локально или в Hadoop.
33. Основные понятия: операции
● Function: ожидает на вход один кортеж,
возвращает ноль или больше кортежей, примеры:
parsers, marshallers.
● Filter: ожидает на вход один кортеж, возвращает
true или false (выбрасываем кортеж из потока или
нет).
● Aggregator: ожидает на вход группу кортежей,
возвращает ноль или несколько кортежей,
примеры: Average, Count, First, Last, Max,
Min, Sum.
● Buffer: ожидает на вход группу кортежей,
возвращает ноль или несколько кортежей,
получает всю группу кортежей сразу.
35. Тестирование
● Юнит-тесты для функций, фильтров,
агрегаторов и буфферов (cascading.
CascadingTestCase).
● cascading.operation.Debug -фильтр, печатает кортеж в stdout или
stderr.
● Запуск в локальном режиме.
● Пишите логи (в коде своих операций).
36. Debug
● В локальном режиме:
https://github.com/ScaleUnlimited/cascading.utils
final FlowRunner runner = new FlowRunner();
runner.addFlow(flow);
runner.complete();
● One node Hadoop cluster:
export HADOOP_OPTS = "-agentlib:
jdwp=transport=dt_socket,server=y,suspend=y,
address=8788"
hadoop jar your-casc.jar <параметры>
39. Особенности работы с данными
● Файлы: лучше мало больших, чем
много маленьких.
● S3 + много маленьких -> s3distcp.
40. Ещё один шаг вперёд
● Cascading -- это высокоуровневый API.
● Меньше кода и проще проектировать
сложную обработку данных (по
сравнению с обычным MapReduce).
● Следующий логичный шаг -- DSL.
● Выразительный.
● Гибкий.
● Правильная идеология.
44. Datalog
● Декларативный логический язык
программирования.
● Синтаксически является подмножеством
Пролога.
● Часто используется как язык запросов к
дедуктивным базам данных (более
выразительный чем SQL).
45. История
● Натан Марц (Nathan Marz).
● Первый коммит в гитхабе весной 2010
(пруф).
●
●
●
●
Прародитель
2010 1 KLOC.
2013 9 KLOC.
29 контрибьютеров.
46. Общие сведения
● Open source https://github.
com/nathanmarz/cascalog
● Лицензия Apache License 2.0.
● Коммерческая поддержка не нашёл.
53. Проблемы cascalog’а
● Высокий порог вхождения (clojure).
● Мало документации.
● В Украине практически нет людей с
опытом использования сабжа.
● Нет формальной грамматики
описывающей язык запросов.
54. Сообщество
● Гугл группа cascalog’а.
● Гугл-группа cascading’а.
● Как ни странно на stackoverflow.com
практически ничего нет о сабжах.
● Митапы в Сан-Франциско и Лондоне.