Как Hive решает, когда использовать уменьшение карты, а когда нет?

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

select * from tablename;

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

select count(*) from tablename;

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


person Lazer    schedule 19.09.2011    source источник


Ответы (4)


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

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

person Donald Miner    schedule 19.09.2011

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

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

Это как если бы мы читали файл Hadoop: hadoop fs -cat filename

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

person Pardeep Sharma    schedule 11.01.2018
comment
С более новыми версиями улья вторая часть больше не соответствует действительности..select column from tablename не будет запускать MR с minimal или more настройкой hive.fetch.task.conversion - person coderplus; 01.07.2018

выберите * из имени таблицы;

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

person wlk    schedule 20.09.2011
comment
но для большого файла он должен читать со всех узлов параллельно. Hive делает это без MR? - person ernesto; 16.04.2015

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

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

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

person user6260103    schedule 27.04.2016