У меня возникли проблемы с поиском наилучшего способа настройки моего кластера Hadoop (CDH4), работающего с MapReduce1. Я в ситуации, когда мне нужно запустить оба mappers, которым требуется такое большое количество кучи Java-кучи, что я не мог бы запустить более 1 mapper на узел, но в то же время я хочу иметь возможность запускать задания которые могут извлечь выгоду из многих карт на узел.Гибкое распределение пространства кучи в Hadoop MapReduce Задачи Mapper
Я настраиваю кластер через интерфейс управления Cloudera, а Max Map Tasks и mapred.map.child.java.opts выглядят довольно статическими.
То, что я хотел бы иметь, - это что-то вроде пула пространства кучи с доступным X GB, который будет учитывать оба вида заданий без необходимости перенастраивать службу MapReduce каждый раз. Если я запустил 1 mapper, он должен назначить кучу XGB - если я запустил 8 карт, он должен назначить кучу X/8 GB.
Я рассмотрел как максимальную виртуальную память, так и пределы памяти компактной/жесткой памяти группы, но ни один из них не даст мне именно то, что я хочу. Максимальная виртуальная память не эффективна, поскольку она по-прежнему является заданием каждой задачи. Параметр Cgroup является проблематичным, поскольку на самом деле он не ограничивает отдельные задачи меньшим количеством кучи, если их больше, но, скорее, позволит задаче использовать слишком много памяти, а затем убить процесс, когда это произойдет.
Можно ли настроить поведение, которое я хочу достичь?
Спасибо!Я не понимал, что это можно установить на уровне конфигурации для каждого задания. Это должно сделать это. Мне кажется, что, поскольку это возможно, рекомендуется установить настройки Cgroup, так как любой обычный пользователь кластера может случайно запросить слишком большой размер кучи и начать сбрасывать узлы. Я также рассмотрю возможность перехода на MR2. –