Время прошло, и никто не пытался сформулировать ответ.Поэтому я буду выдвигать некоторые идеи в надежде, что другие укажут на недостатки, если они существуют.
Самая важная вещь в настройке Hadoop - не допускать использования слишком большого количества ресурсов;задания потерпят неудачу, и исключения не всегда помогают быстро определить, что пошло не так.В частности, ресурс памяти вызовет немедленный сбой, и, как указывает вопрос, JVM может попытаться запросить ненужный объем памяти.
Мы должны учитывать процессы, отличные от карты, и сокращать (например, сортировкучто происходит между картой и уменьшением).К сожалению, никто не выдвинул предложение о том, сколько процессов может существовать одновременно.
Итак, вот мое предложение.Если число преобразователей равно M, а число восстановителей равно R, а общее количество виртуальной оперативной памяти на устройстве равно G. В настоящее время я выделяю G / (2 * M + R) объем оперативной памяти для каждого процесса.Коэффициент 2 предполагает, что существует один дополнительный процесс, сортирующий выходные данные каждого процесса карты или выполняющий другую вспомогательную работу.Наконец, я гарантирую, что 2 * M + R