В чем разница между Apache Pig и Apache Hive?

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

5 ответов


Apache Pig и Hive-это два проекта, которые накладываются поверх Hadoop и предоставляют язык более высокого уровня для использования библиотеки MapReduce Hadoop. Apache Pig предоставляет язык сценариев для описания таких операций, как чтение, фильтрация, преобразование, объединение и запись данных-именно те операции, для которых изначально был разработан MapReduce. Вместо того, чтобы выражать эти операции в тысячах строк кода Java, который использует MapReduce напрямую, Pig позволяет пользователям выражать их на языке не похоже на сценарий bash или perl. Pig отлично подходит для прототипирования и быстрого развития заданий на основе MapReduce, в отличие от кодирования заданий MapReduce в самой Java.

Если Pig - это "скрипты для Hadoop", то Hive-это"SQL-запросы для Hadoop". Apache Hive предлагает еще более специфичный язык более высокого уровня для запроса данных путем выполнения заданий Hadoop, а не непосредственно пошагового скриптинга работы нескольких заданий MapReduce на Hadoop. Язык, по замыслу, чрезвычайно SQL-подобные. Hive по-прежнему предназначен как инструмент для длительных пакетных запросов по массивным данным; это не "в реальном времени" в любом смысле. Hive-отличный инструмент для аналитиков и типов развития бизнеса, которые привыкли к SQL-подобным запросам и системам бизнес-аналитики; он позволит им легко использовать ваш блестящий новый кластер Hadoop для выполнения специальных запросов или создания данных отчета по данным, хранящимся в системах хранения, упомянутых выше.


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

Что касается взаимодействия, я считаю, что свинья предлагает большую гибкость по сравнению с улья. У вас нет понятия таблицы в PIG, поэтому вы управляете файлами напрямую, и вы можете определить загрузчик, чтобы загрузить его в практически любой формат очень легко с помощью загрузчика UDFs, без необходимости проходить этап загрузки таблицы, прежде чем вы сможете выполнить свои преобразования. У них есть хорошая функция в последних версиях PIG, где вы можете использовать динамические призыватели, т. е. использовать практически любой Метод Java непосредственно в вашем скрипте PIG, без необходимости писать UDF.

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

одной из интересных вещей, которые я сделал в последнее время, был splits: вы можете разделить поток выполнения и применить разные отношения к каждому split. Таким образом, вы можете иметь нелинейный набор данных, разделить его на основе поля и применить другую обработку к каждой части, и, возможно, объединить результаты вместе в конце концов, все это в том же сценарии. Я не думаю, что вы можете сделать это в улей, вам придется писать разные запросы для каждого случая, но я могу ошибаться.

следует также отметить, что вы можете увеличивать счетчики в PIG. В настоящее время вы можете сделать это только в Pig UDFs. Я не думаю, что вы можете использовать счетчики в улей.

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


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

латинские запросы Pig выполняются распределенным образом в кластере. Наша текущая реализация компилирует программы Pig Latin в Map-Reduce jobs, и выполняет их с помощью кластера Hadoop.

https://cwiki.apache.org/confluence/display/PIG/Index%3bjsessionid=F92DF7021837B3DD048BF9529A434FDA

Hive-это система хранилища данных для Hadoop, которая облегчает суммирование данных, специальные запросы и анализ больших наборов данных, хранящихся в файловых системах, совместимых с Hadoop. Hive предоставляет механизм для проецирования структуры на эти данные и запроса данных с помощью SQL-подобного языка hiveql. В то же время этот язык также позволяет традиционным программистам map / reduce подключать свои пользовательские картографы и редукторы, когда неудобно или неэффективно выражать эту логику в HiveQL.

https://cwiki.apache.org/Hive/


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

посмотреть Свинья Против Улья сравнение в скорлупе ореха С dezyre статьи

куст баллы за свинья на разделы, сервер, веб-интерфейс и поддержка JDBC/ODBC.

некоторые различия:

  1. куст лучше для структурированные данные & свинья лучше для слабоструктурированных данных

  2. куст используется отчетность & свинья на Программирование

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

  4. куст поддерживает разделы & свинья не

  5. куст можно запустить необязательный сервер на основе бережливости & свинья не могу!--8-->

  6. куст определяет таблицы, прежде чем руки (схеме) + хранит информацию о схеме в базе данных и свинья не имеют выделенных метаданных базы данных

  7. куст не поддерживает Avro, но свинья тут

  8. свинья также поддерживает дополнительные COGROUP функции для выполнение внешних соединений, но hive-нет. А как улей и свинья can Регистрация, порядок и сортировка динамически

Итак, когда использовать и какие технологии?

выше разница уточняет ваш запрос.

HIVE: структурированные данные, SQL как запросы и используется для целей отчетности

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

относительно выполнения задания, оба HIVE и PIG медленно по сравнению с традиционной картой уменьшить работу. Reason : наконец, сценарии Hive или PIG должны быть преобразованы в серию заданий Map Reduce.

посмотрите на связанный вопрос SE:

свинья против улья против родной карты уменьшить


главным образом разница свинья язык потока данных и Улей хранилище данных. В качестве поросенка можно использовать аналогичный пошаговый процедурный язык. Но HIVE используется как декларативный язык. PIG может использоваться для получения онлайн-потоковых неструктурированных данных. Но HIVE может получить доступ только к структурированным данным, а также к данным из баз данных СУБД, таких как SQL, NOSQL, с помощью драйверов JDBC и ODBC. PIG может конвертировать данные в формат Avro, но PIG не может. PIG не может создавать разделы, но HIVE может сделать его. Поскольку улей-это вершина свиньи, поэтому улей может получить доступ к данным только после его обработки свиньей. Это зависит от того, когда мы должны использовать PIG и HIVE если вы работаете со структурированными, реляционными данными, то мы можем использовать HIVE еще мы можем использовать PIG. Свиньей мы можем общаться с инструментами ETL, но это занимает больше времени по сравнению с ульем. Но это легко в PIG rather HIVE, потому что в HIVE мы должны создать таблицу перед обработкой данных.