2010-09-10 2 views
18

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

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

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

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

В каком сценарии я должен выбрать каскадирование по классическому подходу? Любой, кто использует его и счастлив?

ответ

24

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

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

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

+0

Есть ли какая-нибудь другая книга для изучения каскадирования, кроме «Рабочие процессы предприятия с помощью каскадирования»? В настоящее время я читаю эту книгу, но, похоже, код в этой книге несколько старый. Похоже, что многие вещи в Cascading изменились с тех пор, как была написана эта книга. – Shekhar

+0

Здравствуйте, Марк. Можете ли вы предложить решение, использующее каскадирование по этому вопросу ..http: //stackoverflow.com/questions/27506306/piping-data-into-jobs-in-hadoop-mr-pig –

1

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

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

+0

Чтобы ответить на вопрос в заголовке: http://sharethis.com/ использует Cascading, поэтому они должны найти его полезно. – sholsapp

51

Имея в виду, что я автор каскадного ...

Мое предложение заключается в использовании Pig или улей, если они имеют смысл для вашей проблемы, Pig особенно.

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

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

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

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

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

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

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

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

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

+0

Спасибо, отличный ответ Крис. Мне нравится точка зрения Hadoop как основы ETL, в частности ... –

+0

Не могли бы вы дать некоторое представление о том, когда использовать чистый каскадирование и когда использовать Cascalog или Scalding? Есть ли какие-либо преимущества Cascalog или Scalding над простой Casacading? – Shekhar

6

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

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

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

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

2

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

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

6

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

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

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

- Кен

1

Я работал на каскадные за пару лет и ниже useful things in cascading.

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. 

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

0

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

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

Вы также хотите посмотреть каскадные отводы и схемы (это то, как вы вводите данные в свое каскадное задание обработки).

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

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