Моя команда создала приложение Java, используя библиотеки Hadoop для преобразования набора входных файлов в полезный вывод. Учитывая текущую нагрузку, один многоядерный сервер будет работать хорошо в течение следующего года или около того. У нас (пока) нет необходимости использовать многосерверный кластер Hadoop, но мы решили запустить этот проект «в процессе подготовки».
Когда я запускаю это приложение в командной строке (или в eclipse или netbeans), я еще не удалось убедить его использовать более одной карты и / или уменьшить поток за раз. Учитывая тот факт, что инструмент очень сильно загружает процессор, эта «однопоточность» является моим текущим узким местом.
Когда я запускаю его в профилировщике netbeans, я вижу, что приложение запускает несколько потоков для различных целей, но только одну карту / уменьшение выполняется в тот же момент.
Входные данные состоят из нескольких входных файлов, поэтому Hadoop должен, по крайней мере, иметь возможность запускать 1 поток на каждый входной файл одновременно для фазы карты.
Что мне делать в хотя бы 2 или даже 4 активных потока работают (что должно быть возможно в течение большей части времени обработки этого приложения)?
Я ожидаю, что это будет что-то очень глупое, что я упустил из виду.
Я только что нашел это: https://issues.apache.org/jira/browse/MAPREDUCE-1367 Это реализует функцию, которую я искал в Hadoop 0.21 Он вводит флаг mapreduce.local.map.tasks.maximum для управления им.
На данный момент я также нашел решение, описанное здесь, в этом вопросе .
Я не уверен, что я прав, но когда вы выполняете задачи в локальном режиме, у вас не может быть нескольких преобразователей / редукторов.
В любом случае, чтобы установить максимальное количество запущенных картографов и редукторов, используйте параметры конфигурации mapred.tasktracker.map.tasks.maximum
и mapred.tasktracker.reduce.tasks.maximum
по умолчанию. эти параметры установлены на 2
, так что я могу быть прав.
Наконец, если вы хотите подготовиться к многоузловому кластеру, сразу запустите его полностью распределенным способом, но пусть все серверы (namenode, datanode, tasktracker, jobtracker, ...) работают на одной машине
Согласно этой ветке в списке рассылки пользователей hadoop.core , вы захотите изменить настройку mapred.tasktracker.tasks.maximum
на максимальное количество задач. вы бы хотели, чтобы ваша машина обрабатывала (количество ядер).
Это (и другие свойства, которые вы, возможно, захотите настроить) также задокументированы в основной документации по настройке кластера / демонов .