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

Мой фон - 4 недели в мире Hadoop. Немного погрузился в Hive, Pig и Hadoop, используя Cloudera Hadoop VM. Прочтите документ Google на странице "Уменьшение карты" и "СГФ" (Ссылка в формате PDF).

Я понимаю, что -

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

  • Свинья сидит поверх Hadoop и в принцип может также сидеть на вершине Дриада. Возможно, я ошибаюсь, но улей тесно связан с Hadoop.

  • Обе команды Pig Latin и Hive компилируется в Map и Reduce jobs.

Мой вопрос. Какова цель иметь, когда одна (скажем, Свинья) может служить цели. Это только потому, что Пиг евангелизирован Yahoo! и Улей Facebook?

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

Я нашел это наиболее полезным (хотя он год назад) - https://developer.yahoo.com/blogs/hadoop/pig-hive-yahoo-464.html

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

Об инкрементальных изменениях/обновлениях наборов данных:

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

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

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

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

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

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

Ответ 4

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

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

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

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

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

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

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

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

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

  • Hive не поддерживает Avro, но PIG. EDIT: Hive поддерживает Avro, укажите serde как org.apache.hadoop.hive.serde2.avro

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

Ответ 5

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

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

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

Улей: распределенный хранилище данных

Ответ 6

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

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

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

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

Ответ 7

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

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

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

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

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

Ответ 9

Hive Vs Pig-

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

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

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

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

Ответ 10

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

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

  • Написание UDF в свинье намного проще, чем в Hive, на мой взгляд.

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

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

Ответ 13

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

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

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

Ответ 14

Из ссылки: 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 Analyttic Processing. Таким образом, Hive лучше всего подходит для приложений хранилища данных, где большой набор данных поддерживается и запускается для получения информации, отчетов и т.д.

Ответ 15

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

1) Свинья является реляционной алгеброй над хаопом

2) Hive - это SQL over hadoop (один уровень выше Pig)

Ответ 16

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

Таким образом, он состоит из двух основных видов деятельности 1) Загрузка обработки данных 2) Создайте контент и используйте его для отчета /etc..

Загрузка/сбор данных → Свинья были бы полезны в этом. Это помогает как ETL (мы можем выполнять операции etl с помощью скриптов свиней). После обработки результата мы можем использовать куст для создания отчетов на основе обработанного результата.

Улей: он построен поверх hdfs для обработки хранилища. Мы можем легко генерировать отчеты adhoc, используя куст из обработанного содержимого, созданного свиньей.

Ответ 17

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

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

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

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

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

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

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

Ответ 18

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

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

Ответ 19

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

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

Оба важны и служат различной цели.