首页 文章

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

提问于
浏览
3

我正在运行一个小火花群,有两个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 回答

  • 1

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

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

相关问题