2013-05-26 12 views
45

Недавно я начал изучать запросы больших наборов данных CSV, лежащих на HDFS, используя Hive и Impala. Как я и ожидал, я получил лучшее время отклика с Impala по сравнению с Hive для запросов, которые я использовал до сих пор.Как impala обеспечивает более быструю реакцию запроса по сравнению с hive

Мне интересно, существуют ли какие-либо типы запросов/вариантов использования, которые по-прежнему нуждаются в улье и где Импала не подходит.

Как Impala обеспечивает более быструю реакцию запроса по сравнению с Hive для тех же данных на HDFS?

ответ

92

Вы должны увидеть Impala как «SQL на HDFS», в то время как Hive больше «SQL on Hadoop».

Иными словами, Impala даже не использует Hadoop вообще. У него просто есть демоны, запущенные на всех ваших узлах, которые кэшируют некоторые данные, находящиеся в HDFS, так что эти демоны могут быстро возвращать данные, не выполняя всю работу Map/Reduce.

Причина этого в том, что на выполнение задания Map/Reduce заданы определенные накладные расходы, поэтому при коротком замыкании Map/Reduce в целом вы можете получить довольно большой выигрыш во время выполнения.

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

+0

Спасибо за это объяснение. «Impala не обеспечивает отказоустойчивости по сравнению с Hive», означает ли это, если узел идет во время обработки запроса, тогда он терпит неудачу. У вас был другой сценарий (ы). – techuser

+3

@Integrator Из интервью в мае 2013 года один из менеджеров продуктов в Cloudera подтвердил, что в его текущей реализации, если узел не выполняет средний запрос, этот запрос будет прерван, и пользователю потребуется переиздать этот запрос (http: //www.datanami.com/datanami/2013-05-01/cloudera_releases_impala_into_the_wild.html) –

+0

Благодарим вас за ответ. – techuser

28

IMHO, SQL на HDFS и SQL на Hadoop - это то же самое. Ведь Hadoop HDFS + MapReduce. Поэтому, когда мы говорим о SQL на HDFS, понимается, что это SQL на Hadoop.

Возвращаясь к актуальному вопросу, Impala обеспечивает более быструю реакцию, так как использует MPP (массивная параллельная обработка), в отличие от Hive, который использует MapReduce под капотом, что связано с некоторыми начальными накладными расходами (как указал Чарльз сэр). Массовая параллельная обработка - это тип вычислений, который использует много отдельных процессоров, работающих параллельно, для выполнения одной программы, где каждый процессор имеет собственную выделенную память. Сам факт, что Impala, основанный на MPP, не включает накладные расходы на задания MapReduce , а именно: настройка и создание задания, назначение слотов, создание разбиений, создание карт и т. Д., Делает его невероятно быстрым.

Но это не означает, что Impala является решением всех ваших проблем. Будучи интенсивно использующим память (MPP), он не подходит для задач, требующих больших операций с данными, таких как объединения и т. Д., Поскольку вы просто не можете вместить все в память. Здесь Хейв лучше подходит.

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

НТН

+11

«SQL на HDFS и SQL на Hadoop одинаковы»: ну, на самом деле, не так, поскольку (как вы говорите) «SQL on hadoop» = «SQL на hdfs с использованием m/r», т.е. «SQL on hdfs» обходит m/r полностью. – davek

+1

Impala, Presto и другие быстрые новые механизмы запросов используют данные в HDFS, но * не * основаны на MapReduce. Они полностью обходят его. – btubbs

+1

Я никогда не говорил, что импала является SQL на HDFS с использованием MR. В моем ответе четко указано, что он использует MPP. – Tariq

6

Есть некоторые ключевые особенности в антилопы, что делает его быстро.

  1. Он не использует карту/уменьшения, которые являются очень дорогими раскошелиться в отдельных виртуальных машинах.Он запускает отдельный Impala Daemon, который разбивает запрос и запускает их параллельно и объединяет результирующий набор в конце.

  2. Он выполняет большую часть своей работы в памяти.

  3. Он использует hdfs для хранения, что быстро для больших файлов. Он кэширует как можно больше запросов от результатов к данным.

  4. Он поддерживает новый формат файла, такой как паркет, который является столбчатым файлом . Поэтому, если вы используете этот формат, это будет быстрее для запросов, где вы получаете доступ к нескольким столбцам большую часть времени.

+0

Но как формат файла паркета помогает в запросе запросов RDBMS ... Я изучаю Impala, так что просто курионы. Делите, если у вас есть четкая документация. Спасибо –

+0

паркет - это колоновое хранилище и с использованием паркета вы получаете все те преимущества, которые вы можете получить в столбчатой ​​базе данных. Его намного быстрее, когда вы используете несколько столбцов, чем все из них в таблицах в большинстве ваших запросов. –

+0

Улей теперь также поддерживает паркет, поэтому ваш 4-й пункт больше не является разницей между Импалой и Улей. –

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

  • Нет связанных вопросов^_^