Как Hive решает, когда использовать карту, а когда нет? - PullRequest
8 голосов
/ 19 сентября 2011

В качестве простого примера,

select * from tablename;

НЕ пинается при уменьшении карты, в то время как

select count(*) from tablename;

ДЕЛАЕТ. Какой общий принцип используется, чтобы решить, когда использовать уменьшение карты (по ульям)?

Ответы [ 4 ]

8 голосов
/ 19 сентября 2011

Как правило, для любого вида агрегации, например min / max / count, требуется задание MapReduce. Вероятно, вам не все это объяснит.

Hive, в стиле многих СУБД, имеет ключевое слово EXPLAIN, которое описывает, как ваш запрос Hive преобразуется в задания MapReduce. Попробуйте выполнить объяснение для обоих примеров запросов и посмотрите, что он пытается сделать за кулисами.

4 голосов
/ 11 января 2018

Всякий раз, когда мы запускаем запрос типа select * from tablename , Hive считывает файл данных и извлекает все данные без какой-либо агрегации (min / max / count и т. Д.). Это будет вызывать FetchTask , а не mapreduce .

Это также методика оптимизации в Hive. Свойство hive.fetch.task.conversion может (т.е. задача FETCH) минимизировать задержку при уменьшении затрат на карту.

Это похоже на чтение файла hadoop: hadoop fs -cat filename

Но если мы используем , выбираем colNames из таблицы , для этого требуется задание сокращения карты, поскольку ему нужно извлечь «столбец» из каждой строки, анализируя его из загружаемого файла.

1 голос
/ 20 сентября 2011

выбрать * из таблицы;

Просто считывает необработанные данные из файлов в HDFS, поэтому без MapReduce это происходит намного быстрее.

0 голосов
/ 27 апреля 2016

Это метод оптимизации, задача hive.fetch.task.conversion может (FETCH) минимизировать задержку издержек mapreduce.

При выполнении SELECT, LIMIT, FETCH запрашивает это свойство, пропускает mapreduce и использует задачу FETCH.

Это свойство может иметь 3 значения - none, minimal (по умолчанию) и more.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...