В чем разница между 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.
в чем точная разница между свиньей и ульем? Я обнаружил, что оба имеют одинаковое функциональное значение, потому что они используются для выполнения одной и той же работы.
посмотреть Свинья Против Улья сравнение в скорлупе ореха С dezyre
статьи
куст баллы за свинья на разделы, сервер, веб-интерфейс и поддержка JDBC/ODBC.
некоторые различия:
куст лучше для структурированные данные & свинья лучше для слабоструктурированных данных
куст используется отчетность & свинья на Программирование
куст используется как декларативный SQL & свинья используется как процедурный язык
куст поддерживает разделы & свинья не
куст можно запустить необязательный сервер на основе бережливости & свинья не могу!--8-->
куст определяет таблицы, прежде чем руки (схеме) + хранит информацию о схеме в базе данных и свинья не имеют выделенных метаданных базы данных
куст не поддерживает Avro, но свинья тут
свинья также поддерживает дополнительные 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 мы должны создать таблицу перед обработкой данных.