Можно ли настроить cgroups
или Hadoop таким образом, чтобы каждый процесс, созданный TaskTracker, присваивался определенной группе?Hadoop: Использование групп для задач TaskTracker
Я хочу использовать ограничения памяти, используя cgroups
. Можно назначить группу TaskTracker, но если рабочие места могут привести к хаосу, TaskTracker, вероятно, также будет убит oom-killer
, потому что они находятся в одной группе.
Предположим, у меня 8 ГБ памяти на машине. Я хочу зарезервировать 1,5 ГБ для DataNode и системных утилит и позволить Hadoop TaskTracker использовать 6,5 ГБ памяти. Теперь я запускаю Работу с использованием потокового API на 4 пояса и 2 редуктора (каждый из них теоретически может использовать 1 ГБ ОЗУ), который ест больше памяти, чем разрешено. Теперь предел памяти cgroup
будет удален, а oom-killer начнет убивать задание. Я предпочел бы использовать группу для каждой задачи «Карта» и «Уменьшить», например. a cgroup
, который ограничен памятью 1 ГБ.
Это настоящая или более теоретическая проблема? Неужели oom-killer
действительно убьет Hadoop TaskTracker или он начнет сначала убивать разветвленные процессы? Если последнее в большинстве случаев верно, моя идея, вероятно, сработает. Если нет - плохая работа все равно будет убивать TaskTracker на всех машинах кластера и требует ручных перезапусков.
Есть ли что-нибудь еще, что нужно искать при использовании групп?
Да. Проблема заключается в том, что 'ulimit' разрешает только виртуальную память, и из-за этого трудно установить хорошие лимиты, а потоковые задачи не подпадают под ограничения для Java-заданий. Мне нужно какое-то надежное решение, так как кластер будет использоваться учащимися и персоналом лота и должен работать без проблем. –