Думаю, вы неправильно понимаете значение двух режимов развертывания в spark.
Существует два режима развертывания, которые можно использовать для запуска приложений Spark на YARN. В режиме кластера драйвер Spark запускается в главном процессе приложения, которым управляет YARN в кластере, и клиент может уйти после запуска приложения. В режиме клиента драйвер запускается в клиентском процессе, а мастер приложения используется только для запроса ресурсов из YARN.
Из этого я понимаю, что ApplicationMaster всегда существует, и поэтому ему должно быть выделено некоторых ресурсов. Вопрос в том, требуется ли отдельный клиентский процесс вне пряжи.
Для knit
также всегда есть ApplicationMaster и клиентский процесс - он эффективно реализует режим клиента. Кроме того, будет запущен процесс python с планировщиком Dask. Это может быть немного расточительно, и мы хотели бы, чтобы клиентский процесс (java) не требовался, но он мал.
Что касается требований к ApplicationMaster, то они на самом деле очень легки по стандартам YARN. Обратите внимание, что YARN является службой распределения ресурсов и фактически не использует системные ресурсы, когда контейнеры запрашивают их.