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?
Сейчас я просто подсчитываю количество файлов во входной папке, но это не очень хорошее решение, так как файл может быть больше, чем размер блока, и привести к нескольким входным разбиениям и, следовательно, к сопоставителям. Какие-либо предложения?
2 ответа
Наконец, кажется, что conf.get("mapred.map.tasks"))
Работает ли в конце концов, когда я генерирую исполняемый файл JAR и запускаю свою программу в кластере / локально. Теперь вывод "картографических задач" правильный.
Это не сработало только при локальном запуске моей программы mapreduce на hadoop из eclipse-plugin. Возможно, это проблема затмения-плагина.
Я надеюсь, что это поможет кому-то еще с той же проблемой. Спасибо за ответ!
Я не думаю, что есть простой способ сделать это. Я реализовал свой собственный класс InputFormat, если вы сделаете это, вы сможете реализовать метод для подсчета количества InputSplits, которые вы можете запросить в процессе, который запускает задание. Если вы введете этот номер в какой-либо параметр конфигурации, вы можете прочитать его в процессе отображения.
Кстати, количество входных файлов не всегда равно количеству картографов, так как большие файлы могут быть разделены.