На фазе карты моей программы мне нужно знать общее количество создаваемых mappers. Это поможет мне в процессе создания ключа на карте (я хочу испустить столько пар ключ-значение для каждого объекта, сколько числа mappers).hadoop получает фактическое количество счетчиков
Я знаю, что установка числа картографов - это всего лишь подсказка, но каков путь к , получите фактическое количество картографов. Я попытался следующие в методе конфигурирования моего Mapper:
public void configure(JobConf conf) {
System.out.println("map tasks: "+conf.get("mapred.map.tasks"));
System.out.println("tipid: "+conf.get("mapred.tip.id"));
System.out.println("taskpartition: "+conf.get("mapred.task.partition"));
}
Но я получаю результаты: (?)
map tasks: 1
tipid: task_local1204340194_0001_m_000000
taskpartition: 0
map tasks: 1
tipid: task_local1204340194_0001_m_000001
taskpartition: 1
, что означает, что есть две карты задачи, а не только один, как это было напечатано (что вполне естественно, так как у меня есть два небольших входных файла). Не должно ли число после задач карты быть 2?
На данный момент я просто подсчитываю количество файлов во входной папке, но это нехорошее решение, так как файл может быть больше размера блока и приводить к более чем одному входному дроблению и, следовательно, картографам. Какие-либо предложения?
http://wiki.apache.org/hadoop/HowManyMapsAndReduces Это зависит от вашего блока и количества файлов. Таким образом, вы могли бы рассчитать его вне mapreduce, если хотите, а затем добавить этот номер в распределенный кеш вашей работы. – DDW
Возможный дубликат [Hadoop MapReduce: количество карточек по умолчанию] (http://stackoverflow.com/questions/10591278/hadoop-mapreduce-default-number-of-mappers) – harpun
Спасибо @irW за комментарий! У меня уже есть что-то подобное, но мне было интересно, есть ли что-то вроде стандартного getter, вместо повторной реализации метода, который уже существует и уже вызван. Я продолжу это решение, если нет ничего лучше. – vefthym