2016-11-10 36 views
2

我正在运行一个包含两个EC2实例(m4.xlarge)的小型Spark群集。强制驱动程序在使用“--deploy-mode cluster”运行的spark独立群集中的特定从服务器上运行

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

--executor存储器16克

--executor-铁芯4

--driver-8G内存

--driver-芯2

- -deploy-mode客户端

这会导致我的单个从属服务器上运行4个内核和16Gb内存的单个执行程序。驱动程序在主节点上运行“外部”群集(即不由主节点分配其资源)。

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

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

有没有办法强制spark master为我的驱动程序使用特定的worker/slave?由于Spark知道有两个从节点,一个有2个内核,另一个有4个内核,而我的驱动程序需要2个内核,而我的执行程序需要4个内核,所以理想情况下可以找到正确的最佳位置,但这不适用似乎是这样。

任何意见/建议感激地收到!

谢谢!

+0

运气好吗?我正在处理类似的问题,并想知道是否有可能。 – PablodeAcero

+0

我也面临同样的问题。 – desaiankitb

+0

找到任何解决方案...? –

回答

1

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

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

相关问题