Увеличьте количество карт Hive в Hadoop 2

Я создал таблицу HBase из Hive и пытаюсь выполнить простую агрегацию. Это мой запрос Hive:

from my_hbase_table 
select col1, count(1) 
group by col1;

На карте уменьшения задания появляются только 2 картографа, и я бы хотел увеличить это количество. С простой задачей уменьшения карты я бы настроил пряжу и память картографа, чтобы увеличить количество картографов. Я пробовал в Hive следующее, но это не сработало:

set yarn.nodemanager.resource.cpu-vcores=16;
set yarn.nodemanager.resource.memory-mb=32768;
set mapreduce.map.cpu.vcores=1;
set mapreduce.map.memory.mb=2048;

ЗАМЕТКА:

  • В моем тестовом кластере всего 2 узла
  • В таблице HBase более 5 миллионов записей.
  • Журналы улья показывают HiveInputFormat и количество разделений = 2

person Marsellus Wallace    schedule 13.05.2015    source источник
comment
На сколько регионов разбита ваша таблица HBase?   -  person Venkat    schedule 13.05.2015
comment
Сколько слотов карт доступно в вашем кластере?   -  person Sandeep Singh    schedule 13.05.2015
comment
Сколько слотов карт доступно в вашем кластере?   -  person Mauro Midolo    schedule 14.05.2015


Ответы (3)


Разделить файл меньше, чем значение по умолчанию, не является эффективным решением. Спайтинг в основном используется при работе с большими наборами данных. Значение по умолчанию само по себе имеет небольшой размер, поэтому не стоит снова его разделять.

Я бы порекомендовал выполнить следующую конфигурацию перед вашим запросом. Вы можете применить ее на основе ваших входных данных.

set hive.merge.mapfiles=false;

set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;

set mapred.map.tasks = XX;

Если вы также хотите назначить номер редуктора, вы можете использовать приведенную ниже конфигурацию

set mapred.reduce.tasks = XX;

Обратите внимание, что в Hadoop 2 (YARN) mapred.map.tasks и mapred.reduce.tasks устарели и заменены другими переменными:

mapred.map.tasks     -->    mapreduce.job.maps
mapred.reduce.tasks  -->    mapreduce.job.reduces

Пожалуйста, обратитесь к полезной ссылке ниже, связанной с этим

http://answers.mapr.com/questions/5336/limit-mappers-and-reducers-for-specific-job.html

Не удается увеличить количество задач Hive Mapper?

Как назначаются картографы

Количество картографов определяется количеством разделений, определяемым InputFormat, используемым в задании MapReduce. В типичном InputFormat он прямо пропорционален количеству файлов и их размерам.

предположим, что ваша конфигурация блока HDFS настроена на 64 МБ (размер по умолчанию), и у вас есть файлы размером 100 МБ, тогда они будут занимать 2 блока, а затем 2 сопоставителя будут назначены на основе блоков

но предположим, что если у вас есть 2 файла размером 30 МБ (каждый файл), тогда каждый файл будет занимать один блок, и на основе этого сопоставитель получит задание.

Когда вы работаете с большим количеством небольших файлов, Hive по умолчанию использует CombineHiveInputFormat. С точки зрения MapReduce, это в конечном итоге означает использование CombineFileInputFormat, который создает виртуальные разбиения по нескольким файлам, сгруппированным по общему узлу, когда это возможно. Размер комбинированного сплита определяется

mapred.max.split.size
or 
mapreduce.input.fileinputformat.split.maxsize ( in yarn/MR2);

Поэтому, если вы хотите иметь меньше разделений (меньше картографа), вам нужно установить этот параметр выше.

Эта ссылка может быть полезна, чтобы узнать о ней больше.

Каков размер по умолчанию, который будет использовать каждый модуль отображения Hadoop читал?

Также количество преобразователей и редукторов всегда зависит от доступных слотов преобразователя и редуктора в вашем кластере.

person Sandeep Singh    schedule 13.05.2015
comment
mapred.map.tasks устарел в последних версиях hadoop. Я попытался установить и это, и новый mapreduce.job.maps на X, но это не сработало. Вы уверены, что это сработает на Hadoop2? Кроме того, если количество разбиений равно 2, возможно ли вообще иметь больше картографов, чем разбиений? - person Marsellus Wallace; 13.05.2015
comment
Мне нужно проверить эту конфигурацию в hadoop 2. Я отредактировал свой ответ, и у меня есть пояснения по поводу распределения карт. Надеюсь, это вам поможет. - person Sandeep Singh; 14.05.2015
comment
В Hadoop 2 команда mapper равна mapreduce.job.maps, а команда reducer - mapreduce.job.reduces. - person Sandeep Singh; 21.05.2015

Уменьшите размер разделения ввода по сравнению со значением по умолчанию. Картографы увеличатся.

SET mapreduce.input.fileinputformat.split.maxsize;

person Partha Kaushik    schedule 13.05.2015
comment
Какое значение по умолчанию и что мне установить? Будет ли это работать в Hadoop2 при использовании HBase в качестве входных данных? - person Marsellus Wallace; 13.05.2015
comment
Выполните это свойство без какого-либо значения. УСТАНОВИТЕ mapreduce.input.fileinputformat.split.maxsize; Это напечатает вам значение по умолчанию, то есть максимальный размер разделения по умолчанию. Теперь уменьшите размер разделения по сравнению со значением по умолчанию, установив свойство SET mapreduce.input.fileinputformat.split.maxsize = * Reduced Value *; - person Partha Kaushik; 14.05.2015
comment
Хорошо, но ГДЕ мне выполнить такую ​​команду SET? Прямо в терминале? Прямо в запросе билайн? - person Isaac Amezcua; 24.08.2020

Разделение таблицы HBase должно заставить вашу работу автоматически использовать больше картографов.

Поскольку у вас есть 2 разделения, каждое из них считывается одним картографом. Увеличить нет. расколов.

person Venkat    schedule 14.05.2015