2016-07-19 2 views
1

Я использую hive,Как уменьшить количество картографов, когда я запускаю запрос куста?

У меня есть 24 файла json с общим размером 300 МБ (в одной папке), поэтому я создал одну внешнюю таблицу (т.е. таблицу1), и я загрузил данные (то есть 24 файла) Таблица.

Когда я запускаю запрос выбора поверх этой внешней таблицы (например, таблицы1), я заметил, что работают 3 карты и 1 редуктор.

После этого я создал еще одну внешнюю таблицу (например, таблицу2).

Я сжал свои входные файлы (папка, содержащая 24 файла).

Пример: BZIP2

Так сжимать данные, но 24 файлов, созданных с расширением «.BZiP2» (i.e..file1.bzp2, ... ..file24.bzp2).

После этого я загрузил сжатые файлы в свою внешнюю таблицу.

Теперь, когда я запускаю запрос select, он берет 24 карты и 1 редуктор. И наблюдаемое время процессора занимает больше времени по сравнению с несжатыми данными (например, файлы).

Как уменьшить количество картографов, если данные находятся в сжатом формате (например, запрос выбора таблицы2)?

Как уменьшить время процессора, если данные находятся в сжатом формате (например, запрос выбора таблицы2)? Как время процессора повлияет на производительность?

ответ

1

Количество картографов может быть меньше, чем количество файлов, только если файлы находятся на том же узле данных. Если файлы расположены на разных datanodes, количество mappers никогда не будет меньше количества файлов. Сконцентрируйте все/некоторые файлы и поместите их в свою таблицу. используйте команду cat для конкатенации несжатых файлов. У вас есть 24 mappers, потому что у вас 24 файла. Параметр mapreduce.input.fileinputformat.split.minsize/maxsize предназначен для разделения больших файлов.

+0

, если больше количества указателей, значит, производительность меньше права? –

+0

Больше карт параллельно - больше производительности. Но если слишком много картографов, скажем, тысяч или более - некоторые из них не будут выполняться (ожидающие), они будут ждать очереди в свободных слотах. Вот почему производительность может ухудшиться. – leftjoin

+0

Для больших данных не слишком много 24 карт. Это зависит от вашего размера кластера/базы данных, для некоторых кластеров 24K или более карточек в порядке – leftjoin

0

Если размер файла 200000 байт, установив значение

set mapreduce.input.fileinputformat.split.maxsize=100000; 
set mapreduce.input.fileinputformat.split.minsize=100000; 

вызовет 200000/100000 = 2 картографами для карты сократить работу

установки значения

set mapreduce.input.fileinputformat.split.maxsize=50000; 
set mapreduce.input.fileinputformat.split.minsize=50000; 

вызовет 200000/50000 = 4 картографами для той же работы.

Read:

splittable-gzip

set-mappers-in-pig-hive-and-mapreduce

how-to-control-the-number-of-mappers-required-for-a-hive-query

+0

Привет Спасибо за ответ, согласно вашему предложению, я поставил «набор mapreduce.input.fileinputformat.split.minsize = 200000000; множество mapreduce.input.fileinputformat.split.maxsize = 500000000; » и я выполнить запрос select, по-прежнему принимающий 24 mappers. У меня есть 24 небольших входных файла размером 1 ГБ. –

+0

Да в соответствии с ответом leftjoin, он будет запускать 1 картограф для каждого входного файла. Я неправильно понял вас. –

+0

Кажется, что ваш ответ правилен для MR. TEZ работает по-разному: https://cwiki.apache.org/confluence/display/TEZ/How+initial+task+parallelism+works – leftjoin

0

Для того, чтобы вручную установить количество картографов в запросе улей, когда TEZ является выполнение двигателя конфигурация tez.grouping.split-count может использоваться как:

Настройка его при входе в улей CLI: set tez.grouping.split-count=4 создаст 4 картографами В Амбари можно добавить запись в hive-site.xml. Если установлено через hive-site.xml, необходимо перезапустить HIVE.

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