2013-07-30 4 views
21

У меня есть основное понимание того, что такое аббревиатура Pig, Hive. Но у меня нет четкого представления о сценариях, требующих сокращения Hive, Pig или native.Pig vs Hive vs Native Map Уменьшить

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

ответ

18

Комплексная логика ветвления, которая имеет много вложенных если .. еще .. структуры проще и быстрее реализовать в стандартной MapReduce для обработки структурированных данных можно использовать Pangool, также упрощает такие вещи, как JOIN , Также Standard MapReduce дает вам полный контроль, чтобы свести к минимуму количество заданий MapReduce, требуемых для потока данных, что соответствует производительности. Но это требует больше времени для кодирования и внесения изменений.

Apache Pig хорошо структурированных данных тоже, но его преимуществом является способность работать с мешками данных (все строки, которые сгруппированы по ключу), то проще реализовать такие вещи, как:

  1. Получить верхние N элементов для каждой группы;
  2. Рассчитать общее количество для каждой группы и поместить общее количество против каждой строки в группе;
  3. Использовать фильтры Bloom для оптимизации JOIN;
  4. поддержка Multiquery (это когда PIG пытается минимизировать число на MapReduce рабочих мест, делая больше вещей в одном задании)

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

Еще одна вещь: Hive and Pig не подходят для работы с иерархическими данными.

+1

Далее , если вам нужно написать много UDAF в Pig/Hive, чтобы решить вашу проблему, лучше всего создать одну карту, уменьшающую работу, которая делает все это.По моему опыту, как только вы приложите усилия, чтобы закодировать работу по сокращению карты, вы в основном вносите в нее простые дополнительные изменения в будущем, в основном внутри метода map/reduce по мере развития бизнес-правил. Когда у вас появятся новые члены команды, вы также захотите, чтобы они поняли нюансы карты, прежде чем они начнут делать серьезные вещи с помощью свиньи/улья, и ваша база кода MR служит для них хорошей ссылкой. –

+1

Полностью согласен с комментарием. Java MR - очень хороший выбор для первой волны работы ETL, так как существует много логики ветвления и поворота. Кроме того, java-код легче тестировать, и иногда это единственный выбор, если вы хотите максимальной производительности. Но многие пользователи Hadoop в основном являются бывшими разработчиками SQL, и они очень неохотно пишут какой-то код, часто тратя слишком много усилий на решение проблемы с SQL или скриптом. С другой стороны, разработчики приложений ex Java не могут написать эффективный код обработки данных, поскольку они не знают, что такое сортировка слияния. – alexeipab

14

Короткий ответ - нам нужен MapReduce, когда нам нужен очень глубокий уровень и мелкозернистый контроль на пути, который мы хотим обработать нашими данными. Иногда не очень удобно выражать то, что нам нужно именно в терминах запросов Pig и Hive.

Это не должно быть абсолютно невозможно сделать, что вы можете использовать MapReduce, через Pig или Hive. Благодаря гибкости, предоставляемой Pig and Hive, вы можете как-то справиться с достижением своей цели, но это может быть не так гладко. Вы можете писать UDF или что-то делать и добиваться этого.

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

Edit:

Некоторое время назад у меня был случай использования, где я должен был собирать сейсмические данные и запустить аналитику на него. Формат файлов, содержащих эти данные, был несколько странным. Некоторая часть данных была закодирована в EBCDIC, а остальные данные были в двоичном формате. Это был в основном плоский двоичный файл без разделителей типа \ n или что-то в этом роде. Мне было трудно найти способ обработать эти файлы с помощью Pig или Hive. В результате мне пришлось договориться с MR. Первоначально это заняло много времени, но постепенно оно стало более плавным, поскольку MR действительно быстр, как только у вас будет готовый базовый шаблон.

Так, как я сказал ранее, в основном это зависит от вашего варианта использования. Например, повторение каждой записи вашего набора данных очень просто в Pig (только для foreach), но что, если вам нужно foreach n ?? Поэтому, когда вам нужен «тот» уровень контроля над тем, как вам нужно обрабатывать ваши данные, MR более подходит.

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

Проблема Metapatterns, связанная с привязкой к работе и слиянием задач, проще решить с использованием MR напрямую, а не с использованием Pig/Hive.

И иногда очень удобно выполнять конкретную задачу с использованием какого-либо инструмента xyz по сравнению с использованием Pig/hive. ИМХО, МР оказывается в таких ситуациях лучше. Например, если вам нужно сделать некоторые статистические анализы в вашем BigData, R, используемое с потоком Hadoop, вероятно, является лучшим вариантом.

НТН

+0

Спасибо ... вы можете привести пример? Это действительно помогло бы :) – Maverick

+0

Хорошо .. Я дам вам мой пример. Надеюсь, это поможет. – Tariq

+0

Чтобы обратиться к "но что, если вам нужно foreach n ??" в PIG вы можете использовать LIMIT или вложенный LIMIT n в BAG/group, см. http://stackoverflow.com/questions/14604311/selecting-random-tuple-from-bag/14628763#14628763 где n == 1 – alexeipab

9

MapReduce:

Strengths: 
     works both on structured and unstructured data. 
     good for writing complex business logic. 

Weakness: 
    long development type 
    hard to achieve join functionality 

улей:

Strengths: 
    less development time. 
    suitable for adhoc analysis. 
    easy for joins 

Weakness : 
    not easy for complex business logic. 
    deals only structured data. 

Свиньи

Strengths : 
     Structured and unstructured data. 
     joins are easily written. 

Weakness: 
    new language to learn. 
    converted into mapreduce. 
5

улей

Плюсы:

Sql как данных базы парни любят это. Хорошая поддержка структурированных данных. В настоящее время поддерживает схему базы данных и ее виды, такие как структура Поддержка одновременных многопользовательских пользователей, многосегментных сценариев. Большая поддержка сообщества. Hive, сервер Hiver, Hiver Server2, Impala, Centry уже

Против: Производительность ухудшается по мере того, как данные растут не так много, а проблемы с памятью над потоком. не может много сделать с ним. Иерархические данные - задача. Un-структурированные данные требуют UDF как компонент Сочетание нескольких методов может быть кошмаром динамических частей с UTDF в случае больших объемов данных и т.д.

Pig: Плюсов: Отличного сценарий на основе языка потока данных.

Минусы:

Un-структурированных данных требует UDF как компонент не большой поддержки сообщества

MapReudce: Плюсы: Dont согласен с «трудно достичь присоединиться к функциональности», если вы понимаете, какой от объединения, которое вы хотите реализовать, вы можете реализовать с несколькими строками кода. Большая часть времени МР дает лучшую производительность. Поддержка MR для иерархических данных - это, в частности, реализация структур дерева. Улучшенный контроль при разбиении/индексировании данных. Работа цепочки.

Минусы: нужно знать апи очень хорошо, чтобы получить более высокую производительность и т.д. код/​​отладки/сохранить

1

Все вещи, которые мы можем сделать с помощью PIG и Улей может быть достигнуто с помощью MR (иногда это будет время занято). PIG и HIVE используют MR/SPARK/TEZ внизу. Таким образом, все, что может сделать MR, может быть или не быть возможным в Hive и PIG.

2

Scenarios где Hadoop Map Сокращение предпочтительно Hive или PIG

  1. При необходимости определенного драйвера программы управления

  2. Всякий раз, когда работа требует реализации пользовательского секционирования

  3. Если уже существует предопределенная библиотека Java Mappers или Reducers для aj О.Б.

  4. Если вам требуется хорошее количество контролируемости при совмещении много больших наборов данных
  5. Если приложение требует требования унаследованного кода, которые заповедую физическую структуру
  6. Если работа требует оптимизации на определенной стадии обработки, делая лучшее использование трюков, как и в-картографа объединения
  7. Если работа имеет некоторые хитрое использование распределенного кэша (реплицируется присоединиться), кросс-продуктов, групп или объединений

Comparison between Map reduce/ Pig/ Hive

Плюсы Свиньи/Hive:

  1. Hadoop MapReduce требует больше усилий в области развития, чем свиньи и улья.
  2. Подходы к кодированию свиней и улей медленнее, чем полностью настроенная программа Hadoop MapReduce.
  3. При использовании Pig and Hive для выполнения заданий разработчикам Hadoop не нужно беспокоиться о несоответствии версий.
  4. Существует очень ограниченная возможность для разработчика писать ошибки уровня java при кодировании в Pig или Hive.

Посмотрите на это сообщение для сравнения Pig Vs Hive.

1

Here - отличное сравнение. В нем указаны все сценарии использования.