100
Hadoop -> Cascading -> Cascalog

Hadoop -> Cascading -> Cascalog

Embed Size (px)

Citation preview

Page 1: Hadoop -> Cascading -> Cascalog

Hadoop -> Cascading -> Cascalog

Page 2: Hadoop -> Cascading -> Cascalog

обо мне

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

Page 3: Hadoop -> Cascading -> Cascalog

проблематика

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

Page 4: Hadoop -> Cascading -> Cascalog

проблематика

5 миллиардов

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

Page 5: Hadoop -> Cascading -> Cascalog

проблематика

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

Page 6: Hadoop -> Cascading -> Cascalog

проблематика

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

VS

5% роста ИТ-расходов во всём мире(2011 год) http://bit.ly/big-data-mk-2011

Page 7: Hadoop -> Cascading -> Cascalog

проблематика

235 терабайт

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

Page 8: Hadoop -> Cascading -> Cascalog

проблематика

15 из 17

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

Page 9: Hadoop -> Cascading -> Cascalog

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

Опубликована работа “MapReduce: Simplified Data Processing on Large Clusters”

Джеффри Дин и Санжай Гемават, 2004

Page 10: Hadoop -> Cascading -> Cascalog

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

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

Page 11: Hadoop -> Cascading -> Cascalog

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

Начат проект Hadoop*

Дуг Каттинг и Майк Кафарелла 2005

* назван в честь игрушечного слонёнка ребёнка Дуга

Page 12: Hadoop -> Cascading -> Cascalog

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

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

http://ru.wikipedia.org/wiki/Hadoop

Page 13: Hadoop -> Cascading -> Cascalog

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

В январе 2006 г. Yahoo пригласила Каттинга возглавить команду разработки инфраструктуры распределённых вычислений (выделение Hadoop в отдельный проект). В феврале 2008 г. Yahoo запустила кластерную поисковую машину на 10 тыс. процессорных ядер, управляемую средствами Hadoop.

Page 14: Hadoop -> Cascading -> Cascalog

Map & Reduce

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

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

Page 15: Hadoop -> Cascading -> Cascalog

Map & Reduce

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

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

Page 16: Hadoop -> Cascading -> Cascalog

Apache Hadoop

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

Page 17: Hadoop -> Cascading -> Cascalog

Apache Hadoop

1. Hadoop Common2. HDFS3. Hadoop MapReduce

Page 18: Hadoop -> Cascading -> Cascalog

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)

● утилиты

Page 19: Hadoop -> Cascading -> Cascalog

Apache Hadoop

HDFS● распределённая файловая система● файлы можно дописывать в конец● distributed, scalable, reliable portable…

http://en.wikipedia.org/wiki/Hadoop#Hadoop_distributed_file_system

Page 20: Hadoop -> Cascading -> Cascalog

Apache Hadoop

Hadoop MapReduce● framework на котором пишутся Maps и

Reduces● движок в котором выполняется ваш код

Page 21: Hadoop -> Cascading -> Cascalog

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/

Page 22: Hadoop -> Cascading -> Cascalog

Cascading

Page 23: Hadoop -> Cascading -> Cascalog

Cascading с разных точек зрения

С точки зрения бизнеса:● управление бизнес процессами для

оркестрации потоков выполнения (аля BPM / BPEL)

http://www.slideshare.net/pacoid/cascading-for-the-impatient

Page 24: Hadoop -> Cascading -> Cascalog

Cascading с разных точек зрения

С точки зрения системного интегратора:● система интеграции гетерогенных

источников данных и платформ вычисления

http://www.slideshare.net/pacoid/cascading-for-the-impatient

Page 25: Hadoop -> Cascading -> Cascalog

Cascading с разных точек зрения

С точки зрения data scientist:● направленный ациклический граф для

которого можно применить закон Амдала*

http://www.slideshare.net/pacoid/cascading-for-the-impatient

Page 26: Hadoop -> Cascading -> Cascalog

*для любознательных

Закон Амдала:В случае, когда задача разделяется на несколько частей, суммарное время её выполнения на параллельной системе не может быть меньше времени выполнения самого длинного фрагмента.

Page 27: Hadoop -> Cascading -> Cascalog

Cascading с разных точек зрения

С точки зрения data архитектора:● физический план управления большими

потоками данных

http://www.slideshare.net/pacoid/cascading-for-the-impatient

Page 28: Hadoop -> Cascading -> Cascalog

Cascading с разных точек зрения

С точки зрения архитектора ПО:● язык паттернов, похожий на план

водопровода или проектирование принципиальных схем устройств

http://www.slideshare.net/pacoid/cascading-for-the-impatient

Page 29: Hadoop -> Cascading -> Cascalog

Cascading с разных точек зрения

С точки зрения разработчика:● связывающий API для скалы, кложура,

пайтона, руби, джава

http://www.slideshare.net/pacoid/cascading-for-the-impatient

Page 30: Hadoop -> Cascading -> Cascalog

Cascading с разных точек зрения

С точки зрения админа/Ops’а:● JAR файл ● которому можно передать параметры

через командную строку● валяется в Maven Repo

http://www.slideshare.net/pacoid/cascading-for-the-impatient

Page 31: Hadoop -> Cascading -> Cascalog

история

● Крис Венсель (Chris Wensel)● Начал разработку Cascading’а в начале

2008 (запись в блоге)● Основал компанию Concurrent в

середине 2008● В 2011 Concurrent получила инвестиции

для дальнейшего развития Cascading’а● 2008 20 KLOC● 2013 106 KLOC● 3 контрибьютера

Page 32: Hadoop -> Cascading -> Cascalog

Yep, it is open source!

https://github.com/cwensel/cascading

Page 33: Hadoop -> Cascading -> Cascalog

лицензия

Apache License 2.0

Page 34: Hadoop -> Cascading -> Cascalog

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

Есть!

http://www.concurrentinc.com/support/

Page 35: Hadoop -> Cascading -> Cascalog

аналоги каскадинга

● Oozie● Crunch● Apache Falcon● Cloudera Morphlines

Page 36: Hadoop -> Cascading -> Cascalog

основные понятия

● Pipes / трубы (потоки данных)● Filters / фильтры (операции над данными)

Page 37: Hadoop -> Cascading -> Cascalog

основные понятия

Набор разных труб (pipes) позволяет*:

● разделять данные● мёрджить данные● группировать● джойнить

* Для каждого кортежа или для группы кортежей.

Page 38: Hadoop -> Cascading -> Cascalog

основные понятия: tuples

Cascading оперирует кортежами

(“the man sat”, 25)(“hello dolly”, 42)(“say hello”, 1)(“the woman sat”, 10)

Page 39: Hadoop -> Cascading -> Cascalog

основные понятия: tuples

[“sentence”, “value”](“the man sat”, 25)(“hello dolly”, 42)(“say hello”, 1)(“the woman sat”, 10)

Page 40: Hadoop -> Cascading -> Cascalog

основные понятия: tuples

● Аналог тапла -- это строка в таблице базы данных.

● В каскадинге для кортежей есть специальный тип: cascading.tuple.Tuple

● Внутри это List<Object> elements;

Page 41: Hadoop -> Cascading -> Cascalog

основные понятия: fields

[“sentence”, “value”](“the man sat”, 25)(“hello dolly”, 42)(“say hello”, 1)(“the woman sat”, 10)

Page 42: Hadoop -> Cascading -> Cascalog

основные понятия: fields

● Определяет имя элемента кортежа.● В каскадинге для полей есть специальный

тип: cascading.tuple.Fields● Поле может быть строкой, целым

числом или специальным значением из предопределённого множества.

● Специальные значения нужны для выполнения шаблонных операций.

Page 43: Hadoop -> Cascading -> Cascalog

основные понятия: fields

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

Page 44: Hadoop -> Cascading -> Cascalog

основные понятия: pipes

● Это узел в котором может что-то происходить с кортежами (в документации нет чёткого определения пайпа).

● В каскадинге для пайпов есть специальный тип: cascading.pipe.Pipe

Page 45: Hadoop -> Cascading -> Cascalog

основные понятия: pipes

Типы пайпов:● Класс Pipe -- нужно для создания и

именования пайпа (планировщик использует имена для соединения с тапами).

● Подкласс SubAssembly -- повторное использование сборок пайпов.

● Шесть основных подклассов: Each, Merge, GroupBy, Every, CoGroup, HashJoin.

Page 46: Hadoop -> Cascading -> Cascalog

основные понятия: pipes

Each:● операции основанные на содержимом

кортежа: анализ, трансформация или фильтрация

● оперирует конкретным кортежем из потока● применяет функции или фильтры такие как

условная замена определённых значений полей, удаление кортежей значение полей которых выходит за заданные пределы…

● откалывание отдельной ветки потока данных● удаление ненужных полей из потока данных

Page 47: Hadoop -> Cascading -> Cascalog

основные понятия: pipes

Merge:● слияние нескольких потоков данных в один● принимает несколько потоков с идентичными

полями● отдаёт один поток с кортежами из входных

потоков в произвольном порядке

Page 48: Hadoop -> Cascading -> Cascalog

основные понятия: pipes

GroupBy:● группирует кортежи потока данных по общим

значениям указанных полей● если на вход подать несколько потоков, то

перед группировкой происходит слияние (поля потоков должны быть одинаковые)

● обычно группировку делают перед операциями “aggregator” или “buffer”

● по сути сортирует все кортежи в группы (в группах кортежи в произвольном порядке)

Page 49: Hadoop -> Cascading -> Cascalog

основные понятия: pipes

Every:● оперирует сгруппированными кортежами● используется для применения операций

“aggregator” или “buffer”● используется только после GroupBy или

CoGroup● можно несколько операций “aggregator”

ставить подряд (для “buffer” не работает)

Page 50: Hadoop -> Cascading -> Cascalog

основные понятия: pipes

CoGroup:● выполняет операцию “join” на нескольких

входных потоках данных или на самом себе● похож на SQL join (тоже может быть inner,

outer, left, или right)● отдаёт поток данных сгруппированный по

указанным полям● выходной поток данных содержит все поля

входных потоков● входные потоки не могут содержать

одинаковые имена полей

Page 51: Hadoop -> Cascading -> Cascalog

основные понятия: pipes

HashJoin:● выполняет операцию “join” на нескольких

входных потоках данных или на самом себе● похож на SQL join (тоже может быть inner,

outer, left, или right)● отдаёт поток данных в произвольном прядке● если не нужна группировка, быстрее чем

CoGroup (при условии нескольких маленьких входных потоков и не более одного большого)

Page 52: Hadoop -> Cascading -> Cascalog

основные понятия: пайпы (трубы)

Page 53: Hadoop -> Cascading -> Cascalog

основные понятия: pipe assembly

Простая последовательность пайпов без разветвлений и слияний.

Page 54: Hadoop -> Cascading -> Cascalog

основные понятия: tuple stream

Последовательность кортежей проходящая через ветвь пайпов или сборку (assembly).

Page 55: Hadoop -> Cascading -> Cascalog

паттерны работы с потоками

● Split● Merge● Join

Page 56: Hadoop -> Cascading -> Cascalog

паттерны работы с потоками

Split: ● Разделение данных из одного

потока на несколько потоков. ● К одному Pipe’у присоединяется

несколько последующих Pipe’ов.

Page 57: Hadoop -> Cascading -> Cascalog

паттерны работы с потоками

Merge: ● Слияние нескольких потоков

данных в один.● Несколько Pipe’ов

присоединяются к Pipe’у типа Merge или GroupBy.

Page 58: Hadoop -> Cascading -> Cascalog

паттерны работы с потоками

Join: ● Комбинирование данных из

нескольких потоков с разными полями по общим полям (аналог SQL join).

● Несколько Pipe’ов присоединяются к Pipe’у типа HashJoin или CoGroup.

Page 59: Hadoop -> Cascading -> Cascalog

основные понятия: tap

“кран” -- источник данных

Page 60: Hadoop -> Cascading -> Cascalog

основные понятия: sink

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

Page 61: Hadoop -> Cascading -> Cascalog

основные понятия: флоу

flow = pipe assemblies + source taps + sink taps

(краны + трубы + стоки)

Page 62: Hadoop -> Cascading -> Cascalog

основные понятия: флоу

● Важный момент: флоу -- это информация о том где брать данные, как обрабатывать и куда складывать результат.

● Где и куда должны существовать в момент выполнения.

● После создания, флоу нужно выполнить в одной из платформ.

Page 63: Hadoop -> Cascading -> Cascalog

основные понятия: флоу

Платформы:● Hadoop● Local

Page 64: Hadoop -> Cascading -> Cascalog

основные понятия: флоу

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

Page 65: Hadoop -> Cascading -> Cascalog

операции

аля юникс команды: sed, grep, sort, uniq и awk

Page 66: Hadoop -> Cascading -> Cascalog

основные понятия: фунции

● Ожидает на вход один кортеж.● Хороший тон: указать набор

входных и выходных полей.● Возвращает ноль или больше

кортежей.● Используется с пайпом Each,

который может следовать после пайпа любого типа.

Page 67: Hadoop -> Cascading -> Cascalog

основные понятия: фунции

Примеры:● парсеры● маршалеры● преобразователи (одних

полей в другие)

Page 68: Hadoop -> Cascading -> Cascalog

основные понятия: фильтры

● Ожидает на вход один кортеж.● Возвращает true или false

(выбрасываем кортеж из потока или нет).

● Используется с пайпом Each, который может следовать после пайпа любого типа.

Page 69: Hadoop -> Cascading -> Cascalog

основные понятия: агрегаторы

● Ожидает на вход группу кортежей (вывод пайпа GroupBy или CoGroup).

● Возвращает ноль или несколько кортежей для каждой входной группы кортежей.

● Примеры: Average, Count, First, Last, Max, Min, Sum

Page 70: Hadoop -> Cascading -> Cascalog

основные понятия: буфферы

● Ожидает на вход группу кортежей (вывод пайпа GroupBy или CoGroup).

● Возвращает ноль или несколько кортежей для каждой входной группы кортежей.

● Получает всю группу кортежей сразу (доступ через итератор).

● Удобно для вставки кортежа в группу.

Page 71: Hadoop -> Cascading -> Cascalog

как происходит разделение на map и reduce

Hadoop MapReduce Job Planner

Page 72: Hadoop -> Cascading -> Cascalog

тестирование

● Юнит-тесты для функций, фильтров, агрегаторов и буфферов (cascading.CascadingTestCase).

● cascading.operation.Debug -- фильтр, печатает кортеж в stdout или stderr.

● запуск в локальном режиме.● пишите логи (в коде своих операций)

Page 73: Hadoop -> Cascading -> Cascalog

дебаг

● в локальном режиме:https://github.com/ScaleUnlimited/cascading.utilsfinal 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 <параметры>

Page 74: Hadoop -> Cascading -> Cascalog

генерация диаграмм

Page 75: Hadoop -> Cascading -> Cascalog

деплоймент

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

MapReduce Job.

Page 76: Hadoop -> Cascading -> Cascalog

особенности

● файлы: лучше мало больших, чем много маленьких.

● S3 + много маленьких -> s3distcp.

Page 77: Hadoop -> Cascading -> Cascalog

ещё один шаг вперёд

● Cascading -- это высокоуровневый API● Меньше кода и проще проектировать

сложную обработку данных (по сравнению с обычным MapReduce)

● Следующий логичный шаг -- DSL● Выразительный● Гибкий● Правильная идеология

Page 78: Hadoop -> Cascading -> Cascalog

тааадааам!

cascalog

Page 79: Hadoop -> Cascading -> Cascalog

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

cascalog

Page 80: Hadoop -> Cascading -> Cascalog

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

cascalog

Page 81: Hadoop -> Cascading -> Cascalog

datalog

● Декларативный логический язык программирования.

● Синтаксически является подмножеством Пролога.

● Часто используется как язык запросов к дедуктивным базам данных (более выразительный чем SQL).

Page 82: Hadoop -> Cascading -> Cascalog

datalog

1 родил(Авраам,Исаак).2 родил(Исаак,Иаков).3 предок(X,Y) :- родил(X,Y).4 предок(X,Y) :-5 родил(X,Z),предок(Z,Y).6 ?- предок(Авраам,X).1 - Авраам родитель Исаака; 2 - Исаак родитель Иакова; 3, 4, 5 - правила определения предков; структура правила: <голова> :- <тело>; 3 - X предок Y’а если известно что X родитель Y’а; 4, 5 - X предок Y’а если известно что X родитель Z’а и Z предок Y’а; 6 - запрос “найти всех людей у кого в предках Авраам”, результат: Исаак и Иаков.

Page 83: Hadoop -> Cascading -> Cascalog

история

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

(пруф)● Прародитель● 2010 1 KLOC● 2013 9 KLOC● 29 контрибьютеров

Page 84: Hadoop -> Cascading -> Cascalog

Yep, it is open source!

https://github.com/nathanmarz/cascalog

Page 85: Hadoop -> Cascading -> Cascalog

лицензия

Apache License 2.0

Page 86: Hadoop -> Cascading -> Cascalog

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

Не нашёл.

Page 87: Hadoop -> Cascading -> Cascalog

пример

(def age[;; [person age] ["alice" 28] ["bob" 33] ["gary" 28] ["john" 27] ["luanne" 36]])

Page 88: Hadoop -> Cascading -> Cascalog

пример

(?<- ;; определение и выполнение запроса(stdout) ;; куда попадает вывод[?person ?a2] ;; результат (переменные)

(age ?person ?age) ;; предикат - генератор(< ?age 30) ;; предикат - фильтр(* 2 ?age :> ?a2)) ;; предикат - операция

Page 89: Hadoop -> Cascading -> Cascalog

REPL session

Несколько примеров в консоле.

Page 90: Hadoop -> Cascading -> Cascalog

пример: word count

Page 91: Hadoop -> Cascading -> Cascalog

пример: word count

Page 92: Hadoop -> Cascading -> Cascalog

пример: word count

Page 93: Hadoop -> Cascading -> Cascalog

пример: word count

Page 94: Hadoop -> Cascading -> Cascalog

проблемы каскалога

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

опытом использования сабжа.● Нет формальной грамматики

описывающей язык запросов.

Page 95: Hadoop -> Cascading -> Cascalog

сообщество

● Гугл группа каскалога.● Гугл-группа каскадинга.● Как ни странно на stackoverflow.com

практически ничего нет о сабжах.● Митапы в Сан-Франциско и Лондоне.

Page 96: Hadoop -> Cascading -> Cascalog

кто использует cascalog

● Twitter● Amazon продукты MultiTool и LogAnalyzer● Etsy рынок для хенмейда● FlightCaster предсказание задержек

рейсов● Ion Flux биоинформатика● RapLeaf рекомендательные системы● Razorfish рекламное агенство● The Climate Corporation страхование от

неурожая

Page 97: Hadoop -> Cascading -> Cascalog

развитие

● Каскалог 2.0 не будет привязан к каскадингу.

● Storm -- одна из возможных платформ.

Page 98: Hadoop -> Cascading -> Cascalog

когда использовать

● Данных должно быть ОЧЕНЬ много (не помещаются в память).

● Исторические данные (логи).● Данные всё время добавляются.

Page 99: Hadoop -> Cascading -> Cascalog

документация

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