Разница между свиньей и улей? Почему оба?
Мой фон - 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 хорошо подходит для распараллеливания, и поэтому он может иметь преимущество для систем, где массивы данных огромны, то есть в системах, где вас больше интересует пропускная способность ваших результатов, чем латентность (время, необходимое для получения каких-либо конкретных данных результат).
Ответ 8
Прочитайте разницу между PIG и HIVE в этой ссылке.
http://www.aptibook.com/Articles/Pig-and-hive-advantages-disadvantages-features
Даны все аспекты. Если вы находитесь в путанице, которую нужно выбрать, вы должны увидеть эту веб-страницу.
Ответ 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. Вам необходимо настроить метаданные улей в вашей локальной среде, очень трудоемкие.
Ответ 11
Я нашел ниже полезную ссылку, чтобы узнать, как и когда использовать HIVE и PIG.
http://www.hadoopwizard.com/when-to-use-pig-latin-versus-hive-sql/
Ответ 12
Вот несколько дополнительных ссылок для использования Pig или Hive.
http://aws.amazon.com/elasticmapreduce/faqs/#hive-8
http://www.larsgeorge.com/2009/10/hive-vs-pig.html
Ответ 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).
Оба важны и служат различной цели.