强制驱动程序 运行 在 spark 独立集群 运行 “--deploy-mode cluster” 中的特定从站上

Forcing driver to run on specific slave in spark standalone cluster running with "--deploy-mode cluster"

我正在 运行 建立一个小型 spark 集群,有两个 EC2 实例 (m4.xlarge)。

到目前为止,我已经 运行 在一个节点上设置了 spark master,在另一个节点上设置了一个 spark slave(4 核,16g 内存),然后在 client deploy 中部署我的 spark(streaming)应用程序- 主模式。设置摘要为:

--executor-内存16g

--executor-cores 4

--驱动内存8g

--驱动核心数 2

--部署模式客户端

这会在我的单个从属 运行 4 核和 16Gb 内存上产生单个执行程序。主节点上集群的驱动程序运行s "outside"(即它没有被主节点分配资源)。

理想情况下,我想使用集群部署模式,这样我就可以利用监督选项。我已经在主节点上启动了第二个从节点,给它 2 个内核和 8g 内存(分配的资源较小,以便为主守护进程留下 space)。

当我 运行 我的 spark 作业处于集群部署模式时(使用与上述相同的设置,但使用 --deploy-mode 集群)。大约 50% 的时间我得到了所需的部署,即驱动程序 运行s 通过主节点上的从属 运行ning(具有 2 个内核和 8Gb 的正确资源),这使得原始从节点免费分配一个4核16Gb的执行器。然而,另外 50% 的时间主 运行 是非主从节点上的驱动程序,这意味着我在该节点上获得了一个具有 2 个内核和 8Gb 内存的驱动程序,然后没有留下足够资源的节点启动执行程序(需要 4 个内核和 16Gb)。

有什么办法可以强制 spark master 为我的驱动程序使用特定的 worker / slave?假设 spark 知道有两个从节点,一个有 2 个内核,另一个有 4 个内核,并且我的驱动程序需要 2 个内核,而我的执行程序需要 4 个内核,它会理想地计算出正确的最佳位置,但这不是好像是这样。

非常感谢收到任何想法/建议!

谢谢!

我看这是个老问题了,但还是让我回答一下吧,也许有人会觉得有用。

spark-submit脚本中添加--driver-java-options="-Dspark.driver.host=<HOST>"选项,当提交应用程序时,Spark应该将驱动程序部署到指定的主机。