我正在运行一个小火花群,有两个EC2实例(m4.xlarge) .
到目前为止,我一直在一个节点上运行spark master,在另一个节点上运行单个spark slave(4个内核,16g内存),然后在主服务器上以客户端部署模式部署我的spark(流媒体)应用程序 . 设置摘要是:
--executor-memory 16g
--executor-cores 4
--driver-memory 8g
--driver-cores 2
--deploy-mode客户端
这导致我的单个从服务器上的单个执行程序运行4个内核和16Gb内存 . 驱动程序在主节点上的集群“外部”运行(即主机没有为其分配资源) .
理想情况下,我想使用集群部署模式,以便我可以利用监督选项 . 我已在主节点上启动了第二个从站,为其提供了2个内核和8g内存(分配的资源较少,以便为主守护程序留出空间) .
当我在集群部署模式下运行我的spark作业时(使用与上面相同的设置但使用--deploy-mode集群) . 大约50%的时间我得到了所需的部署,即驱动程序运行在主节点上运行的从属节点(具有2核和8Gb的正确资源),这使得原始从节点可以自由地分配4的执行程序 . 核心和16Gb . 然而,另外50%的时间主设备在非主从节点上运行驱动程序,这意味着我在该节点上获得了具有2个内核和8Gb内存的驱动程序,这使得没有节点有足够的资源来启动执行程序(这需要4核和16Gb) .
有没有办法强制火花大师为我的司机使用特定的 Worker /奴隶?鉴于spark知道有两个从属节点,一个有2个内核,另一个有4个内核,而我的驱动程序需要2个内核,而我的 Actuator 需要4个内核,理想情况下可以找到正确的最佳位置,但这不是似乎是这样的 .
任何想法/建议感激不尽!
谢谢!
1 回答
我可以看到这是一个老问题,但让我回答它,有人可能会觉得它很有用 .
在提交应用程序时,将
--driver-java-options="-Dspark.driver.host=<HOST>"
选项添加到spark-submit
脚本,Spark应将驱动程序部署到指定的主机 .