我是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.
请告诉我如何修复它。感谢。
答案 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,因为默认情况下它已关闭到外部。