2015-06-25 4 views
2

пониманиеApache Hive - это тот же SQL-подобный инструментальный слой для запроса кластеров Hadoop. Мой понимание из Apache Pig - это его процедурный язык для запроса кластеров Hadoop. Итак, если мое понимание верное, Hive и Pig выглядят как два разных способа решения одной и той же проблемы.Hadoop's Hive/Pig, HDFS и MapReduce отношения

Моя проблема, однако, в том, что я не понимаю проблему, которую они одновременно решают в первую очередь!

Скажем, у нас есть БД (реляционную, NoSQL, не имеет значения), который питает данные в HDFS так, что конкретная MapReduce работа может работать против этого ввода данных:

enter image description here

Я смущенный относительно того, какая система Hive/Pig запрашивает! Они запрашивают базу данных? Они запрашивают исходные входные данные, хранящиеся в DataNodes на HDFS? Выполняют ли они небольшие специальные рабочие задания на лету и сообщают свои результаты/результаты?

Какова взаимосвязь между этими инструментами запросов, данными ввода задания MR, хранящимися на HDFS, и самой работой MR?

ответ

3

Apache Pig и Apache Hive загружают данные из HDFS, если вы не запускаете их локально, и в этом случае он будет загружать его локально. Как получить данные из БД? Это не. Вам нужна другая структура для экспорта данных в вашу традиционную БД в вашу HDFS, такую ​​как Sqoop.

Как только у вас есть данные в HDFS, вы можете начать работать с Pig and Hive. Они никогда не запрашивают БД. В Apache Свиньи, например, вы можете загрузить свои данные с помощью загрузчика Pig:

A = LOAD 'path/in/your/HDFS' USING PigStorage('\t'); 

Как для улья, необходимо создать таблицу, а затем загрузить данные в таблицу:

LOAD DATA INPATH 'path/in/your/HDFS/your.csv' INTO TABLE t1; 

Опять же, данные должны быть в HDFS.

Как это работает, все зависит. Традиционно он всегда работал с механизмом выполнения MapReduce. Оба Hive и Pig анализируют заявления, которые вы пишете в PigLatin или HiveQL, и переводите их в план выполнения, состоящий из определенного количества заданий MapReduce, в зависимости от плана. Однако теперь он может также перевести его в Tez, новый механизм выполнения, который, возможно, слишком велик для правильной работы.

Зачем нужна свиньи или улей? Ну, вы действительно не нужны эти рамки. Все, что они могут сделать, вы можете сделать это, написав собственные задания MapReduce или Tez.Однако, например, для записи операции JOIN в MapReduce может потребоваться сотни или тысячи строк кода (правда), в то время как это только одна строка кода в Pig или Hive.

+0

Спасибо @Balduz (+1 и зеленый чек) - это имеет смысл! – smeeb

2

Я не думаю, что вы можете запросить любые данные с помощью Hive/Pig, фактически не добавляя к ним. Поэтому сначала вам нужно добавить данные. И эти данные могут поступать из любого места, и вы просто указываете путь для данных, которые нужно выбрать или добавить непосредственно к ним. После ввода данных запрос извлекает данные только из этих таблиц.

Под ними они используют сокращение карты как инструмент для выполнения этого процесса. Если у вас есть данные, лежащие где-то и нуждающиеся в анализе, вы можете напрямую перейти на карту сокращения и определить свою собственную логику. Улей в основном на фронте SQL. Таким образом, вы получаете функции запросов, похожие на SQL, а на бэкэнд, карта уменьшает работу. Надеюсь, эта информация поможет

+0

Спасибо @Ramzy (+1) - но мой основной вопрос по-прежнему не совсем решен. Мое * понимание * заключается в том, что MapReduce * только * работает с входными данными, которые хранятся на HDFS. Если это так, то как Hive отправляет данные MapReduce из БД? Для меня это двухчастный процесс: (a) данные должны быть извлечены из БД и загружены в HDFS, а затем (b) Hive может затем запустить MapReduce на этих загруженных (основанных на HDFS) данных. Вы ответили на вторую часть, но мне все еще интересно, как данные поступают из БД в HDFS в первую очередь! Еще раз спасибо! – smeeb

+0

Sqoop - это утилита, которая выполняет загрузку данных с SQL на HDFS. Вы можете использовать oozie для планирования задачи sqoop на основе вашей задачи. – Ramzy

0

Я не согласен с тем, что Pig and Hive решает ту же проблему, Hive предназначен для запроса данных, хранящихся на hdfs, в качестве внешних или внутренних таблиц, Pig предназначен для управления потоком данных, хранящимся на hdfs в Directed Acyclic Graph, это их основная цели и мы не заботиться о других целях, здесь я хочу сделать различие между:

  • запрашивая данные (основная цель улья), который получает ответы на вопросы о ваших данных, например: сколько различных пользователей посетив мой сайт за месяц в этом году.
  • Управление потоком данных (основная цель Pig) заключается в том, чтобы ваши данные переходили из исходного состояния, чтобы иметь в конце другое состояние посредством преобразований, например: данные в местоположении A, отфильтрованные по критерию c, соединенные данными в местоположении B, хранящиеся в местоположении C.
0

Smeeb, Pig, Hive делает то же самое, я имею в виду обработку данных, которые поступают в файлы или какой-либо формат. здесь, если вы хотите обрабатывать данные, присутствующие в RDMS, сначала получите эти данные в HDFS с помощью Sqoop (SQL + HADOOP).

Hive использует HQL, как SQL для обработки, Pig использует добрый поток с помощью piglatin. Улей хранит все входные данные в формате таблиц, поэтому, прежде всего, перед загрузкой данных в Hive создайте таблицу улья, эта структура (метаданные) будет храниться в любом RDMS (Mysql). Затем загрузите с помощью LOAD DATA INPATH 'path/in/your/HDFS/your.csv' INTO TABLE t1;

Смежные вопросы