Java 将作业提交到EC2群集时超时

Java 将作业提交到EC2群集时超时,java,amazon-ec2,apache-spark,Java,Amazon Ec2,Apache Spark,到目前为止,我一直在努力使这项工作顺利进行。我使用 ./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

到目前为止,我一直在努力使这项工作顺利进行。我使用

./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中


有什么提示吗?

如果要访问EC2 spark群集上的端口,需要通过编辑安全策略打开端口。spark_ec2.py不会打开主机上要从集群外部访问的端口7077和6066

我使用另一种方式-通过命令连接到spark cluster的主计算机

./spark_ec2.py -k keyname -i ~/.keys/key.pem login "my test cluster"
上载您的作业文件(使用相同密钥的scp)并从此处提交作业。这将确保您的驱动程序可以访问群集主设备和从设备


请参阅

的“运行应用程序”部分,我对协议的了解非常初级,我不在工作,目前无法测试任何东西,但Spark REST请求不是在端口6066上发出的吗?我是否需要确保ec2实例打开了该端口?请参阅。我尝试添加行
master\u group.authorize('tcp',6066,6066,authorized\u address)
-与以前相同的错误。我做得不对吗?又错了。Spark Amazon EC2手册建议在登录到主服务器后通过ssh从提交作业。如果需要,可以在打开端口7077后尝试提交作业。我试图创建ec2集群并打开入站TCP端口7077,并且能够连接到
bin/sparkshell--masterspark://ec2-54-159-17-215.compute-1.amazonaws.com:7077
不过要小心-默认情况下,spark_ec2将为0.0.0.0/0打开端口7077-这将为整个internet打开此端口。我转到我的EC2管理控制台web UI/网络和安全/安全组,手动添加入站规则,并将其设置为我计算机的公共IP。