Имея в виду, что я автор каскадного ...
Мое предложение заключается в использовании 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 и документацию, а сообщество пользователей всегда помогает.
Есть ли какая-нибудь другая книга для изучения каскадирования, кроме «Рабочие процессы предприятия с помощью каскадирования»? В настоящее время я читаю эту книгу, но, похоже, код в этой книге несколько старый. Похоже, что многие вещи в Cascading изменились с тех пор, как была написана эта книга. – Shekhar
Здравствуйте, Марк. Можете ли вы предложить решение, использующее каскадирование по этому вопросу ..http: //stackoverflow.com/questions/27506306/piping-data-into-jobs-in-hadoop-mr-pig –