Разница между Свинья и Улей? Почему оба? [закрыто]


256

Мой опыт - 4 недели в мире Hadoop. Немного поболтал в Hive, Pig и Hadoop, используя Hadoop VM от Cloudera. Прочитал статью Google о Map-Reduce и GFS ( ссылка в формате PDF ).

Я это понимаю-

  • Язык Pig Pig Latin - это отход от (подходит так, как думают программисты) SQL, как декларативного стиля программирования, а язык запросов Hive очень похож на SQL.

  • Свинья сидит на вершине Hadoop и в принципе может также сидеть на вершине Dryad. Я могу ошибаться, но Hive тесно связан с Hadoop.

  • Команды Pig Latin и Hive компилируются в Map и Reduce.

Мой вопрос - какова цель иметь оба, когда один (скажем, Свинья) может служить цели. Это только потому, что Свинья проповедует Yahoo! и улей по фейсбуку?


24
Улей для структурированных данных. Свинья для неструктурированных данных.
Мертвый программист

Ответы:


151

Прочтите этот пост от Алана Гейтса, архитектора Pig в Yahoo !, который сравнивает, когда будет использоваться SQL, такой как Hive, а не Pig. Он очень убедительно обосновывает полезность такого процедурного языка, как Pig (вместо декларативного SQL) и его полезность для разработчиков потоков данных.


Алан также делает статью, посвященную обсуждению Hive, как показано ниже. Хорошие вещи от него!
Долан Антенуччи

14
Улей для структурированных данных. Свинья для беспрепятственных данных.
Мертвый программист

7
Я запутался. Вы хотели сказать «[...] полезность такого процедурного языка, как свинья»? Потому что в статье неоднократно утверждается, что «Свинья латынь является процедурной».
Мэтт Фенвик

4
Я не уверен, что это временно, но статья, кажется, пропала. Можете ли вы обновить ссылку (я не смог найти ее с помощью быстрого поиска)?
Питер Клипфель

1
Алан Гейтс пост здесь .. пожалуйста , пройти через это .. developer.yahoo.com/blogs/hadoop/...
Mr.Chowdary

57

Hive был разработан, чтобы обратиться к сообществу, знакомому с SQL. Его философия заключалась в том, что нам не нужен еще один язык сценариев. Hive поддерживает сопоставление и сокращение сценариев преобразования на языке по выбору пользователя (который может быть встроен в предложения SQL). Он широко используется в Facebook аналитиками, знакомыми с SQL, а также программистами майнинга данных на Python. Усилия по совместимости SQL в Pig были заброшены AFAIK - поэтому разница между этими двумя проектами очень очевидна.

Поддержка синтаксиса SQL также означает возможность интеграции с существующими инструментами BI, такими как Microstrategy. У Hive есть драйвер ODBC / JDBC (это находится в стадии разработки), который должен позволить этому произойти в ближайшем будущем. Также начинает добавляться поддержка индексов, которая должна обеспечивать поддержку запросов детализации, распространенных в таких средах.

Наконец, - это не имеет отношения к вопросу напрямую - Hive является основой для выполнения аналитических запросов. В то время как его основное использование - это запрос плоских файлов, нет никаких причин, по которым он не может запрашивать другие хранилища. В настоящее время Hive может использоваться для запроса данных, хранящихся в Hbase (который является хранилищем значений ключей, подобных тем, что находятся в кишках большинства СУРБД), а проект HadoopDB использовал Hive для запроса федеративного уровня RDBMS.


37

Я нашел это самым полезным (хотя, это год) - http://yahoohadoop.tumblr.com/post/98256601751/pig-and-hive-at-yahoo

В нем конкретно говорится о Pig против Hive и о том, когда и где они работают в Yahoo. Я нашел это очень проницательным. Некоторые интересные заметки:

При постепенных изменениях / обновлениях наборов данных:

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

При использовании других инструментов через потоковую передачу:

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

Об использовании Hive для хранилищ данных:

В обоих случаях реляционная модель и SQL лучше всего подходят. Действительно, хранилище данных было одним из основных вариантов использования SQL на протяжении большей части его истории. Он имеет правильные конструкции для поддержки типов запросов и инструментов, которые аналитики хотят использовать. И он уже используется как инструментами, так и пользователями на местах.

Подпроект Hadoop Hive предоставляет интерфейс SQL и реляционную модель для Hadoop. Команда Hive начала работу по интеграции с инструментами BI через такие интерфейсы, как ODBC.


1
+1 здорово видеть сравнение с Yahoo, который, насколько я понимаю, является первоначальным создателем Pig, или, по крайней мере, очень большим сторонником. Изменить: из Jakob выше, я вижу, что автор (Алан Гейтс) является архитектором свиней в Yahoo - такая большая доля :)
Долан Антенуччи

3
Ссылка мертва. Я думаю, что правильный URL-адрес в данный момент: https://developer.yahoo.com/blogs/hadoop/pig-hive-yahoo-464.html .
Агари

1
Обновленная ссылка выше
j03m


2 ссылки, указанные выше, больше не найдены.
Кешав Прадип

28

Взгляните на Сравнение Pig Vs Hive в скорлупе ореха из статьи "dezyre"

Hive лучше, чем PIG в: разделы, сервер, веб-интерфейс и поддержка JDBC / ODBC.

Некоторые отличия:

  1. Hive лучше всего подходит для структурированных данных, а PIG - лучше для полуструктурированных данных.

  2. Hive используется для отчетности и PIG для программирования

  3. Hive используется как декларативный SQL & PIG в качестве процедурного языка.

  4. Hive поддерживает разделы, а PIG - нет

  5. Hive может запустить дополнительный сервер на основе Thrift и PIG не может

  6. Hive определяет таблицы заранее ( схема ) + сохраняет информацию о схеме в базе данных, а PIG не имеет выделенных метаданных базы данных

  7. Hive не поддерживает Avro, но PIG поддерживает. РЕДАКТИРОВАТЬ: Hive поддерживает Avro, укажите serde как org.apache.hadoop.hive.serde2.avro

  8. Свинья также поддерживает дополнительную функцию COGROUP для выполнения внешних объединений, но улей - нет. Но Hive и PIG могут объединяться, заказывать и сортировать динамически.


17

Я считаю, что реальный ответ на ваш вопрос заключается в том, что они являются / были независимыми проектами, и не было никакой централизованно согласованной цели. С самого начала они находились в разных местах и ​​со временем пересекались по мере расширения обоих проектов.

Перефразировано из книги Hadoop O'Reilly:

Свинья: язык потока данных и среда для исследования очень больших наборов данных.

Hive: распределенное хранилище данных


22
Улей не имеет ничего общего с RDBMS. Он обрабатывает плоские файлы, как свинья. Они оба в основном делают одно и то же. Посмотрите на оптимизаторы, которые они используют при компиляции задания, так как это самая большая реальная разница.
Стив Северанс

12

Вы можете достичь аналогичных результатов с запросами свиньи / улья. Основное отличие заключается в подходе к пониманию / написанию / созданию запросов.

Pig имеет тенденцию создавать поток данных: маленькие шаги, где на каждом этапе вы выполняете некоторую обработку.
Hive предоставляет вам SQL-подобный язык для работы с вашими данными, поэтому преобразование из RDBMS намного проще (Pig может быть проще для тех, кто не имел опыта ранее). с SQL)

Также стоит отметить, что для Hive вы можете иметь хороший интерфейс для работы с этими данными (Beeswax for HUE или веб-интерфейс Hive), а также он предоставляет вам метастаз для информации о ваших данных (схема и т. Д.), Которая полезна в качестве центральная информация о ваших данных.

Я использую Hive и Pig для разных запросов (я использую тот, где я могу писать запросы быстрее / проще, я делаю это, в основном, специальные запросы) - они могут использовать одни и те же данные в качестве входных данных. Но в настоящее время я делаю большую часть своей работы через пчелиный воск.


12

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

Hive, основанный на RDBMS, требует, чтобы данные были сначала импортированы (или загружены) и после этого с ними можно было работать. Поэтому, если вы использовали Hive для потоковой передачи данных, вам пришлось бы продолжать заполнять сегменты (или файлы) и использовать hive для каждого заполненного блока, в то время как другие блоки сохраняют новые поступающие данные.

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

Свинья быстрее в импорте данных, но медленнее в реальном исполнении, чем дружественный к СУБД язык, такой как Hive.

Свинья хорошо подходит для распараллеливания, и поэтому, возможно, она имеет преимущество для систем с огромными наборами данных, т. Е. В тех системах, где вас больше волнует пропускная способность ваших результатов, чем задержка (время получения какого-либо конкретного набора результатов).


10

Улей против свиньи

Hive - это интерфейс SQL, который позволяет пользователям, знакомым с SQL, или другим инструментам, таким как Tableu / Microstrategy / любой другой инструмент или язык, имеющий интерфейс SQL

PIG больше похож на конвейер ETL ... с пошаговыми командами, такими как объявление переменных, циклы, итерации, условные операторы и т. Д.

Я предпочитаю писать сценарии Pig, а не куст QL, когда я хочу написать сложную пошаговую логику. Когда мне удобно писать один sql для извлечения данных, которые я хочу, я использую Hive. для улья вам нужно определить таблицу перед запросом (как в RDBMS)

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


8

Прочитайте разницу между PIG и HIVE в этой ссылке.

http://www.aptibook.com/Articles/Pig-and-hive-advantages-disadvantages-features

Все аспекты даны. Если вы не уверены, что выбрать, вы должны увидеть эту веб-страницу.


2
Хорошая статья, но вы должны кратко изложить ее в ответе: meta.stackexchange.com/questions/8231/…
Грубер

7
  1. Pig-latin - стиль передачи данных, больше подходит для программиста. В то время как sql больше подходит для аналитиков, которые привыкли к sql. Для сложной задачи, для куста, вам нужно вручную создать временную таблицу для хранения промежуточных данных, но это не обязательно для свиньи.

  2. Свинья-латина подходит для сложной структуры данных (например, небольшой график). В pig есть структура данных, называемая DataBag, которая является коллекцией Tuple. Иногда вам нужно вычислить метрики, которые включают несколько кортежей (между кортежами есть скрытая связь, в этом случае я бы назвал это графиком). В этом случае очень легко написать UDF для вычисления метрик, которые включают несколько кортежей. Конечно, это можно сделать в улье, но это не так удобно, как у свиньи.

  3. Написание UDF у свиньи, на мой взгляд, намного проще, чем в Hive.

  4. Свинья не имеет поддержки метаданных (или это необязательно, в будущем она может включать hcatalog). Hive имеет метаданные таблиц, хранящиеся в базе данных.

  5. Вы можете отлаживать сценарий PIG в локальной среде, но кусту будет сложно это сделать. Причина в пункте 3. Вам необходимо настроить метаданные улья в вашей локальной среде, что занимает очень много времени.




4

По ссылке: http://www.aptibook.com/discuss-technical?uid=tech-hive4&question=What-kind-of-datawarehouse-application-is-suitable-for-Hive ?

Улей не полная база данных. Конструктивные ограничения и ограничения Hadoop и HDFS накладывают ограничения на возможности Hive.

Hive больше всего подходит для приложений хранилища данных, где

1) Относительно статические данные анализируются,

2) Быстрое время отклика не требуется, и

3) Когда данные не меняются быстро.

Hive не предоставляет важных функций, необходимых для OLTP, обработки онлайн-транзакций. Это ближе к тому, чтобы быть инструментом OLAP, Online Analytic Processing. Таким образом, Hive лучше всего подходит для приложений хранилища данных, где поддерживается большой набор данных и используется для анализа, отчетов и т. Д.


4

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

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

Поверх хранимых обработанных данных мы будем применять SQL-команды HIVE для получения желаемых результатов, внутри этой команды sql hive sql запускаются программы MAP Reduce.


это действительно не значимое дополнение к базе знаний. попробуйте добавить больше информации
agconti

4

Чтобы дать краткий обзор обоих уровней, вкратце:

1) Свинья - это реляционная алгебра над хадупом

2) Hive - это SQL over Hadoop (на один уровень выше Pig)


Сравнение алгебры интересно
Равиндра Бабу

3

Что может сделать HIVE, что невозможно в PIG?

Разбиение можно выполнить с помощью HIVE, но не в PIG, это способ обойти вывод.

Что может сделать свинья, что невозможно при ВИЧ?

Позиционные ссылки - даже если у вас нет имен полей, мы можем ссылаться, используя позицию, такую ​​как $ 0 - для первого поля, $ 1 для второго и так далее.

И еще одно принципиальное отличие: PIG не нужна схема для записи значений, но HIVE действительно нужна схема.

Вы можете подключиться из любого внешнего приложения к HIVE, используя JDBC и другие, но не с помощью PIG.

Примечание. Оба выполняются поверх HDFS (распределенная файловая система hadoop), а операторы преобразуются в программы Map Reduce.


3

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

Таким образом, он состоит из двух основных видов деятельности:

1) Загрузка данных Обработка

2) Генерация контента и использование его для отчетности / и т. Д.

Загрузка / Обработка данных -> Свинья была бы полезна в этом.

Это помогает как ETL (Мы можем выполнять операции etl, используя сценарии pig.).

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

Улей: Он построен на основе hdf для складской обработки.

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


1

Свинья ест что угодно! Это означает, что он может потреблять неструктурированные данные.

Улей требует схемы.


1

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

Улей светит, когда вам нужно выполнить специальные запросы или просто хотите изучить данные. Иногда он может выступать в качестве интерфейса для вашего уровня визуализации (Tableau / Qlikview).

Оба имеют важное значение и служат разным целям.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.