远程向Spark EC2集群提交作业

Ole*_*ikh 13 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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

结果是:

....驱动程序成功提交驱动程序-20150223023734-0007 ...在轮询主机之前等待驱动程序状态...轮询主机驱动程序状态驱动程序状态20150223023734-0007是错误来自集群的异常是:java.io.FileNotFoundException :文件文件:/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)在org.apache.spark.deploy.worker.DriverRunner.org $阿帕奇$火花$部署$工人$ DriverRunner $$ downloadUserJar(DriverRunner.scala:150)在org.apache.spark.deploy. worker.DriverRunner $$匿名$ 1.run(DriverRunner.scala:75)

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

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

sgv*_*gvd 2

文档位于:

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

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

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