Моя команда создала приложение 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 для управления им.
Пока я также нашел решение, описанное здесь в этом вопросе .