远程向Spark EC2集群提交作业

时间:2015-02-23 02:41:38

标签: amazon-ec2 apache-spark

我已经使用Spark设置了EC2群集。一切正常,所有主/从都开始运行。

我正在尝试提交示例作业(SparkPi)。当我ssh到集群并从那里提交它 - 一切正常。但是,当在远程主机(我的笔记本电脑)上创建驱动程序时,它不起作用。我为--deploy-mode尝试了两种模式:

--deploy-mode=client

从我的笔记本电脑:

./bin/spark-submit --master spark://ec2-52-10-82-218.us-west-2.compute.amazonaws.com:7077 --class SparkPi ec2test/target/scala-2.10/ec2test_2.10-0.0.1.jar

导致以下无限期警告/错误:

  

WARN TaskSchedulerImpl:初始作业未接受任何资源;   检查您的群集UI以确保工作人员已注册并具有   足够的记忆15/02/22 18:30:45

     

错误SparkDeploySchedulerBackend:要求删除不存在的执行者0 15/02/22 18:30:45

     

错误SparkDeploySchedulerBackend:要求删除不存在的执行程序1

...和失败的驱动程序 - 在Spark Web UI中出现“已完成的驱动程序”并显示“State = ERROR”。

我试图通过核心和内存的限制来提交脚本,但它没有帮助......

--deploy-mode=cluster

从我的笔记本电脑:

./bin/spark-submit --master spark://ec2-52-10-82-218.us-west-2.compute.amazonaws.com:7077 --deploy-mode cluster --class SparkPi ec2test/target/scala-2.10/ec2test_2.10-0.0.1.jar

结果是:

  

....驱动程序成功提交为驱动程序-20150223023734-0007 ...   轮询大师之前等待司机状态...轮询大师   驱动程序状态driver-20150223023734-0007是ERROR Exception   来自集群的是:java.io.FileNotFoundException:File   文件:/home/oleg/spark/spark12/ec2test/target/scala-2.10/ec2test_2.10-0.0.1.jar   不存在。 java.io.FileNotFoundException:文件   文件:/home/oleg/spark/spark12/ec2test/target/scala-2.10/ec2test_2.10-0.0.1.jar   不存在。在   org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:397)     在   org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:251)     在org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:329)at   org.apache.spark.deploy.worker.DriverRunner.org $阿帕奇$火花$部署$工人$ DriverRunner $$ downloadUserJar(DriverRunner.scala:150)     在   org.apache.spark.deploy.worker.DriverRunner $$匿名$ 1.run(DriverRunner.scala:75)

所以,我很欣赏任何关于出错的指示以及如何从远程客户端部署作业的一些指导。感谢。

更新 因此,对于群集模式中的第二个问题,每个群集节点必须全局可见该文件,因此它必须位于可访问位置的某个位置。这解决了IOException,但导致了与客户端模式相同的问题。

2 个答案:

答案 0 :(得分:1)

以下文件:

http://spark.apache.org/docs/latest/security.html#configuring-ports-for-network-security

列出了Spark群集中使用的所有不同通信通道。如您所见,有一堆从Executor到Driver的连接。当您使用--deploy-mode=client运行时,驱动程序会在您的笔记本电脑上运行,因此执行程序将尝试连接您的笔记本电脑。如果您的执行程序运行的AWS安全组阻止了对您的笔记本电脑的出站流量(由Spark EC2脚本创建的默认安全组没有),或者您在路由器/防火墙后面(更有可能),它们无法连接并且你得到了你所看到的错误。

因此,要解决此问题,您必须将所有必需的端口转发到笔记本电脑,或重新配置防火墙以允许连接到端口。看到一堆端口是随机选择的,这意味着开放了很多(如果不是全部)端口。因此,使用群集中的--deploy-mode=clusterclient可能不那么痛苦。

答案 1 :(得分:0)

我建议不要使用端口打开策略远程提交火花作业,因为它可能会产生安全问题,而且根据我的经验,比实际情况更麻烦,特别是由于必须对通信层进行故障排除。

备选方案:

1)Livy - 现在是一个Apache项目! http://livy.iohttp://livy.incubator.apache.org/

2)Spark Job服务器 - https://github.com/spark-jobserver/spark-jobserver

相关问题