客户端提交的每个应用程序可以在每个节点管理器中启动多少个 YARN 容器?

Each application submitted by client can launch how many YARN container in each Node Manager?

容器是YARN中的一个抽象概念。当 运行 Spark on YARN 时,每个 Spark 执行器都作为一个 YARN 容器运行。每个客户端提交的应用程序可以在每个节点管理器中启动多少个 YARN 容器?

您可以 运行 在单个 NodeManager 上安装任意数量的执行程序,只要您拥有资源即可。如果你有一个 20gb RAM 和 10 个内核的服务器,你可以在该节点管理器上 运行 10 个 2gb 1core 执行程序。 运行 多个执行程序在同一个节点管理器上是不可取的,因为在执行程序之间混洗数据会产生开销成本,即使它们在同一台机器上处理运行。

每个执行器都在一个 YARN 容器中运行。

取决于您的 YARN 集群有多大,您的数据如何在工作节点之间分布以获得更好的数据局部性,您为您的应用程序请求了多少个执行器,多少资源(每个执行器的核心,每个执行器的内存) ) 你请求每个执行器以及你是否启用了动态资源分配,Spark 决定总共需要多少个执行器,以及每个工作节点启动多少个执行器。

如果您请求 YARN 集群无法容纳的资源,您的请求将被拒绝。

以下是发出 spark-submit 请求时要注意的属性。

  • --num-executors - 你需要的执行者总数
  • --executor-cores - 每个执行器的内核数。建议最多 5 个。
  • --executor-memory - 每个执行器的内存量。
  • --spark.dynamicAllocation.enabled
  • -- spark.dynamicAllocation.maxExecutors