Мой опыт - 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! и улей по фейсбуку?
hadoop
hive
apache-pig
Arnkrishn
источник
источник
Ответы:
Прочтите этот пост от Алана Гейтса, архитектора Pig в Yahoo !, который сравнивает, когда будет использоваться SQL, такой как Hive, а не Pig. Он очень убедительно обосновывает полезность такого процедурного языка, как Pig (вместо декларативного SQL) и его полезность для разработчиков потоков данных.
источник
Hive был разработан, чтобы обратиться к сообществу, знакомому с SQL. Его философия заключалась в том, что нам не нужен еще один язык сценариев. Hive поддерживает сопоставление и сокращение сценариев преобразования на языке по выбору пользователя (который может быть встроен в предложения SQL). Он широко используется в Facebook аналитиками, знакомыми с SQL, а также программистами майнинга данных на Python. Усилия по совместимости SQL в Pig были заброшены AFAIK - поэтому разница между этими двумя проектами очень очевидна.
Поддержка синтаксиса SQL также означает возможность интеграции с существующими инструментами BI, такими как Microstrategy. У Hive есть драйвер ODBC / JDBC (это находится в стадии разработки), который должен позволить этому произойти в ближайшем будущем. Также начинает добавляться поддержка индексов, которая должна обеспечивать поддержку запросов детализации, распространенных в таких средах.
Наконец, - это не имеет отношения к вопросу напрямую - Hive является основой для выполнения аналитических запросов. В то время как его основное использование - это запрос плоских файлов, нет никаких причин, по которым он не может запрашивать другие хранилища. В настоящее время Hive может использоваться для запроса данных, хранящихся в Hbase (который является хранилищем значений ключей, подобных тем, что находятся в кишках большинства СУРБД), а проект HadoopDB использовал Hive для запроса федеративного уровня RDBMS.
источник
Я нашел это самым полезным (хотя, это год) - http://yahoohadoop.tumblr.com/post/98256601751/pig-and-hive-at-yahoo
В нем конкретно говорится о Pig против Hive и о том, когда и где они работают в Yahoo. Я нашел это очень проницательным. Некоторые интересные заметки:
При постепенных изменениях / обновлениях наборов данных:
При использовании других инструментов через потоковую передачу:
Об использовании Hive для хранилищ данных:
источник
Взгляните на Сравнение Pig Vs Hive в скорлупе ореха из статьи "dezyre"
Hive лучше, чем PIG в: разделы, сервер, веб-интерфейс и поддержка JDBC / ODBC.
Некоторые отличия:
Hive лучше всего подходит для структурированных данных, а PIG - лучше для полуструктурированных данных.
Hive используется для отчетности и PIG для программирования
Hive используется как декларативный SQL & PIG в качестве процедурного языка.
Hive поддерживает разделы, а PIG - нет
Hive может запустить дополнительный сервер на основе Thrift и PIG не может
Hive определяет таблицы заранее ( схема ) + сохраняет информацию о схеме в базе данных, а PIG не имеет выделенных метаданных базы данных
Hive не поддерживает Avro, но PIG поддерживает. РЕДАКТИРОВАТЬ: Hive поддерживает Avro, укажите serde как org.apache.hadoop.hive.serde2.avro
Свинья также поддерживает дополнительную функцию COGROUP для выполнения внешних объединений, но улей - нет. Но Hive и PIG могут объединяться, заказывать и сортировать динамически.
источник
Я считаю, что реальный ответ на ваш вопрос заключается в том, что они являются / были независимыми проектами, и не было никакой централизованно согласованной цели. С самого начала они находились в разных местах и со временем пересекались по мере расширения обоих проектов.
Перефразировано из книги Hadoop O'Reilly:
источник
Вы можете достичь аналогичных результатов с запросами свиньи / улья. Основное отличие заключается в подходе к пониманию / написанию / созданию запросов.
Pig имеет тенденцию создавать поток данных: маленькие шаги, где на каждом этапе вы выполняете некоторую обработку.
Hive предоставляет вам SQL-подобный язык для работы с вашими данными, поэтому преобразование из RDBMS намного проще (Pig может быть проще для тех, кто не имел опыта ранее). с SQL)
Также стоит отметить, что для Hive вы можете иметь хороший интерфейс для работы с этими данными (Beeswax for HUE или веб-интерфейс Hive), а также он предоставляет вам метастаз для информации о ваших данных (схема и т. Д.), Которая полезна в качестве центральная информация о ваших данных.
Я использую Hive и Pig для разных запросов (я использую тот, где я могу писать запросы быстрее / проще, я делаю это, в основном, специальные запросы) - они могут использовать одни и те же данные в качестве входных данных. Но в настоящее время я делаю большую часть своей работы через пчелиный воск.
источник
Свинья позволяет загружать данные и пользовательский код в любой точке конвейера. Это может быть особенно важно, если данные являются потоковыми данными, например данными со спутников или приборов.
Hive, основанный на RDBMS, требует, чтобы данные были сначала импортированы (или загружены) и после этого с ними можно было работать. Поэтому, если вы использовали Hive для потоковой передачи данных, вам пришлось бы продолжать заполнять сегменты (или файлы) и использовать hive для каждого заполненного блока, в то время как другие блоки сохраняют новые поступающие данные.
Свинья также использует ленивую оценку. Это обеспечивает большую простоту программирования, и его можно использовать для анализа данных различными способами с большей свободой, чем в SQL-подобном языке, таком как Hive. Поэтому, если вы действительно хотите анализировать матрицы или шаблоны в некоторых неструктурированных данных, которые у вас есть, и хотите делать интересные вычисления на них, с помощью Pig вы можете пройти некоторое расстояние, а с Hive вам нужно что-то еще, чтобы поиграть с результатами.
Свинья быстрее в импорте данных, но медленнее в реальном исполнении, чем дружественный к СУБД язык, такой как Hive.
Свинья хорошо подходит для распараллеливания, и поэтому, возможно, она имеет преимущество для систем с огромными наборами данных, т. Е. В тех системах, где вас больше волнует пропускная способность ваших результатов, чем задержка (время получения какого-либо конкретного набора результатов).
источник
Улей против свиньи
Hive - это интерфейс SQL, который позволяет пользователям, знакомым с SQL, или другим инструментам, таким как Tableu / Microstrategy / любой другой инструмент или язык, имеющий интерфейс SQL
PIG больше похож на конвейер ETL ... с пошаговыми командами, такими как объявление переменных, циклы, итерации, условные операторы и т. Д.
Я предпочитаю писать сценарии Pig, а не куст QL, когда я хочу написать сложную пошаговую логику. Когда мне удобно писать один sql для извлечения данных, которые я хочу, я использую Hive. для улья вам нужно определить таблицу перед запросом (как в RDBMS)
Назначение обоих различно, но под капотом оба делают одно и то же, преобразуя их в программы сокращения карт. Также сообщество Apache с открытым исходным кодом добавляет все больше и больше возможностей к обоим проектам.
источник
Прочитайте разницу между PIG и HIVE в этой ссылке.
http://www.aptibook.com/Articles/Pig-and-hive-advantages-disadvantages-features
Все аспекты даны. Если вы не уверены, что выбрать, вы должны увидеть эту веб-страницу.
источник
Pig-latin - стиль передачи данных, больше подходит для программиста. В то время как sql больше подходит для аналитиков, которые привыкли к sql. Для сложной задачи, для куста, вам нужно вручную создать временную таблицу для хранения промежуточных данных, но это не обязательно для свиньи.
Свинья-латина подходит для сложной структуры данных (например, небольшой график). В pig есть структура данных, называемая DataBag, которая является коллекцией Tuple. Иногда вам нужно вычислить метрики, которые включают несколько кортежей (между кортежами есть скрытая связь, в этом случае я бы назвал это графиком). В этом случае очень легко написать UDF для вычисления метрик, которые включают несколько кортежей. Конечно, это можно сделать в улье, но это не так удобно, как у свиньи.
Написание UDF у свиньи, на мой взгляд, намного проще, чем в Hive.
Свинья не имеет поддержки метаданных (или это необязательно, в будущем она может включать hcatalog). Hive имеет метаданные таблиц, хранящиеся в базе данных.
Вы можете отлаживать сценарий PIG в локальной среде, но кусту будет сложно это сделать. Причина в пункте 3. Вам необходимо настроить метаданные улья в вашей локальной среде, что занимает очень много времени.
источник
Ниже я нашел полезную ссылку, чтобы узнать, как и когда использовать HIVE и PIG.
http://www.hadoopwizard.com/when-to-use-pig-latin-versus-hive-sql/
источник
Вот несколько дополнительных ссылок на использование Pig или Hive.
http://aws.amazon.com/elasticmapreduce/faqs/#hive-8
http://www.larsgeorge.com/2009/10/hive-vs-pig.html
источник
По ссылке: 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 лучше всего подходит для приложений хранилища данных, где поддерживается большой набор данных и используется для анализа, отчетов и т. Д.
источник
Проще говоря, Pig - это платформа высокого уровня для создания программ MapReduce, используемых с Hadoop, используя сценарии pig, мы обработаем большой объем данных в желаемом формате.
Как только обработанные данные получены, эти обработанные данные хранятся в HDFS для последующей обработки для получения желаемых результатов.
Поверх хранимых обработанных данных мы будем применять SQL-команды HIVE для получения желаемых результатов, внутри этой команды sql hive sql запускаются программы MAP Reduce.
источник
Чтобы дать краткий обзор обоих уровней, вкратце:
1) Свинья - это реляционная алгебра над хадупом
2) Hive - это SQL over Hadoop (на один уровень выше Pig)
источник
Что может сделать HIVE, что невозможно в PIG?
Разбиение можно выполнить с помощью HIVE, но не в PIG, это способ обойти вывод.
Что может сделать свинья, что невозможно при ВИЧ?
Позиционные ссылки - даже если у вас нет имен полей, мы можем ссылаться, используя позицию, такую как $ 0 - для первого поля, $ 1 для второго и так далее.
И еще одно принципиальное отличие: PIG не нужна схема для записи значений, но HIVE действительно нужна схема.
Вы можете подключиться из любого внешнего приложения к HIVE, используя JDBC и другие, но не с помощью PIG.
Примечание. Оба выполняются поверх HDFS (распределенная файловая система hadoop), а операторы преобразуются в программы Map Reduce.
источник
Когда мы используем
Hadoop
в этом смысле, это означает, что мы пытаемся обрабатывать огромные данные. Конечной целью обработки данных будет создание контента / отчетов из него.Таким образом, он состоит из двух основных видов деятельности:
1) Загрузка данных Обработка
2) Генерация контента и использование его для отчетности / и т. Д.
Загрузка / Обработка данных -> Свинья была бы полезна в этом.
Это помогает как ETL (Мы можем выполнять операции etl, используя сценарии pig.).
После обработки результата мы можем использовать куст для генерации отчетов на основе обработанного результата.
Улей: Он построен на основе hdf для складской обработки.
Мы можем легко создавать отчеты adhoc, используя улей из обработанного контента, сгенерированного из pig.
источник
Свинья ест что угодно! Это означает, что он может потреблять неструктурированные данные.
Улей требует схемы.
источник
Свинья полезна для рабочих нагрузок типа ETL. Например, набор преобразований, которые вы должны делать со своими данными каждый день.
Улей светит, когда вам нужно выполнить специальные запросы или просто хотите изучить данные. Иногда он может выступать в качестве интерфейса для вашего уровня визуализации (Tableau / Qlikview).
Оба имеют важное значение и служат разным целям.
источник