Hadoop не может установить редукторы> 1
Я использую Hadoop для университетского задания, и у меня работает код, но я столкнулся с небольшой проблемой.
Я пытаюсь установить количество редукторов на 19 (что составляет 0,95 *, как и предполагается в документации). Однако, когда я просматриваю свою работу в трекере задач, он говорит, что всего 1 редуктор.
System.err.println("here");
job.setNumReduceTasks(19);
System.err.println(job.getNumReduceTasks());
Урожайность, как и ожидалось:
here
19
Но в конечном итоге я получаю:
12/05/16 11:10:54 INFO mapred.JobClient: Data-local map tasks=111
12/05/16 11:10:54 INFO mapred.JobClient: Rack-local map tasks=58
12/05/16 11:10:54 INFO mapred.JobClient: Launched map tasks=169
12/05/16 11:10:54 INFO mapred.JobClient: Launched reduce tasks=1
Части карты, которые я перезаписал:
- картопостроитель
- редуктор
- Разметка
- Группировка Компаратор.
Моей первой мыслью было, что разделитель возвращает одно и то же значение для каждого ключа. Я проверяю это, и это было не так.
Я также проверил, что групер работает правильно.
Я не уверен, что еще может быть причиной этого. Если кто-то может помочь, это будет высоко ценится.
Я очень анти-Java человек, поэтому, пожалуйста, попробуйте использовать очень явные примеры.
PS: я не настраивал этот кластер, он был установлен университетом, поэтому я не уверен ни в каких переменных конфигурации. PS: было слишком много кода для публикации, поэтому, пожалуйста, дайте мне знать любой код, в частности, вы хотели бы видеть.
Изменить: TejasP задала мне следующие вопросы:
Вы действительно запускаете код на Hadoop или в локальном режиме? (посмотрите, видны ли ваши вакансии на трекере и треккере).
Да, это можно просмотреть в пользовательском интерфейсе JobTracker. Об этом также сообщает 1 редуктор. А также с Примечание: это имеет редукторы, перечисленные как 1 в файле settings.xml
Вы экспортировали переменные HADOOP в среду?
Да, и они видны в env, и код не компилируется, пока я их не установлю.
env | grep HADOOP
HADOOP_HOME=/mnt/biginsights/opt/ibm/biginsights/IHC
HADOOP_CONF_DIR=/mnt/biginsights/opt/ibm/biginsights/hadoop-conf
Является ли кластер одним узлом или несколькими узлами? И даже если кластер состоит из нескольких узлов, все ли узлы исправны? Есть ли проблема с другими узлами?
Да, есть несколько узлов (10) Отчеты о работе трекера:
Nodes: 10
Map Task Capacity: 20
Reduce Task Capacity: 20
Blacklisted Nodes: 0
Правильно ли вы используете setNumReduceTasks? Как указано выше, я вызвал set, а затем получил и получил обратно значение, которое было задано как (19), но в конечном коде все еще использовался только 1.
Вы можете уменьшить свой код до небольшого кода уменьшения карты, удалив детали (это только для "отладки"). Запустить его. Посмотри что получится. Столкнувшись с той же проблемой, приведите сокращенный код в исходном вопросе.
Я постараюсь редактировать снова с результатами
2 ответа
Несколько моментов, которые нужно учитывать:
- Вы действительно запускаете код на Hadoop или в локальном режиме? (посмотрите, видны ли ваши вакансии на трекерах и трекерах)
- Вы экспортировали переменные HADOOP в среду?
- Является ли кластер одним узлом или несколькими узлами?
- Даже если кластер состоит из нескольких узлов, все ли узлы исправны? Есть ли проблема с другими узлами?
- Правильно ли вы используете setNumReduceTasks? Вы можете уменьшить свой код до небольшого кода уменьшения карты, удалив детали (это только для отладки). Запустить его. Посмотри что получится. Столкнувшись с той же проблемой, приведите сокращенный код в исходном вопросе.
Похоже, вы запускаете его в режиме LocalJobRunner (скорее всего из затмения). В этом режиме, если число задач уменьшения> 1, оно сбрасывает число до 1. Посмотрите на следующие несколько строк из LocalJobRunner.java
int numReduceTasks = job.getNumReduceTasks();
if (numReduceTasks > 1 || numReduceTasks < 0) {
// we only allow 0 or 1 reducer in local mode
numReduceTasks = 1;
job.setNumReduceTasks(1);
}