SlideShare a Scribd company logo
1 of 75
Download to read offline
Hadoop -> Cascading -> Cascalog
Обо мне

● Андрей Панфилов
● Java-разработчик
● Интересуюсь: BigData, ФП
Проблематика
● $600 стоимость диска на который поместится вся музыка
в мире
● 5B мобильников использовалось в 2010
● 30B расшариваний всякой фигни в Facebook каждый
месяц в 2011-м году
● 40% прогнозируемого роста данных во всём мире в год
VS 5% роста ИТ-расходов во всём мире (2011 год)
● 235 терабайт данных собрано Библиотекой Конгресса
США в апреле 2011-го
● 15 из 17 секторов экономики в США имеют больше
данных, хранящихся на компанию, чем Библиотека
Конгресса США
http://bit.ly/big-data-mk-2011
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
Map & Reduce

● Map x2 to (1 2 3 4 5) --> (2 4 6 8 10)
● Reduce "min" to (2 4 6 8 10) --> (2)

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

● Java based open source framework
● Common (утилиты), HDFS, MapReduce
● http://en.wikipedia.org/wiki/Hadoop
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)
● системного интегратора: система интеграции гетерогенных
источников данных и платформ вычисления
● data scientist: направленный ациклический граф
подчиняющийся закону Амдала*
● data architect: физический план управления большими
потоками данных
● архитектора: язык паттернов, похожий на план водопровода
или проектирование принципиальных схем устройств
● разработчика: связывающий API для скалы, кложура, пайтона,
руби, джава
● админа: 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 контрибьютера
Общие сведения

● open source https://github.
com/cwensel/cascading
● лицензия Apache License 2.0
● коммерческая поддержка http://www.
concurrentinc.com/support/
Аналоги

●
●
●
●

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

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

●
●
●
●

split
merge
group by
join
* Для каждого кортежа или для группы кортежей.
Основные понятия: 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

● Это узел в котором может что-то
происходить с кортежами (в документации нет
чёткого определения pipe’а).
● В каскадинге для pipe’ов есть
специальный тип: cascading.pipe.
Pipe
Основные понятия: pipes
Типы pipe’ов:
● Класс Pipe: нужен для создания и
именования пайпа (планировщик использует
имена для соединения с tap’ами).
● Подкласс SubAssembly: повторное
использование сборок pipe’ов.
● Шесть основных подклассов: 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 (при условии нескольких маленьких
входных потоков и не более одного большого)
Основные понятия: pipes
Основные понятия: pipe assembly
Простая последовательность pipe’ов без
разветвлений и слияний.
Основные понятия: tuple stream
Последовательность кортежей проходящая
через ветвь pipe’ов или сборку (assembly).
Паттерны работы с потоками

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

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

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

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

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

“сток” -- пункт назначения данных
Основные понятия: flow

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

Платформы:
● Hadoop
● Local
Операции

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

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

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

Всё точно так же как если
бы вы писали 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 контрибьютеров
Общие сведения

● 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
Проблемы cascalog’а

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

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

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

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

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

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

More Related Content

What's hot

Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхNikolay Samokhvalov
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksRoman Pavlushko
 
Расширения для PostgreSQL
Расширения для PostgreSQLРасширения для PostgreSQL
Расширения для PostgreSQLAnastasia Lubennikova
 
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...Ontico
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012Roman Pavlushko
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхVasil Remeniuk
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?tfmailru
 
Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Ontico
 
ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop Vladimir Klimontovich
 
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++Антон Шестаков
 
Cостав дистрибутва Hortonworks data platform 2.3
Cостав дистрибутва Hortonworks data platform 2.3Cостав дистрибутва Hortonworks data platform 2.3
Cостав дистрибутва Hortonworks data platform 2.3Евгений Плакса
 
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
Долгожданный релиз pg_pathman 1.0 / Александр Коротков,  Дмитрий Иванов (Post...Долгожданный релиз pg_pathman 1.0 / Александр Коротков,  Дмитрий Иванов (Post...
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...Ontico
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Ontico
 
Hadoop presentation
Hadoop presentationHadoop presentation
Hadoop presentationVlad Orlov
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLПеревод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLDmitry Kremer
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceTechnopark
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Mail.ru Group
 

What's hot (20)

Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
 
Расширения для PostgreSQL
Расширения для PostgreSQLРасширения для PostgreSQL
Расширения для PostgreSQL
 
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событиях
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
 
Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop
 
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
 
Cостав дистрибутва Hortonworks data platform 2.3
Cостав дистрибутва Hortonworks data platform 2.3Cостав дистрибутва Hortonworks data platform 2.3
Cостав дистрибутва Hortonworks data platform 2.3
 
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
Долгожданный релиз pg_pathman 1.0 / Александр Коротков,  Дмитрий Иванов (Post...Долгожданный релиз pg_pathman 1.0 / Александр Коротков,  Дмитрий Иванов (Post...
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
 
Tarantool_qs
 Tarantool_qs Tarantool_qs
Tarantool_qs
 
Hadoop presentation
Hadoop presentationHadoop presentation
Hadoop presentation
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLПеревод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQL
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
 

Similar to Hadoop > cascading -> cascalog (short version)

Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XCPostgreSQL-Consulting
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6Nikolay Samokhvalov
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинMachine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинIT61
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016Alex Chistyakov
 
DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.mikhaelsmirnov
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) АксеновAlex Chistyakov
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Fwdays
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Ontico
 
Знакомство с In-Memory Data Grid
Знакомство с In-Memory Data GridЗнакомство с In-Memory Data Grid
Знакомство с In-Memory Data GridMikhail Shcherbakov
 
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данныхSiel01
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Ontico
 
Поисковая оптимизация сайта на Drupal 7
Поисковая оптимизация сайта на Drupal 7Поисковая оптимизация сайта на Drupal 7
Поисковая оптимизация сайта на Drupal 7Alexey Kostin
 
Платформа Apache Hadoop
Платформа Apache HadoopПлатформа Apache Hadoop
Платформа Apache HadoopDotNetConf
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsqlAnatoly Popov
 
Работа с Big Data
Работа с Big Data Работа с Big Data
Работа с Big Data MATLAB
 
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс. "YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс. Yandex
 

Similar to Hadoop > cascading -> cascalog (short version) (20)

Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинMachine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий Лапин
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016
 
DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
 
Cassandra db
Cassandra dbCassandra db
Cassandra db
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
 
Знакомство с In-Memory Data Grid
Знакомство с In-Memory Data GridЗнакомство с In-Memory Data Grid
Знакомство с In-Memory Data Grid
 
Multithreading in go
Multithreading in goMultithreading in go
Multithreading in go
 
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
 
Поисковая оптимизация сайта на Drupal 7
Поисковая оптимизация сайта на Drupal 7Поисковая оптимизация сайта на Drupal 7
Поисковая оптимизация сайта на Drupal 7
 
Платформа Apache Hadoop
Платформа Apache HadoopПлатформа Apache Hadoop
Платформа Apache Hadoop
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsql
 
Работа с Big Data
Работа с Big Data Работа с Big Data
Работа с Big Data
 
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс. "YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
 

Hadoop > cascading -> cascalog (short version)

  • 1. Hadoop -> Cascading -> Cascalog
  • 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
  • 5. Map & Reduce ● Map x2 to (1 2 3 4 5) --> (2 4 6 8 10) ● Reduce "min" to (2 4 6 8 10) --> (2) http://www.byzantinereality.com/2009/2/Thoughts-on-MapReduce
  • 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/
  • 14. Основные понятия ● Pipes / трубы (потоки данных) ● Filters / фильтры (операции над данными)
  • 15. Основные понятия Набор разных pipe’ов позволяет производить над данными следующие операции*: ● ● ● ● split merge group by join * Для каждого кортежа или для группы кортежей.
  • 16. Основные понятия: tuples Cascading оперирует кортежами (“the man sat”, 25) (“hello dolly”, 42) (“say hello”, 1) (“the woman sat”, 10)
  • 17. Основные понятия: tuples [“sentence”, “value”] (“the man sat”, 25) (“hello dolly”, 42) (“say hello”, 1) (“the woman sat”, 10)
  • 18. Основные понятия: tuples ● Аналог: строка в таблице базы данных. ● В каскадинге для кортежей есть специальный тип: cascading.tuple. Tuple ● Внутри это List<Object> elements;
  • 19. Основные понятия: fields [“sentence”, “value”] (“the man sat”, 25) (“hello dolly”, 42) (“say hello”, 1) (“the woman sat”, 10)
  • 20. Основные понятия: fields ● Определяет имя элемента кортежа. ● В каскадинге для полей есть специальный тип: cascading.tuple.Fields ● Поле может быть строкой, целым числом или специальным значением из предопределённого множества. ● Специальные значения нужны для выполнения шаблонных операций.
  • 21. Основные понятия: fields Специальные значения: ALL, RESULTS, REPLACE, SWAP, ARGS, GROUP, VALUES, UNKNOWN, NONE
  • 22. Основные понятия: pipes ● Это узел в котором может что-то происходить с кортежами (в документации нет чёткого определения pipe’а). ● В каскадинге для pipe’ов есть специальный тип: cascading.pipe. Pipe
  • 23. Основные понятия: pipes Типы pipe’ов: ● Класс Pipe: нужен для создания и именования пайпа (планировщик использует имена для соединения с tap’ами). ● Подкласс SubAssembly: повторное использование сборок pipe’ов. ● Шесть основных подклассов: Each, Merge, GroupBy, Every, CoGroup, HashJoin.
  • 24. Основные понятия: pipes Each: ● операции основанные на содержимом кортежа: анализ, трансформация или фильтрация ● оперирует конкретным кортежем из потока ● применяет функции или фильтры такие как условная замена определённых значений полей, удаление кортежей значение полей которых выходит за заданные пределы… ● откалывание отдельной ветки потока данных ● удаление ненужных полей из потока данных
  • 25. Основные понятия: pipes Merge: ● слияние нескольких потоков данных в один ● принимает несколько потоков с идентичными полями ● отдаёт один поток с кортежами из входных потоков в произвольном порядке
  • 26. Основные понятия: pipes GroupBy: ● группирует кортежи потока данных по общим значениям указанных полей ● если на вход подать несколько потоков, то перед группировкой происходит слияние (наборы полей потоков должны быть одинаковые) ● обычно группировку делают перед операциями “aggregator” или “buffer” ● по сути сортирует все кортежи в группы (в группах кортежи в произвольном порядке)
  • 27. Основные понятия: pipes Every: ● оперирует сгруппированными кортежами ● используется для применения операций “aggregator” или “buffer” ● используется только после GroupBy или CoGroup ● можно несколько операций “aggregator” ставить подряд (для “buffer” не работает)
  • 28. Основные понятия: pipes CoGroup: ● выполняет операцию join на нескольких входных потоках данных или на самом себе ● похож на SQL join (тоже может быть inner, outer, left, или right) ● отдаёт поток данных сгруппированный по указанным полям ● выходной поток данных содержит все поля входных потоков ● входные потоки не могут содержать одинаковые имена полей
  • 29. Основные понятия: pipes HashJoin: ● выполняет операцию “join” на нескольких входных потоках данных или на самом себе ● похож на SQL join (тоже может быть inner, outer, left, или right) ● отдаёт поток данных в произвольном прядке ● если не нужна группировка, быстрее чем CoGroup (при условии нескольких маленьких входных потоков и не более одного большого)
  • 31. Основные понятия: pipe assembly Простая последовательность pipe’ов без разветвлений и слияний.
  • 32. Основные понятия: tuple stream Последовательность кортежей проходящая через ветвь pipe’ов или сборку (assembly).
  • 33. Паттерны работы с потоками ● Split ● Merge ● Join
  • 34. Паттерны работы с потоками Split: ● Разделение данных из одного потока на несколько потоков. ● К одному Pipe’у присоединяется несколько последующих Pipe’ов.
  • 35. Паттерны работы с потоками Merge: ● Слияние нескольких потоков данных в один. ● Несколько Pipe’ов присоединяются к Pipe’у типа Merge или GroupBy.
  • 36. Паттерны работы с потоками Join: ● Комбинирование данных из нескольких потоков с разными полями по общим полям (аналог SQL join). ● Несколько Pipe’ов присоединяются к Pipe’у типа HashJoin или CoGroup.
  • 37. Основные понятия: tap “кран” -- источник данных
  • 38. Основные понятия: sink “сток” -- пункт назначения данных
  • 39. Основные понятия: flow flow = pipe assemblies + source taps + sink taps (краны + трубы + стоки)
  • 40. Основные понятия: flow ● Важный момент: flow -- это информация о том где брать данные, как обрабатывать и куда складывать результат. ● Где и куда должны существовать в момент выполнения. ● После создания, flow нужно выполнить в одной из платформ. ● Flow можно соединять в цепочки.
  • 43. Основные понятия: function ● Ожидает на вход один кортеж. ● Хороший тон: указать набор входных и выходных полей. ● Возвращает ноль или больше кортежей. ● Используется с пайпом Each, который может следовать после пайпа любого типа.
  • 44. Основные понятия: function Примеры: ● parser ● marshallers ● преобразователи (одних полей в другие)
  • 45. Основные понятия: filter ● Ожидает на вход один кортеж. ● Возвращает true или false (выбрасываем кортеж из потока или нет). ● Используется с pipe’ом Each, который может следовать после pipe’а любого типа.
  • 46. Основные понятия: aggregator ● Ожидает на вход группу кортежей (вывод pipe’а GroupBy или CoGroup). ● Возвращает ноль или несколько кортежей для каждой входной группы кортежей. ● Примеры: Average, Count, First, Last, Max, Min, Sum
  • 47. Основные понятия: buffer ● Ожидает на вход группу кортежей (вывод pipe’а GroupBy или CoGroup). ● Возвращает ноль или несколько кортежей для каждой входной группы кортежей. ● Получает всю группу кортежей сразу (доступ через итератор). ● Удобно для вставки кортежа в группу.
  • 48. Как происходит разделение на Map и Reduce Hadoop MapReduce Job Planner
  • 49. Тестирование ● Юнит-тесты для функций, фильтров, агрегаторов и буфферов (cascading. CascadingTestCase). ● cascading.operation.Debug -фильтр, печатает кортеж в stdout или stderr. ● запуск в локальном режиме. ● пишите логи (в коде своих операций)
  • 50. 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 <параметры>
  • 52. Deployment Всё точно так же как если бы вы писали Hadoop MapReduce Job.
  • 53. Особенности работы с данными ● файлы: лучше мало больших, чем много маленьких. ● S3 + много маленьких -> s3distcp.
  • 54. Ещё один шаг вперёд ● Cascading -- это высокоуровневый API ● Меньше кода и проще проектировать сложную обработку данных (по сравнению с обычным MapReduce) ● Следующий логичный шаг -- DSL ● Выразительный ● Гибкий ● Правильная идеология
  • 58. Datalog ● Декларативный логический язык программирования. ● Синтаксически является подмножеством Пролога. ● Часто используется как язык запросов к дедуктивным базам данных (более выразительный чем SQL).
  • 59. 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 - запрос “найти всех людей у кого в предках Авраам”, результат: Исаак и Иаков.
  • 60. История ● Натан Марц (Nathan Marz) ● Первый коммит в гитхабе весной 2010 (пруф) ● ● ● ● Прародитель 2010 1 KLOC 2013 9 KLOC 29 контрибьютеров
  • 61. Общие сведения ● open source https://github. com/nathanmarz/cascalog ● лицензия Apache License 2.0 ● коммерческая поддержка не нашёл
  • 62. Пример (def age [ ;; [person age] ["alice" 28] ["bob" 33] ["gary" 28] ["john" 27] ["luanne" 36] ])
  • 63. Пример (?<- ;; определение и выполнение запроса (stdout) ;; куда попадает вывод [?person ?a2] ;; результат (переменные) (age ?person ?age) ;; предикат - генератор (< ?age 30) ;; предикат - фильтр (* 2 ?age :> ?a2)) ;; предикат - операция
  • 69. Проблемы cascalog’а ● Высокий порог вхождения (clojure). ● Мало документации. ● В Украине практически нет людей с опытом использования сабжа. ● Нет формальной грамматики описывающей язык запросов.
  • 70. Сообщество ● Гугл группа cascalog’а. ● Гугл-группа cascading’а. ● Как ни странно на stackoverflow.com практически ничего нет о сабжах. ● Митапы в Сан-Франциско и Лондоне.
  • 72. Развитие ● Каскалог 2.0 не будет привязан к каскадингу. ● Storm -- одна из возможных платформ.
  • 73. Когда использовать ● Данных должно быть ОЧЕНЬ много (не помещаются в память). ● Исторические данные (логи). ● Данные всё время добавляются.
  • 74. Документация ● Отличный User Guide по каскадингу. ● Замечательный туториал по каскадингу. ● Вики по каскалогу в гитхабе.