我正在运行一个小火花群,有两个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个内核,理想情况下可以找到正确的最佳位置,但这不是似乎是这样。
感激地收到任何想法/建议!
谢谢!
答案 0 :(得分:1)
我可以看到这是一个老问题,但让我回答一下,有人可能觉得它很有用。
在提交应用程序时向--driver-java-options="-Dspark.driver.host=<HOST>"
脚本添加spark-submit
选项,Spark应该将驱动程序部署到指定的主机。