Кто-нибудь находит Cascading for Hadoop Map Reduce полезным? - PullRequest
19 голосов
/ 10 сентября 2010

Я пробовал Каскадирование, но я не вижу никакого преимущества по сравнению с классическим подходом к уменьшению карт для письменных заданий.

Карта Сокращение заданий дает мне больше свободы, и Каскадирование, похоже, создает много препятствий.

Может хорошо сделать простые вещи, простые, но сложные ... Я нахожу их чрезвычайно сложными

Есть что-то, чего мне не хватает.Есть ли очевидное преимущество Cascading перед классическим подходом?

В каком сценарии я должен выбрать каскадирование вместо классического подхода?Кто-нибудь использует это и счастлив?

Ответы [ 8 ]

51 голосов
/ 11 сентября 2010

Помня, что я автор Cascading ...

Я предлагаю использовать Pig или Hive, если они имеют смысл для вашей проблемы, особенно Pig.

Но если выВы работаете с данными, а не просто изучаете свои данные для понимания, вы обнаружите, что каскадный подход имеет гораздо больше смысла для большинства проблем, чем необработанный MapReduce.

Ваше первое препятствие с необработанным MapReduce будет думать вУменьшение карты.Тривиальные проблемы просты в MapReduce, но гораздо проще разрабатывать сложные приложения, если вы можете работать с моделью, которая более легко сопоставляется с вашей проблемной областью (фильтруйте это, анализируйте, сортируйте, присоединяйте к остальным и т. Д.).

Далее вы поймете, что обычная единица работы в Hadoop состоит из нескольких заданий MapReduce.Объединение в цепочку заданий - это решаемая проблема, но она не должна просачиваться в код уровня вашего приложения, она должна быть скрытой и прозрачной.

Кроме того, вы обнаружите, что рефакторинг и создание кода многократного использования гораздо сложнее, если вам придетсяпостоянно перемещать функции между картографами и редукторами.или от картографов к предыдущему редуктору, чтобы получить оптимизацию.Что приводит к проблеме хрупкости.

Каскадирование верит в провал как можно быстрее.Планировщик пытается разрешить и удовлетворить зависимости между всеми этими именами полей еще до того, как кластер Hadoop начнет работать.Это означает, что 90% + всех проблем будут обнаружены до того, как вы дождетесь часов, чтобы ваша работа нашла ее во время выполнения.

Вы можете уменьшить это в необработанном коде MapReduce, создавая доменные объекты, такие как Person или Document, но многим приложениям не нужны все поля вниз по течению.Подумайте, нужен ли вам средний возраст всех мужчин.Вы не хотите платить штраф IO за передачу целого человека по сети, когда все, что вам нужно, это двоичный пол и числовой возраст.

При быстрой семантике сбоя и ленивом связывании приемников и источников это становится оченьЛегко создавать каркасы на Cascading, которые сами создают каскадные потоки (которые становятся многими заданиями Hadoop MapReduce).Проект, в котором я сейчас участвую, заканчивается сотнями заданий MapReduce за один запуск, многие из которых создаются на лету в середине выполнения на основе обратной связи с обрабатываемыми данными.Найдите Cascalog , чтобы увидеть пример среды на основе Clojure для простого создания сложных процессов.Или Bixo для набора инструментов и инфраструктуры веб-майнинга, который гораздо проще настроить, чем Nutch.

Наконец, Hadoop никогда не используется отдельно, что означает, что ваши данные всегда извлекаются из какого-либо внешнего источника и отправляются вдругой после обработки.Грязный секрет Hadoop в том, что это очень эффективная среда ETL (поэтому глупо слышать, как поставщики ETL говорят об использовании своих инструментов для передачи / извлечения данных в / из Hadoop).Каскадирование несколько облегчает эту проблему, позволяя вам писать свои операции, приложения и модульные тесты независимо от конечных точек интеграции.Каскадирование используется в производстве для загрузки таких систем, как Membase, Memcached, Aster Data, Elastic Search, HBase, Hypertable, Cassandra и т. Д. (К сожалению, не все адаптеры были выпущены их авторами.)

Если выПожалуйста, пришлите мне список проблем, которые вы испытываете с интерфейсом.Я постоянно ищу лучшие способы улучшить API и документацию, и сообщество пользователей всегда рядом, чтобы помочь.

25 голосов
/ 12 сентября 2010

Я использую Cascading уже пару лет. Я считаю это чрезвычайно полезным. В конечном счете, речь идет о повышении производительности. Я могу быть гораздо более эффективным в создании и обслуживании заданий M / R по сравнению с простым Java-кодом. Вот несколько причин, почему:

  • Большая часть стандартного кода, используемого для начала работы, уже написана для вас.
  • компонуемость. Обычно код легче читать и использовать повторно, когда он написан как компоненты (операции), которые объединены для выполнения более сложной обработки.
  • Я считаю, что модульное тестирование проще. В каскадном пакете есть примеры, демонстрирующие, как писать простые модульные тесты для непосредственного тестирования вывода потоков.
  • Парадигма Tap (источник и приемник) упрощает изменение ввода и вывода задания, поэтому вы можете, например, начать с вывода в STDOUT для разработки и отладки, а затем переключиться на файлы последовательности HDFS для пакетных заданий и затем переключитесь на HBase, чтобы получать обновления в реальном времени.
  • Другим большим преимуществом написания каскадных заданий является то, что вы действительно пишете больше фабрики, которая создает задания. Это может быть огромным преимуществом, когда вам нужно что-то построить динамически (т.е. результаты одного задания определяют, какие последующие задания вы создаете и запускаете). Или, в другом случае, мне нужно было создать задание для каждой комбинации из 6 двоичных переменных. Это 64 работы, которые очень похожи. Это было бы хлопотно только с классами сокращения карты hadoop.

Хотя существует множество готовых компонентов, которые вы можете составлять вместе, если вам кажется, что конкретный раздел вашей логики обработки проще написать на прямой Java, вы всегда можете создать каскадную функцию для ее переноса. , Это позволяет вам иметь преимущества каскадирования, но очень нестандартные операции могут быть записаны как прямые Java-функции (реализация каскадного интерфейса).

6 голосов
/ 12 сентября 2010

Я преподаю курс Hadoop Boot Camp для Scale Unlimited, а также широко использую Cascading в Bixo и для создания приложений веб-майнинга в Bixo Labs - так что я думаю, что получил хорошую оценку для обоих подходов.

Самое большое единственное преимущество, которое я вижу в Cascading, это то, что он позволяет вам думать о вашем рабочем процессе обработки данных с точки зрения операций с полями и (в основном) избегать беспокойства о том, как перенести этот взгляд на мир на ключ /.Модель значений, которая является неотъемлемой частью любой реализации с уменьшением карты.

Самая большая проблема с каскадированием заключается в том, что это другой способ мышления о рабочих процессах обработки данных, и существует соответствующий концептуальный «горб», который необходимо преодолеть.прежде чем все это начинает иметь смысл.Кроме того, сообщения об ошибках могут напоминать один из выходных данных lex / yacc («конфликт сдвига / уменьшения»):)

- Ken

6 голосов
/ 11 сентября 2010

Я использовал Cascading with Bixo, чтобы написать полный конвейер классификации ссылок для нежелательной почты для большой социальной сети.

Каскадный конвейер дал 27 заданий MR, которые было бы очень трудно поддерживать в обычном MR.Я уже писал MR-задания, но использование чего-то вроде Cascading напоминает переключение с Assembler на Java (insert_fav_language_here).

Одним из больших преимуществ по сравнению с Hive или Pig IMHO является то, что Cascading - это одна банка, которую вы связываетес вашей работой.Pig и Hive имеют больше зависимостей (например, MySQL) или их не так просто внедрить.

Отказ от ответственности: Хотя я лично знаю Криса Венселя, я действительно считаю, что каскадирование - это удар **.Учитывая его сложность, очень впечатляет, что я не нашел ни одной ошибки, использующей его.

2 голосов
/ 12 сентября 2010

Я думаю, что место, которое начинают демонстрировать преимущества Cascading, - это случаи, когда у вас есть куча простых функций, которые должны храниться отдельно в исходном коде, но которые могут быть собраны в композицию в вашем преобразователе или преобразователе. Объединение их делает ваш основной код сокращения карт трудным для чтения, а разделение делает программу очень медленной. Оптимизатор Cascading может собрать их вместе, даже если вы пишете их отдельно. Свинья и в некоторой степени Hive могут сделать это также, но для больших программ, я думаю, у Cascading есть преимущество в удобстве обслуживания.

Через несколько месяцев Plume может стать конкурентом выразительности, но если у вас есть реальные программы для написания и запуска в производственных условиях, то, вероятно, лучшим выбором будет каскадирование.

1 голос
/ 13 декабря 2014

Я работал над каскадированием пару лет, и ниже полезные вещи в каскадировании .

1. code testability
2. easy integration with other tools
3. easily extensibile
4. you will focus only on business logic not on keys and values
5. proven in production and used by even twitter.

Я рекомендую людям использовать каскадирование большую часть времени.

1 голос
/ 10 сентября 2010

Каскадирование позволяет вам использовать простые имена полей и кортежи вместо примитивных типов, предлагаемых Hadoop, которые, "... имеют тенденцию быть на неправильном уровне детализации для создания сложного кода с высокой степенью компоновки, который может бытьразделены между разными разработчиками " ( Том Уайт , Hadoop The Definitive Guide * ).Каскадирование было разработано для решения этих проблем.Имейте в виду, что некоторые приложения, такие как Cascading, Hive, Pig и т. Д., Разрабатывались параллельно и иногда делали одно и то же.Если вам не нравится каскадирование или вы его путаете, может быть, вам лучше использовать что-то еще?

Я уверен, что у вас уже есть это, но вот руководство пользователя: http://www.cascading.org/1.1/userguide/pdf/userguide.pdf.Он обеспечивает приличный обзор потока данных в типичном каскадном приложении.

0 голосов
/ 05 мая 2015

Каскадирование - это обертка вокруг Hadoop, которая обеспечивает отводы и приемы в Hadoop и из него.

Написание картографов и редукторов для всех ваших задач будет утомительным.Попробуйте написать одно каскадное задание, и тогда вы будете готовы избегать написания картографов и редукторов.

Вы также хотите взглянуть на каскадные касания и схемы (именно так вы вводите данные в свою задачу каскадной обработки).

С этими двумя, то есть способ избежать написания специальных карт HadoopБлагодаря редукторам и возможности использования широкого спектра источников данных вы можете быстро и эффективно решить большую часть обработки ваших данных.

Каскадирование - это больше, чем просто оболочка вокруг Hadoop, япытаясь держать ответ простым.Например, я портировал огромную базу данных mysql, содержащую терабайты данных, в журналы, используя каскадный jdbc tap

...