Разница между свиньей и ульем? Почему есть оба?

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

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

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

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

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

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


person Arnkrishn    schedule 28.07.2010    source источник
comment
Hive предназначен для структурированных данных. Свинья для неструктурированных данных.   -  person Dead Programmer    schedule 08.12.2012
comment
Примечание для нынешних читателей: в Pig не было особых инноваций, и многие считают его устаревшим. Большинство ответов ниже не отражают этого, поскольку они были написаны некоторое время назад.   -  person Dennis Jaheruddin    schedule 30.07.2020


Ответы (19)


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

person Jakob Homan    schedule 29.07.2010
comment
Алан также делает статью, в которой конкретно обсуждается Hive, как показано ниже j03m. Хорошие вещи от него! - person Dolan Antenucci; 07.06.2012
comment
Hive предназначен для структурированных данных. Свинья для неструктурированных данных. - person Dead Programmer; 08.12.2012
comment
Я запутался. Вы хотели сказать [...] полезность процедурного языка, такого как Pig? Потому что в статье неоднократно утверждается, что Pig Latin является процедурным. - person Matt Fenwick; 27.10.2013
comment
Я не уверен, что это временно, но статья, похоже, исчезла. Можешь обновить ссылку (быстрым поиском не нашел)? - person Peter Klipfel; 27.03.2014
comment
Теперь он вернулся, по крайней мере для меня. - person Jakob Homan; 27.05.2014
comment
Пост Алана Гейтса здесь... пожалуйста, просмотрите его... developer.yahoo.com/blogs/hadoop/ - person Mr.Chowdary; 25.09.2014
comment
Я исправил процедурную/декларативную опечатку в ответе, чтобы отразить то, что указано в связанной статье. - person Oskar Austegard; 17.08.2015
comment
Контент не доступен по ссылке - person Dulangi_Kanchana; 15.11.2019

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

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

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

person Joydeep Sen Sarma    schedule 05.08.2010

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

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

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

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

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

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

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

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

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

person j03m    schedule 22.11.2011
comment
+1 приятно видеть сравнение с Yahoo, который, насколько я понимаю, является первоначальным создателем Pig или, по крайней мере, очень большим сторонником. Редактировать: от Якоба выше я вижу, что автор (Алан Гейтс) является Архитектором Свиней в Yahoo - так что большая доля :) - person Dolan Antenucci; 07.06.2012
comment
Ссылка мертва. Я думаю, что правильный URL на данный момент: https://developer.yahoo.com/blogs/hadoop/pig-hive-yahoo-464.html. - person agarie; 29.09.2014
comment
Обновлена ​​ссылка выше - person j03m; 29.09.2014
comment
еще одна новая ссылка: yahoohadoop.tumblr.com/post/98256601751/ свинья и улей в Yahoo - person rcrogers; 01.01.2017
comment
2 ссылки, которыми поделились выше, больше не найдены. - person Keshav Pradeep Ramanath; 27.02.2017
comment
отличная статья, очень познавательно :) - person sathya; 04.01.2018

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

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

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

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

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

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

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

  5. Hive может запустить необязательный коммерческий сервер, а PIG не может

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

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

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

person Ravindra babu    schedule 26.10.2015

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

Перефразируя из книги Hadoop O'Reilly:

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

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

person G__    schedule 28.07.2010
comment
Hive — это не что иное, как RDBMS. Он обрабатывает плоские файлы так же, как Pig. Они оба в основном делают одно и то же. Посмотрите на оптимизаторы, которые они используют при компиляции задания, поскольку это самая большая реальная разница. - person Steve Severance; 30.07.2010

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

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

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

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

person wlk    schedule 28.07.2010

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

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

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

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

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

person swarb    schedule 22.03.2014

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

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

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

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

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

person Ashwin Aravind    schedule 24.12.2015

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

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

Даются все аспекты. Если вы в замешательстве, что выбрать, вы должны увидеть эту веб-страницу.

person Jegan    schedule 05.09.2013
comment
Хорошая статья, но вы должны обобщить ее в ответе: meta.stackexchange.com/questions/8231/ - person Gruber; 18.08.2016

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

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

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

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

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

person zjffdu    schedule 15.07.2013

Ниже я нашел полезную ссылку, чтобы узнать, как и когда использовать HIVE и PIG.

http://www.hadoopwizard.com/when-to-use-pig-latin-versus-hive-sql/

person Raj    schedule 20.09.2013

Вот несколько дополнительных ссылок на использование Pig или Hive.

http://aws.amazon.com/elasticmapreduce/faqs/#hive-8

http://www.larsgeorge.com/2009/10/hive-vs-pig.html

person Praveen Sripati    schedule 03.08.2011

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

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

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

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

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

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

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

person Margon    schedule 29.09.2013

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

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

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

person user3167459    schedule 07.01.2014
comment
на самом деле это не значимое дополнение к базе знаний. попробуйте добавить больше информации - person agconti; 07.01.2014

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

1) Pig — это реляционная алгебра над хаупом

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

person exAres    schedule 04.10.2014
comment
Сравнение алгебры интересно - person Ravindra babu; 06.04.2016

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

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

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

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

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

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

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

Hive: создан на базе hdfs для складской обработки.

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

person shyamshyre    schedule 29.05.2014

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

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

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

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

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

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

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

person 221B    schedule 29.03.2015

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

Улью требуется схема.

person rbanikaz    schedule 20.02.2015

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

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

Оба необходимы и служат разным целям.

person Krishna Kalyan    schedule 13.11.2015