【问题标题】:Submitting jobs to Spark EC2 cluster remotely远程提交作业到 Spark EC2 集群
【发布时间】:2017-08-05 01:52:24
【问题描述】:

我已经使用 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 中出现“状态=错误”的“已完成驱动程序”。

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

--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

结果是:

....驱动成功提交为driver-20150223023734-0007 ... 在轮询主机之前等待驱动程序状态...轮询主机 driver-20150223023734-0007 的状态为 ERROR Exception 从集群是: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$apache$spark$deploy$worker$DriverRunner$$downloadUserJar(DriverRunner.scala:150) 在 org.apache.spark.deploy.worker.DriverRunner$$anon$1.run(DriverRunner.scala:75)

因此,如果您能提供任何有关问题所在的指示以及如何从远程客户端部署作业的一些指导,我将不胜感激。谢谢。

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

【问题讨论】:

  • 我认为驱动程序为工人提供代码/东西。您的员工可以接触到您的 lappie 吗?通常,您需要驱动程序尽可能靠近您的集群。
  • 正如@AlisterLee 所说,您应该检查您的计算机和ec2 节点之间的设置(防火墙、端口设置等)。如果失败,那么您可能还想尝试将其发送到邮件列表(然后报告解决方案:))

标签: amazon-ec2 apache-spark


【解决方案1】:

文档位于:

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

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

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

【讨论】:

  • 谢谢,这是正确的。自从我问这个问题已经有一段时间了,我通过打开到 Spark Master 的入站连接解决了这个问题 - 通过更改 AWS 中的安全组
【解决方案2】:

我建议不要使用端口开放策略远程提交 Spark 作业,因为它会产生安全问题,而且根据我的经验,麻烦多于其价值,尤其是由于必须对通信层进行故障排除。

替代方案:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 2016-12-20
    • 2015-08-20
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多