Upload
andrew-panfilov
View
395
Download
0
Embed Size (px)
Citation preview
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 Common2. HDFS3. 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.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 <параметры>
генерация диаграмм
деплоймент
Всё точно так же как если бы вы писали Hadoop
MapReduce Job.
особенности
● файлы: лучше мало больших, чем много маленьких.
● S3 + много маленьких -> s3distcp.
ещё один шаг вперёд
● Cascading -- это высокоуровневый API● Меньше кода и проще проектировать
сложную обработку данных (по сравнению с обычным MapReduce)
● Следующий логичный шаг -- DSL● Выразительный● Гибкий● Правильная идеология
тааадааам!
cascalog
раскрываем тайну названия
cascalog
раскрываем тайну названия
cascalog
datalog
● Декларативный логический язык программирования.
● Синтаксически является подмножеством Пролога.
● Часто используется как язык запросов к дедуктивным базам данных (более выразительный чем SQL).
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 - запрос “найти всех людей у кого в предках Авраам”, результат: Исаак и Иаков.
история
● Натан Марц (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 по каскадингу.● Замечательный туториал по каскадингу.● Вики по каскалогу в гитхабе.