【问题标题】:Timeout when submitting jobs to EC2 cluster向 EC2 集群提交作业时超时
【发布时间】:2015-08-21 16:54:54
【问题描述】:

到目前为止,我一直在努力完成这项工作,但没有运气。我用

启动了一个集群
./spark-ec2 -k keyname -i ~/.keys/key.pem --region=us-east-1 -s 5 launch "my test cluster"

然后我用

提交一份工作
bin/spark-submit --verbose --class com.company.jobs.AggregateCostDataWorkflow --master spark://ec2-54-157-122-49.compute-1.amazonaws.com:7077 --deploy-mode cluster --conf spark.executor.memory=5g /Users/my.name/scala-proj/target/scala-2.10/scala-proj-0.1.0.jar --outputPath,s3n://my-bucket/my-name/ec2-spark-test/

outPutPath 是 main 方法的参数。经过一些状态输出后,我看到了一个看起来像

的异常
15/06/05 16:09:33 INFO StandaloneRestClient: Submitting a request to launch an application in spark://ec2-74-141-162-19.compute-1.amazonaws.com:7077.
Exception in thread "main" java.net.ConnectException: Operation timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at [java socket stuff elided for brevity] org.apache.spark.deploy.rest.StandaloneRestClient.postJson(StandaloneRestClient.scala:150)
    at org.apache.spark.deploy.rest.StandaloneRestClient.createSubmission(StandaloneRestClient.scala:70)
    at org.apache.spark.deploy.rest.StandaloneRestClient$.run(StandaloneRestClient.scala:317)
    at org.apache.spark.deploy.rest.StandaloneRestClient$.main(StandaloneRestClient.scala:329)
    at org.apache.spark.deploy.rest.StandaloneRestClient.main(StandaloneRestClient.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:569)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:166)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:178)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:110)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

这是 spark 1.3.1(在我的本地计算机上)我可以访问主计算机上的 UI 并验证 Spark 进程实际上是否已启动。我也可以ssh进入master。

有什么建议吗?

【问题讨论】:

标签: java amazon-ec2 apache-spark


【解决方案1】:

如果您想访问 EC2 Spark 集群上的端口,您需要通过编辑安全策略来打开端口。 spark_ec2.py 不会在 master 上打开端口 7077 和 6066 以便从集群外部访问。

我使用另一种方式 - 使用命令连接到 Spark 集群的主机

./spark_ec2.py -k keyname -i ~/.keys/key.pem login "my test cluster"

上传您的作业文件(使用 scp 使用相同的密钥)并从那里提交作业。这将确保您的驱动程序可以访问集群主服务器和从服务器。

请参阅Running Spark on EC2 documentation 的“运行应用程序”部分

【讨论】:

  • 我尝试添加行 master_group.authorize('tcp', 6066, 6066, authorized_address) - 与以前相同的错误。我做错了吗?
  • 再次。 Spark Amazon EC2 手册建议在通过 ssh 登录到主服务器后提交作业。
  • 如果您愿意,可以尝试在打开端口 7077 后提交作业。我尝试创建 ec2 集群并打开入站 TCP 端口 7077 - 并且能够与 bin/spark-shell --master spark://ec2-54-159-17-215.compute-1.amazonaws.com:7077 连接
  • 不过要小心 - 默认情况下 spark_ec2 会为 0.0.0.0/0 打开端口 7077 - 这会将这个端口打开到整个互联网。我转到我的 EC2 管理控制台 Web UI/网络和安全/安全组并手动添加入站规则并将其设置为我计算机的公共 IP。
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 2020-10-07
相关资源
最近更新 更多