Я использую кластер EMR с 3 узлами m5.xlarge (1 master, 2 core) и установленным Flink 1.8 (emr-5.24.1).
На главном узле я запускаю сеанс Flink в кластере YARN с помощью следующей команды:
flink-yarn-session -s 4 -jm 12288m -tm 12288m
Это максимальное количество памяти и слотов в TaskManager, которое позволяет настроить YARN на основе выбранных типов экземпляров.
Во время запуска появляется журнал:
org.apache.flink.yarn.AbstractYarnClusterDescriptor - Cluster specification: ClusterSpecification{masterMemoryMB=12288, taskManagerMemoryMB=12288, numberTaskManagers=1, slotsPerTaskManager=4}
Это показывает, что существует только один диспетчер задач. Также, глядя на YARN Node manager, я вижу, что на одном из узлов ядра работает только один контейнер. YARN Resource Manager показывает, что приложение использует только 50% кластера.
При текущей настройке я бы предположил, что я могу запустить задание Flink с параллелизмом, установленным на 8 (2 TaskManager * 4 слота), но в случае, если переданное задание установило параллелизм более 4, оно через некоторое время завершится неудачно, так как не удалось получить нужные ресурсы.
Если для параллелизма задания задано значение 4 (или меньше), задание выполняется так, как должно. Если посмотреть на использование ЦП и памяти в Ganglia, то видно, что используется только один узел, а другой - плоский.
Почему приложение запускается только на одном узле и как использовать другой узел? Нужно ли было настроить что-то на YARN, чтобы оно также настраивало Flink на другом узле?
В предыдущей версии Flik была опция запуска -n , которая использовалась для указания количества менеджеров задач. Опция устарела.