Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

Apache 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. В то же время этот язык также позволяет традиционным программистам карты/сокращения подключать свои настраиваемые карты и редукторы, когда неудобно или неэффективно выражать эту логику в HiveQL.

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

Ответ 4

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

Взгляните на Pig Vs Hive Сравнение в гайка оболочки от dezyre статьи

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

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

  • Hive лучше всего подходит для структурированных данных и PIG для полуструктурированных данных p >

  • Hive для отчетности и PIG для программирования

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

  • Hive поддерживает разделы и PIG не

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

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

  • Hive не поддерживает Avro, но PIG делает

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

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

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

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

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

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

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

Pig vs Hive vs Native Map Reduce

Ответ 5

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