使用spark-submit向EC2集群提交申请

时间:2014-06-13 07:05:28

标签: amazon-ec2 apache-spark

我是Spark的新手,我正试图在EC2上运行它。我通过使用spark-ec2启动Spark集群来关注spark网页上的教程。然后,我尝试使用spark-submit将应用程序提交到群集。该命令如下所示:

./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://ec2-54-88-9-74.compute-1.amazonaws.com:7077 --executor-memory 2G --total-executor-cores 1 ./examples/target/scala-2.10/spark-examples_2.10-1.0.0.jar 100

但是,我收到以下错误:

ERROR SparkDeploySchedulerBackend: Application has been killed. Reason: All masters are unresponsive! Giving up.

请告诉我如何修复它。感谢。

3 个答案:

答案 0 :(得分:7)

您遇到此问题,因为您的spark-standalone群集的主节点无法打开TCP连接回驱动器(在您的计算机上)。 spark-submit的默认模式是 client ,它在提交它的计算机上运行驱动程序。

为spark-deploy添加了一个新的集群模式,该作业将作业提交给主服务器,然后在主服务器上运行,无需直接连接。不幸的是,独立模式不支持此模式。

您可以在此投票支持JIRA问题:https://issues.apache.org/jira/browse/SPARK-2260

通过SSH隧道连接是可能的,但延迟将是一个大问题,因为驱动程序将在您的计算机上本地运行。

答案 1 :(得分:2)

我很好奇你是否还有这个问题...但是如果有人问这里是一个简短的答案。正如jhappoldt所阐明的那样,spark-standalone集群的主节点无法打开TCP连接回驱动器(在本地计算机上)。两种解决方法是可行的,经过测试并取得了成功。

(1)从EC2管理控制台,创建一个新的安全组并添加规则,以便从PC(公共IP)来回启用TCP。 (我所做的是添加TCP规则入站和出站)...然后将此安全组添加到主实例。 (右键单击 - >网络 - >更改安全组)。注意:添加它并且不要删除已经建立的安全组。

此解决方案运行良好,但在您的特定方案中,将应用程序从本地计算机部署到EC2群集,您将面临更多问题(与资源相关),因此下一个选项是最佳选择

(2)让你的.jar文件(或.egg)使用scp将其复制到主节点。您可以查看此链接http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html,了解有关如何执行此操作的信息;并从主节点部署您的应用程序。注意:spark已经预先安装好了,所以除了在〜/ spark / bin上编写你在本地机器上写的相同命令之外你什么都不做。这应该是完美的。

答案 2 :(得分:1)

您是在本地计算机上还是在创建的EC2节点上执行命令?如果您在本地执行此操作,请确保在安全设置中打开端口7077,因为默认情况下它已关闭到外部。