Максимальные контейнеры, которые работают на одном NodeManager (hadoop worker), зависят от множества факторов, таких как количество памяти для NodeManager, а также зависит от конкретных требований приложения.
По умолчанию для yarn.scheduler.*-allocation-*
: 1 ГБ (минимальное размещение), 8 ГБ (максимальное выделение), 1 ядро и 32 ядра. Таким образом, минимальное и максимальное распределение влияет на количество контейнеров на узел.
Итак, если у вас есть 6GB ОЗУ и 4 виртуальных ядра, вот как конфигурация ПРЯЖА должна выглядеть следующим образом:
yarn.scheduler.minimum-allocation-mb: 128
yarn.scheduler.maximum-allocation-mb: 2048
yarn.scheduler.minimum-allocation-vcores: 1
yarn.scheduler.maximum-allocation-vcores: 2
yarn.nodemanager.resource.memory-mb: 4096
yarn.nodemanager.resource.cpu-vcores: 4
Приведенная выше конфигурация говорит Hadoop использовать atmost 4 Гб и 4 виртуальных ядер и что каждый контейнер может иметь от 128 МБ до 2 ГБ памяти и от 1 до 2 виртуальных ядер, с этими настройками вы можете запускать до 2 контейнеров с максимальными ресурсами за раз.
Теперь для MapReduce конкретной конфигурации:
yarn.app.mapreduce.am.resource.mb: 1024
yarn.app.mapreduce.am.command-opts: -Xmx768m
mapreduce.[map|reduce].cpu.vcores: 1
mapreduce.[map|reduce].memory.mb: 1024
mapreduce.[map|reduce].java.opts: -Xmx768m
При такой конфигурации, вы можете теоретически иметь до 4 картографов/редукторы, работающих одновременно в 4 1GB контейнеров. На практике мастер приложения MapReduce будет использовать контейнер размером 1 ГБ, поэтому фактическое количество одновременных карт и редукторов будет ограничено до 3. Вы можете играть с ограничениями памяти, но для их поиска может потребоваться некоторое экспериментирование.
Как правило, вы должны ограничить размер кучи примерно до 75% от общей доступной памяти, чтобы обеспечить бесперебойную работу.
Вы также можете установить память на контейнер, используя свойство yarn.scheduler.minimum-allocation-mb
.
Для более подробной конфигурации для производственных систем используйте этот document от hortonworks в качестве ссылки.
Существует один главный узел с 8 ГБ оперативной памятью и 8VCPU ядрами и 10 подчиненными узлами с 2 ГБ оперативной памяти и 1VCPU ядром на каждом из моих кластеров Hadoop 2.5.2. Для приложения MapReduce создаются 5 входов. Один контейнер работает только на одном подчиненном узле. Какое доверие позволит моему applciaton использовать все/masx slave ndoes. Я хочу запустить приложение с 50 подчиненными ndoes. – Tariq