SlideShare a Scribd company logo
Hadoop -> Cascading -> Cascalog
обо мне

● Андрей Панфилов
● Java-разработчик
● Интересуюсь: BigData, ФП
проблематика

$600
стоимость диска на который поместится вся
музыка в мире
http://bit.ly/big-data-mk-2011
проблематика

5 миллиардов
мобильников использовалось в 2010
http://bit.ly/big-data-mk-2011
проблематика

30 миллиардов
расшариваний всякой фигни в Facebook
каждый месяц в 2011-м году
http://bit.ly/big-data-mk-2011
проблематика

40%

прогнозируемого роста данных

во всём мире в год

VS

5%
(2011 год)

роста ИТ-расходов во всём мире
http://bit.ly/big-data-mk-2011
проблематика

235 терабайт
данных собрано Библиотекой Конгресса
США в апреле 2011-го
http://bit.ly/big-data-mk-2011
проблематика

15 из 17
секторов экономики в США имеют больше
данных, хранящихся на компанию, чем
Библиотека Конгресса США
http://bit.ly/big-data-mk-2011
MapReduce история вопроса

Опубликована работа

“MapReduce: Simplified Data
Processing on Large Clusters”
Джеффри Дин и Санжай Гемават,

2004
MapReduce история вопроса

Описывает как Google разделяет,
обрабатывает и агрегирует их набор данных
огромных размеров.
MapReduce история вопроса

Начат проект Hadoop*
Дуг Каттинг и Майк Кафарелла

2005

* назван в честь игрушечного слонёнка ребёнка Дуга
MapReduce история вопроса
В течение 2005 — 2006 годов Hadoop
развивался усилиями двух разработчиков —
Каттинга и Майка Кафареллы в режиме
частичной занятости, сначала в рамках
проекта Nutch, затем — проекта Lucene.

http://ru.wikipedia.org/wiki/Hadoop
MapReduce история вопроса
В январе 2006 г. Yahoo пригласила Каттинга
возглавить команду разработки
инфраструктуры распределённых
вычислений (выделение Hadoop в
отдельный проект). В феврале 2008 г.
Yahoo запустила кластерную поисковую
машину на 10 тыс. процессорных ядер,
управляемую средствами Hadoop.
Map & Reduce

Map x2 to (1 2 3 4 5) --> (2 4 6 8 10)

http://www.byzantinereality.com/2009/2/Thoughts-on-MapReduce
Map & Reduce

Reduce "min" to (2 4 6 8 10) --> (2)

http://www.byzantinereality.com/2009/2/Thoughts-on-MapReduce
Apache Hadoop

● Оупенсорсный фреймворк
● Java
Apache Hadoop

1. Hadoop Common
2. HDFS
3. Hadoop MapReduce
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)
● утилиты
Apache Hadoop

HDFS
● распределённая файловая система
● файлы можно дописывать в конец
● distributed, scalable, reliable portable…
http://en.wikipedia.org/wiki/Hadoop#Hadoop_distributed_file_system
Apache Hadoop

Hadoop MapReduce
● framework на котором пишутся Maps и
Reduces
● движок в котором выполняется ваш код
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/
Cascading
Cascading с разных точек зрения

С точки зрения бизнеса:
● управление бизнес процессами для
оркестрации потоков выполнения (аля
BPM / BPEL)
http://www.slideshare.net/pacoid/cascading-for-the-impatient
Cascading с разных точек зрения

С точки зрения системного интегратора:
● система интеграции гетерогенных
источников данных и платформ
вычисления
http://www.slideshare.net/pacoid/cascading-for-the-impatient
Cascading с разных точек зрения

С точки зрения data scientist:
● направленный ациклический граф для
которого можно применить закон Амдала*
http://www.slideshare.net/pacoid/cascading-for-the-impatient
*для любознательных
Закон Амдала:
В случае, когда задача разделяется на
несколько частей, суммарное время её
выполнения на параллельной системе
не может быть меньше времени
выполнения
самого
длинного
фрагмента.
Cascading с разных точек зрения

С точки зрения data архитектора:
● физический план управления большими
потоками данных
http://www.slideshare.net/pacoid/cascading-for-the-impatient
Cascading с разных точек зрения

С точки зрения архитектора ПО:
● язык паттернов, похожий на план
водопровода или проектирование
принципиальных схем устройств
http://www.slideshare.net/pacoid/cascading-for-the-impatient
Cascading с разных точек зрения

С точки зрения разработчика:
● связывающий API для скалы, кложура,
пайтона, руби, джава
http://www.slideshare.net/pacoid/cascading-for-the-impatient
Cascading с разных точек зрения

С точки зрения админа/Ops’а:
● JAR файл
● которому можно передать параметры
через командную строку
● валяется в Maven Repo
http://www.slideshare.net/pacoid/cascading-for-the-impatient
история
● Крис Венсель (Chris Wensel)
● Начал разработку Cascading’а в начале
2008 (запись в блоге)
● Основал компанию Concurrent в
середине 2008
● В 2011 Concurrent получила инвестиции
для дальнейшего развития Cascading’а
● 2008 20 KLOC
● 2013 106 KLOC
● 3 контрибьютера
Yep, it is open source!

https://github.com/cwensel/cascading
лицензия

Apache License 2.0
коммерческая поддержка

Есть!
http://www.concurrentinc.com/support/
аналоги каскадинга

●
●
●
●

Oozie
Crunch
Apache Falcon
Cloudera Morphlines
основные понятия

● Pipes / трубы (потоки данных)
● Filters / фильтры (операции над данными)
основные понятия
Набор разных труб (pipes) позволяет*:

●
●
●
●

разделять данные
мёрджить данные
группировать
джойнить
* Для каждого кортежа или для группы
кортежей.
основные понятия: tuples
Cascading оперирует кортежами

(“the man sat”,
25)
(“hello dolly”,
42)
(“say hello”,
1)
(“the woman sat”, 10)
основные понятия: tuples

[“sentence”, “value”]
(“the man sat”,
25)
(“hello dolly”,
42)
(“say hello”,
1)
(“the woman sat”, 10)
основные понятия: tuples

● Аналог тапла -- это строка в таблице базы
данных.
● В каскадинге для кортежей есть
специальный тип: cascading.tuple.
Tuple
● Внутри это List<Object> elements;
основные понятия: fields

[“sentence”, “value”]
(“the man sat”,
25)
(“hello dolly”,
42)
(“say hello”,
1)
(“the woman sat”, 10)
основные понятия: fields
● Определяет имя элемента кортежа.
● В каскадинге для полей есть специальный
тип: cascading.tuple.Fields
● Поле может быть строкой, целым
числом или специальным значением из
предопределённого множества.
● Специальные значения нужны для
выполнения шаблонных операций.
основные понятия: fields

Специальные значения:
ALL, RESULTS, REPLACE, SWAP,
ARGS, GROUP, VALUES,
UNKNOWN, NONE
основные понятия: pipes

● Это узел в котором может что-то
происходить с кортежами (в документации нет
чёткого определения пайпа).
● В каскадинге для пайпов есть
специальный тип: cascading.pipe.
Pipe
основные понятия: pipes
Типы пайпов:
● Класс Pipe -- нужно для создания и
именования пайпа (планировщик использует
имена для соединения с тапами).
● Подкласс SubAssembly -- повторное
использование сборок пайпов.
● Шесть основных подклассов: Each,
Merge, GroupBy, Every, CoGroup,
HashJoin.
основные понятия: pipes
Each:
● операции основанные на содержимом
кортежа: анализ, трансформация или
фильтрация
● оперирует конкретным кортежем из потока
● применяет функции или фильтры такие как
условная замена определённых значений
полей, удаление кортежей значение полей
которых выходит за заданные пределы…
● откалывание отдельной ветки потока данных
● удаление ненужных полей из потока данных
основные понятия: pipes

Merge:
● слияние нескольких потоков данных в один
● принимает несколько потоков с идентичными
полями
● отдаёт один поток с кортежами из входных
потоков в произвольном порядке
основные понятия: pipes
GroupBy:
● группирует кортежи потока данных по общим
значениям указанных полей
● если на вход подать несколько потоков, то
перед группировкой происходит слияние
(поля потоков должны быть одинаковые)
● обычно группировку делают перед
операциями “aggregator” или “buffer”
● по сути сортирует все кортежи в группы (в
группах кортежи в произвольном порядке)
основные понятия: pipes

Every:
● оперирует сгруппированными кортежами
● используется для применения операций
“aggregator” или “buffer”
● используется только после GroupBy или
CoGroup
● можно несколько операций “aggregator”
ставить подряд (для “buffer” не работает)
основные понятия: pipes
CoGroup:
● выполняет операцию “join” на нескольких
входных потоках данных или на самом себе
● похож на SQL join (тоже может быть inner,
outer, left, или right)
● отдаёт поток данных сгруппированный по
указанным полям
● выходной поток данных содержит все поля
входных потоков
● входные потоки не могут содержать
одинаковые имена полей
основные понятия: pipes
HashJoin:
● выполняет операцию “join” на нескольких
входных потоках данных или на самом себе
● похож на SQL join (тоже может быть inner,
outer, left, или right)
● отдаёт поток данных в произвольном прядке
● если не нужна группировка, быстрее чем
CoGroup (при условии нескольких маленьких
входных потоков и не более одного большого)
основные понятия: пайпы (трубы)
основные понятия: pipe assembly
Простая последовательность пайпов без
разветвлений и слияний.
основные понятия: tuple stream
Последовательность кортежей проходящая
через ветвь пайпов или сборку (assembly).
паттерны работы с потоками

● Split
● Merge
● Join
паттерны работы с потоками

Split:
● Разделение данных из одного
потока на несколько потоков.
● К одному Pipe’у присоединяется
несколько последующих Pipe’ов.
паттерны работы с потоками

Merge:
● Слияние нескольких потоков
данных в один.
● Несколько Pipe’ов
присоединяются к Pipe’у типа
Merge или GroupBy.
паттерны работы с потоками

Join:
● Комбинирование данных из
нескольких потоков с разными
полями по общим полям (аналог
SQL join).
● Несколько Pipe’ов
присоединяются к Pipe’у типа
HashJoin или CoGroup.
основные понятия: tap

“кран” -- источник данных
основные понятия: sink

сток -- пункт назначения данных
основные понятия: флоу

flow = pipe assemblies +
source taps +
sink taps
(краны + трубы + стоки)
основные понятия: флоу
● Важный момент: флоу -- это
информация о том где брать данные, как
обрабатывать и куда складывать
результат.
● Где и куда должны существовать в
момент выполнения.
● После создания, флоу нужно выполнить
в одной из платформ.
основные понятия: флоу

Платформы:
● Hadoop
● Local
основные понятия: флоу

Флоу можно соединять в
цепочки.
операции

аля юникс команды:

sed, grep, sort, uniq и awk
основные понятия: фунции
● Ожидает на вход один кортеж.
● Хороший тон: указать набор
входных и выходных полей.
● Возвращает ноль или больше
кортежей.
● Используется с пайпом Each,
который может следовать после
пайпа любого типа.
основные понятия: фунции

Примеры:
● парсеры
● маршалеры
● преобразователи (одних
полей в другие)
основные понятия: фильтры
● Ожидает на вход один кортеж.
● Возвращает true или false
(выбрасываем кортеж из потока
или нет).
● Используется с пайпом Each,
который может следовать после
пайпа любого типа.
основные понятия: агрегаторы
● Ожидает на вход группу кортежей
(вывод пайпа GroupBy или
CoGroup).
● Возвращает ноль или несколько
кортежей для каждой входной
группы кортежей.
● Примеры: Average, Count, First,
Last, Max, Min, Sum
основные понятия: буфферы
● Ожидает на вход группу кортежей
(вывод пайпа GroupBy или
CoGroup).
● Возвращает ноль или несколько
кортежей для каждой входной группы
кортежей.
● Получает всю группу кортежей сразу
(доступ через итератор).
● Удобно для вставки кортежа в
группу.
как происходит
разделение на map и reduce
Hadoop MapReduce Job Planner
тестирование
● Юнит-тесты для функций, фильтров,
агрегаторов и буфферов (cascading.
CascadingTestCase).
● cascading.operation.Debug -фильтр, печатает кортеж в stdout или
stderr.
● запуск в локальном режиме.
● пишите логи (в коде своих операций)
дебаг
● в локальном режиме:
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 <параметры>
генерация диаграмм
деплоймент

Всё точно так же как если
бы вы писали Hadoop
MapReduce Job.
особенности

● файлы: лучше мало больших, чем
много маленьких.
● S3 + много маленьких -> s3distcp.
ещё один шаг вперёд
● Cascading -- это высокоуровневый API
● Меньше кода и проще проектировать
сложную обработку данных (по
сравнению с обычным MapReduce)
● Следующий логичный шаг -- DSL
● Выразительный
● Гибкий
● Правильная идеология
тааадааам!

cascalog
раскрываем тайну названия

cascalog
раскрываем тайну названия

cascalog
datalog

● Декларативный логический язык
программирования.
● Синтаксически является подмножеством
Пролога.
● Часто используется как язык запросов к
дедуктивным базам данных (более
выразительный чем SQL).
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 - запрос “найти всех людей у кого в
предках Авраам”, результат: Исаак и Иаков.
история

● Натан Марц (Nathan Marz)
● Первый коммит в гитхабе весной 2010
(пруф)

●
●
●
●

Прародитель
2010 1 KLOC
2013 9 KLOC
29 контрибьютеров
Yep, it is open source!

https://github.com/nathanmarz/cascalog
лицензия

Apache License 2.0
коммерческая поддержка

Не нашёл.
пример
(def age
[
;; [person age]
["alice" 28]
["bob" 33]
["gary" 28]
["john" 27]
["luanne" 36]
])
пример

(?<- ;; определение и выполнение запроса
(stdout) ;; куда попадает вывод
[?person ?a2] ;; результат (переменные)
(age ?person ?age) ;; предикат - генератор
(< ?age 30) ;; предикат - фильтр
(* 2 ?age :> ?a2)) ;; предикат - операция
REPL session

Несколько примеров в консоле.
пример: word count
пример: word count
пример: word count
пример: word count
проблемы каскалога

● Высокий порог вхождения (clojure).
● Мало документации.
● В Украине практически нет людей с
опытом использования сабжа.
● Нет формальной грамматики
описывающей язык запросов.
сообщество

● Гугл группа каскалога.
● Гугл-группа каскадинга.
● Как ни странно на stackoverflow.com
практически ничего нет о сабжах.
● Митапы в Сан-Франциско и Лондоне.
кто использует cascalog
●
●
●
●
●
●
●
●

Twitter
Amazon продукты MultiTool и LogAnalyzer
Etsy рынок для хенмейда
FlightCaster предсказание задержек
рейсов
Ion Flux биоинформатика
RapLeaf рекомендательные системы
Razorfish рекламное агенство
The Climate Corporation страхование от
неурожая
развитие

● Каскалог 2.0 не будет привязан к
каскадингу.
● Storm -- одна из возможных платформ.
когда использовать

● Данных должно быть ОЧЕНЬ много (не
помещаются в память).
● Исторические данные (логи).
● Данные всё время добавляются.
документация

● Отличный User Guide по каскадингу.
● Замечательный туториал по каскадингу.
● Вики по каскалогу в гитхабе.
конец

Вопросы!
andrew@dzer6.com

More Related Content

PDF
Hadoop > cascading -> cascalog (short version)
PDF
Hadoop > cascading -> cascalog (very short)
PPTX
Технология Semantic web как инструмент интеграции данных
PDF
О.В. Сухорослов "Разбор ДЗ №3,4"
PDF
RDSDataSource: YapDatabase
PDF
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
PDF
Лекция 10. Apache Mahout
PDF
Technopolis.NoSQL 03 Haystack
Hadoop > cascading -> cascalog (short version)
Hadoop > cascading -> cascalog (very short)
Технология Semantic web как инструмент интеграции данных
О.В. Сухорослов "Разбор ДЗ №3,4"
RDSDataSource: YapDatabase
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Лекция 10. Apache Mahout
Technopolis.NoSQL 03 Haystack

What's hot (14)

PPT
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
PDF
Лекция 2. Основы Hadoop
PDF
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
PDF
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
PDF
Technopolis.NoSQL 01
PDF
Презентация Neo4j на ADD-3
PDF
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
PDF
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
PPT
Использование Sedna в WEB
PDF
Очистка и интеграция открытых данных из разнородных источников
PDF
Обзор перспективных баз данных для highload / Юрий Насретдинов
PPTX
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
PDF
Aлександр Зайцев, LifeStreet
PDF
Active Record for CoreData
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
Лекция 2. Основы Hadoop
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
Technopolis.NoSQL 01
Презентация Neo4j на ADD-3
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Использование Sedna в WEB
Очистка и интеграция открытых данных из разнородных источников
Обзор перспективных баз данных для highload / Юрий Насретдинов
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Aлександр Зайцев, LifeStreet
Active Record for CoreData
Ad

Viewers also liked (20)

PDF
Cloud services From Calsoftlabs
PPTX
Signals1
PDF
Dropwizard
PPTX
φυλλομετριτες
PPTX
ηλεκτρονική παρενόχληση
PPTX
The Digital Blind Spot
PPTX
ηλεκτρονική παρενόχληση
PDF
Памятники от простых до элитных г.Оренбург. ..
TXT
Wvdial
PDF
connectionpool 事業概要書
PPTX
Auth and association
PPTX
Tv print digital differences april 2013
PPT
01.07 Apresentação evolution AP online
PPTX
Optimising Video Creative in a Digital World
PPTX
Herb as health food
PPTX
IEEE WLAN standards
PPTX
Nat
PPT
Инновационные проекты АО "КМГ"
PPTX
без манчестера
PPT
Cloud services From Calsoftlabs
Signals1
Dropwizard
φυλλομετριτες
ηλεκτρονική παρενόχληση
The Digital Blind Spot
ηλεκτρονική παρενόχληση
Памятники от простых до элитных г.Оренбург. ..
Wvdial
connectionpool 事業概要書
Auth and association
Tv print digital differences april 2013
01.07 Apresentação evolution AP online
Optimising Video Creative in a Digital World
Herb as health food
IEEE WLAN standards
Nat
Инновационные проекты АО "КМГ"
без манчестера
Ad

Similar to Hadoop -> Cascading -> Cascalog (20)

PPTX
DBD lection 4. Big Data, NoSQL. In Russian.
PDF
Tarantool_qs
PDF
Anton Shloma. Custom tables
PDF
Anton Shloma. Custom tables
PPTX
Анализируем данные с Clickhouse
PPTX
Что такое Postgresql (Максим Богук)
PDF
Максим Богук. Postgres-XC
PDF
Инфраструктура Big data - от источников до быстрых витрин - версия для МИСиС
PDF
Машины баз данных: концентрированное обозрение
PDF
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
PPTX
Организация базы знаний проектной деятельности предприятия
PDF
Anton Tsitou "Cycle ORM and Graphs"
PPTX
Паттерны проектирования источников данных
PPTX
паттерны проектирования источников данных
PDF
Сергей Чистович "Подходы к кешированию на UGC-сервисе"
PPTX
Druid - Interactive Analytics At Scale
PPTX
2014.12.23 Александр Андреев, Parallels
PDF
Технологии и продукты Oracle для обработки и анализа Больших Данных
PDF
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилище
PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
DBD lection 4. Big Data, NoSQL. In Russian.
Tarantool_qs
Anton Shloma. Custom tables
Anton Shloma. Custom tables
Анализируем данные с Clickhouse
Что такое Postgresql (Максим Богук)
Максим Богук. Postgres-XC
Инфраструктура Big data - от источников до быстрых витрин - версия для МИСиС
Машины баз данных: концентрированное обозрение
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Организация базы знаний проектной деятельности предприятия
Anton Tsitou "Cycle ORM and Graphs"
Паттерны проектирования источников данных
паттерны проектирования источников данных
Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Druid - Interactive Analytics At Scale
2014.12.23 Александр Андреев, Parallels
Технологии и продукты Oracle для обработки и анализа Больших Данных
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилище
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...

Hadoop -> Cascading -> Cascalog

  • 1. Hadoop -> Cascading -> Cascalog
  • 2. обо мне ● Андрей Панфилов ● Java-разработчик ● Интересуюсь: BigData, ФП
  • 3. проблематика $600 стоимость диска на который поместится вся музыка в мире http://bit.ly/big-data-mk-2011
  • 5. проблематика 30 миллиардов расшариваний всякой фигни в Facebook каждый месяц в 2011-м году http://bit.ly/big-data-mk-2011
  • 6. проблематика 40% прогнозируемого роста данных во всём мире в год VS 5% (2011 год) роста ИТ-расходов во всём мире http://bit.ly/big-data-mk-2011
  • 7. проблематика 235 терабайт данных собрано Библиотекой Конгресса США в апреле 2011-го http://bit.ly/big-data-mk-2011
  • 8. проблематика 15 из 17 секторов экономики в США имеют больше данных, хранящихся на компанию, чем Библиотека Конгресса США http://bit.ly/big-data-mk-2011
  • 9. MapReduce история вопроса Опубликована работа “MapReduce: Simplified Data Processing on Large Clusters” Джеффри Дин и Санжай Гемават, 2004
  • 10. MapReduce история вопроса Описывает как Google разделяет, обрабатывает и агрегирует их набор данных огромных размеров.
  • 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.
  • 14. Map & Reduce Map x2 to (1 2 3 4 5) --> (2 4 6 8 10) http://www.byzantinereality.com/2009/2/Thoughts-on-MapReduce
  • 15. Map & Reduce Reduce "min" to (2 4 6 8 10) --> (2) http://www.byzantinereality.com/2009/2/Thoughts-on-MapReduce
  • 16. Apache Hadoop ● Оупенсорсный фреймворк ● Java
  • 17. Apache Hadoop 1. Hadoop Common 2. HDFS 3. Hadoop MapReduce
  • 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
  • 20. Apache Hadoop Hadoop MapReduce ● framework на котором пишутся Maps и Reduces ● движок в котором выполняется ваш код
  • 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
  • 36. основные понятия ● Pipes / трубы (потоки данных) ● Filters / фильтры (операции над данными)
  • 37. основные понятия Набор разных труб (pipes) позволяет*: ● ● ● ● разделять данные мёрджить данные группировать джойнить * Для каждого кортежа или для группы кортежей.
  • 38. основные понятия: tuples Cascading оперирует кортежами (“the man sat”, 25) (“hello dolly”, 42) (“say hello”, 1) (“the woman sat”, 10)
  • 39. основные понятия: tuples [“sentence”, “value”] (“the man sat”, 25) (“hello dolly”, 42) (“say hello”, 1) (“the woman sat”, 10)
  • 40. основные понятия: tuples ● Аналог тапла -- это строка в таблице базы данных. ● В каскадинге для кортежей есть специальный тип: cascading.tuple. Tuple ● Внутри это List<Object> elements;
  • 41. основные понятия: fields [“sentence”, “value”] (“the man sat”, 25) (“hello dolly”, 42) (“say hello”, 1) (“the woman sat”, 10)
  • 42. основные понятия: fields ● Определяет имя элемента кортежа. ● В каскадинге для полей есть специальный тип: cascading.tuple.Fields ● Поле может быть строкой, целым числом или специальным значением из предопределённого множества. ● Специальные значения нужны для выполнения шаблонных операций.
  • 43. основные понятия: fields Специальные значения: ALL, RESULTS, REPLACE, SWAP, ARGS, GROUP, VALUES, UNKNOWN, NONE
  • 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 (при условии нескольких маленьких входных потоков и не более одного большого)
  • 53. основные понятия: pipe assembly Простая последовательность пайпов без разветвлений и слияний.
  • 54. основные понятия: tuple stream Последовательность кортежей проходящая через ветвь пайпов или сборку (assembly).
  • 55. паттерны работы с потоками ● Split ● Merge ● Join
  • 56. паттерны работы с потоками Split: ● Разделение данных из одного потока на несколько потоков. ● К одному Pipe’у присоединяется несколько последующих Pipe’ов.
  • 57. паттерны работы с потоками Merge: ● Слияние нескольких потоков данных в один. ● Несколько Pipe’ов присоединяются к Pipe’у типа Merge или GroupBy.
  • 58. паттерны работы с потоками Join: ● Комбинирование данных из нескольких потоков с разными полями по общим полям (аналог SQL join). ● Несколько Pipe’ов присоединяются к Pipe’у типа HashJoin или CoGroup.
  • 59. основные понятия: tap “кран” -- источник данных
  • 60. основные понятия: sink сток -- пункт назначения данных
  • 61. основные понятия: флоу flow = pipe assemblies + source taps + sink taps (краны + трубы + стоки)
  • 62. основные понятия: флоу ● Важный момент: флоу -- это информация о том где брать данные, как обрабатывать и куда складывать результат. ● Где и куда должны существовать в момент выполнения. ● После создания, флоу нужно выполнить в одной из платформ.
  • 64. основные понятия: флоу Флоу можно соединять в цепочки.
  • 66. основные понятия: фунции ● Ожидает на вход один кортеж. ● Хороший тон: указать набор входных и выходных полей. ● Возвращает ноль или больше кортежей. ● Используется с пайпом Each, который может следовать после пайпа любого типа.
  • 67. основные понятия: фунции Примеры: ● парсеры ● маршалеры ● преобразователи (одних полей в другие)
  • 68. основные понятия: фильтры ● Ожидает на вход один кортеж. ● Возвращает true или false (выбрасываем кортеж из потока или нет). ● Используется с пайпом Each, который может следовать после пайпа любого типа.
  • 69. основные понятия: агрегаторы ● Ожидает на вход группу кортежей (вывод пайпа GroupBy или CoGroup). ● Возвращает ноль или несколько кортежей для каждой входной группы кортежей. ● Примеры: Average, Count, First, Last, Max, Min, Sum
  • 70. основные понятия: буфферы ● Ожидает на вход группу кортежей (вывод пайпа GroupBy или CoGroup). ● Возвращает ноль или несколько кортежей для каждой входной группы кортежей. ● Получает всю группу кортежей сразу (доступ через итератор). ● Удобно для вставки кортежа в группу.
  • 71. как происходит разделение на map и reduce Hadoop MapReduce Job Planner
  • 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 <параметры>
  • 75. деплоймент Всё точно так же как если бы вы писали Hadoop MapReduce Job.
  • 76. особенности ● файлы: лучше мало больших, чем много маленьких. ● S3 + много маленьких -> s3distcp.
  • 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
  • 87. пример (def age [ ;; [person age] ["alice" 28] ["bob" 33] ["gary" 28] ["john" 27] ["luanne" 36] ])
  • 88. пример (?<- ;; определение и выполнение запроса (stdout) ;; куда попадает вывод [?person ?a2] ;; результат (переменные) (age ?person ?age) ;; предикат - генератор (< ?age 30) ;; предикат - фильтр (* 2 ?age :> ?a2)) ;; предикат - операция
  • 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 по каскадингу. ● Замечательный туториал по каскадингу. ● Вики по каскалогу в гитхабе.