强制驱动程序在使用“--deploy-mode cluster”

时间:2016-11-10 11:39:04

标签: apache-spark apache-spark-standalone

我正在运行一个小火花群,有两个EC2实例(m4.xlarge)。

到目前为止,我一直在一个节点上运行spark master,在另一个节点上运行单个spark slave(4个内核,16g内存),然后在主服务器上以客户端部署模式部署我的spark(流媒体)应用程序。设置摘要是:

- executor-memory 16g

- executor-cores 4

- driver-memory 8g

- driver-cores 2

- 部署模式客户端

这导致我的单个slave上有一个执行器,运行4个内核和16Gb内存。驱动程序在主节点上的集群“外部”运行(即主机没有为其分配资源)。

理想情况下,我想使用群集部署模式,以便我可以利用监督选项。我在主节点上启动了第二个从站,为它提供了2个内核和8g内存(分配的资源较少,以便为主守护进程留出空间)。

当我在集群部署模式下运行我的spark作业时(使用与上面相同的设置但使用--deploy-mode集群)。大约50%的时间我得到了所需的部署,即驱动程序运行在主节点上运行的从属节点(具有2个核心和8Gb的正确资源),这使得原始从属节点可以自由地分配执行者4芯& 16 GB。然而,另外50%的时间主设备在非主从节点上运行驱动程序,这意味着我在该节点上获得了具有2个核心和1的驱动程序。 8Gb内存,然后没有节点有足够的资源来启动执行程序(需要4核和16Gb)。

有没有办法强制火花大师为我的司机使用特定的工人/奴隶?鉴于spark知道有两个从属节点,一个有2个内核,另一个有4个内核,而我的驱动程序需要2个内核,而我的执行器需要4个内核,理想情况下可以找到正确的最佳位置,但这不是似乎是这样。

感激地收到任何想法/建议!

谢谢!

1 个答案:

答案 0 :(得分:1)

我可以看到这是一个老问题,但让我回答一下,有人可能觉得它很有用。

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