Hadoop > cascading -> cascalog (very short)

59
Hadoop -> Cascading -> Cascalog

Transcript of Hadoop > cascading -> cascalog (very short)

Page 1: Hadoop  > cascading -> cascalog (very short)

Hadoop -> Cascading -> Cascalog

Page 2: Hadoop  > cascading -> cascalog (very short)

Обо мне

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

Page 3: Hadoop  > cascading -> cascalog (very short)

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

● $600 стоимость диска на который поместится вся музыка в мире

● 5B мобильников использовалось в 2010● 30B расшариваний всякой фигни в Facebook каждый

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

VS 5% роста ИТ-расходов во всём мире (2011 год)● 235 терабайт данных собрано Библиотекой Конгресса

США в апреле 2011-го● 15 из 17 секторов экономики в США имеют больше

данных, хранящихся на компанию, чем Библиотека Конгресса США

http://bit.ly/big-data-mk-2011

Page 4: Hadoop  > cascading -> cascalog (very short)

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

Page 5: Hadoop  > cascading -> cascalog (very short)

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

Page 6: Hadoop  > cascading -> cascalog (very short)

Apache Hadoop

● Java based open source framework.● Common (утилиты), HDFS, MapReduce.● http://en.wikipedia.org/wiki/Hadoop

Page 7: Hadoop  > cascading -> cascalog (very short)

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 8: Hadoop  > cascading -> cascalog (very short)

Cascading

Page 9: Hadoop  > cascading -> cascalog (very short)

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

потоков выполнения (аля BPM / BPEL).● Системного интегратора: система интеграции гетерогенных

источников данных и платформ вычисления.● Data scientist: направленный ациклический граф

подчиняющийся закону Амдала*.● Data architect: физический план управления большими

потоками данных.● Архитектора: язык паттернов, похожий на план водопровода

или проектирование принципиальных схем устройств.● Разработчика: связывающий API для скалы, кложура,

пайтона, руби, джава.● Админа: JAR файл (лежит в Maven Repo).

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

Page 10: Hadoop  > cascading -> cascalog (very short)

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

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

Page 11: Hadoop  > cascading -> cascalog (very short)

История

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

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

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

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

Page 12: Hadoop  > cascading -> cascalog (very short)

Общие сведения

● Open source https://github.com/cwensel/cascading

● Лицензия Apache License 2.0.● Коммерческая поддержка http://www.

concurrentinc.com/support/

Page 13: Hadoop  > cascading -> cascalog (very short)

Аналоги

● Oozie● Crunch● Apache Falcon● Cloudera Morphlines

Page 14: Hadoop  > cascading -> cascalog (very short)

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

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

Page 15: Hadoop  > cascading -> cascalog (very short)

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

Набор разных pipe’ов позволяет производить над данными следующие операции*:● Split● Merge● Group by● Join

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

Page 16: Hadoop  > cascading -> cascalog (very short)

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

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

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

Page 17: Hadoop  > cascading -> cascalog (very short)

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

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

Page 18: Hadoop  > cascading -> cascalog (very short)

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

● Аналог: строка в таблице базы данных.● В каскадинге для кортежей есть

специальный тип: cascading.tuple.Tuple

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

Page 19: Hadoop  > cascading -> cascalog (very short)

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

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

Page 20: Hadoop  > cascading -> cascalog (very short)

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

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

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

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

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

Page 21: Hadoop  > cascading -> cascalog (very short)

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

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

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

Page 22: Hadoop  > cascading -> cascalog (very short)

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

Типы pipe’ов:● Класс Pipe: нужен для создания и

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

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

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

Page 23: Hadoop  > cascading -> cascalog (very short)

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

● Each: операции основанные на содержимом кортежа: анализ, трансформация или фильтрация.

● Merge: слияние нескольких потоков данных в один.● GroupBy: группирует кортежи потока данных по

общим значениям указанных полей.● Every: оперирует сгруппированными кортежами.● CoGroup: выполняет операцию join на нескольких

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

● HashJoin: выполняет операцию “join” на нескольких входных потоках данных или на самом себе (не группирует).

Page 24: Hadoop  > cascading -> cascalog (very short)

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

Page 25: Hadoop  > cascading -> cascalog (very short)

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

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

Page 26: Hadoop  > cascading -> cascalog (very short)

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

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

Page 27: Hadoop  > cascading -> cascalog (very short)

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

● Split разделение данных из одного потока на несколько.

● Merge слияние нескольких потоков в один.

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

Page 28: Hadoop  > cascading -> cascalog (very short)

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

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

Page 29: Hadoop  > cascading -> cascalog (very short)

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

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

Page 30: Hadoop  > cascading -> cascalog (very short)

Основные понятия: flow

flow = pipe assemblies + source taps + sink taps

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

Page 31: Hadoop  > cascading -> cascalog (very short)

Основные понятия: flow

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

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

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

● Flow можно соединять в цепочки.● Можно запускать локально или в Hadoop.

Page 32: Hadoop  > cascading -> cascalog (very short)

Операции

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

Page 33: Hadoop  > cascading -> cascalog (very short)

Основные понятия: операции● Function: ожидает на вход один кортеж,

возвращает ноль или больше кортежей, примеры: parsers, marshallers.

● Filter: ожидает на вход один кортеж, возвращает true или false (выбрасываем кортеж из потока или нет).

● Aggregator: ожидает на вход группу кортежей, возвращает ноль или несколько кортежей, примеры: Average, Count, First, Last, Max, Min, Sum.

● Buffer: ожидает на вход группу кортежей, возвращает ноль или несколько кортежей, получает всю группу кортежей сразу.

Page 34: Hadoop  > cascading -> cascalog (very short)

Как происходит разделение на Map и Reduce

Hadoop MapReduce Job Planner

Page 35: Hadoop  > cascading -> cascalog (very short)

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

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

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

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

Page 36: Hadoop  > cascading -> cascalog (very short)

Debug

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

Page 37: Hadoop  > cascading -> cascalog (very short)

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

Page 38: Hadoop  > cascading -> cascalog (very short)

Deployment

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

MapReduce Job.

Page 39: Hadoop  > cascading -> cascalog (very short)

Особенности работы с данными

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

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

Page 40: Hadoop  > cascading -> cascalog (very short)

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

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

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

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

Page 41: Hadoop  > cascading -> cascalog (very short)

Тааадааам!

cascalog

Page 42: Hadoop  > cascading -> cascalog (very short)

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

cascalog

Page 43: Hadoop  > cascading -> cascalog (very short)

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

cascalog

Page 44: Hadoop  > cascading -> cascalog (very short)

Datalog

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

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

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

Page 45: Hadoop  > cascading -> cascalog (very short)

История

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

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

Page 46: Hadoop  > cascading -> cascalog (very short)

Общие сведения

● Open source https://github.com/nathanmarz/cascalog

● Лицензия Apache License 2.0.● Коммерческая поддержка не нашёл.

Page 47: Hadoop  > cascading -> cascalog (very short)

Пример

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

Page 48: Hadoop  > cascading -> cascalog (very short)

Пример

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

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

Page 49: Hadoop  > cascading -> cascalog (very short)

Пример: Word Count

Page 50: Hadoop  > cascading -> cascalog (very short)

Пример: Word Count

Page 51: Hadoop  > cascading -> cascalog (very short)

Пример: Word Count

Page 52: Hadoop  > cascading -> cascalog (very short)

Пример: Word Count

Page 53: Hadoop  > cascading -> cascalog (very short)

Проблемы cascalog’а

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

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

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

Page 54: Hadoop  > cascading -> cascalog (very short)

Сообщество

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

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

Page 55: Hadoop  > cascading -> cascalog (very short)

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

Page 56: Hadoop  > cascading -> cascalog (very short)

Развитие

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

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

Page 57: Hadoop  > cascading -> cascalog (very short)

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

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

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

Page 58: Hadoop  > cascading -> cascalog (very short)

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

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