我在EC2实例上运行了Spark 2.3。所有端口都是开放的,我从“ start-master.sh”和“ start-slave.sh”开始启动。我尝试使用Java与以下代码进行连接:
SparkConf sparkConf = new SparkConf()
.setAppName("myappname")
.setMaster(System.getProperty("spark.master", "spark://<EC2 DNS>:7077"));
它似乎已连接,并且可以在Web UI中看到它。但是,当我尝试实际执行某些操作时,出现以下错误消息:
Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources
应该有足够的可用资源,包括内核和内存,可以完成这项工作。我认为这是驱动程序(我的本地计算机)和工作程序(在EC2上)无法通信的问题。
答案 0 :(得分:0)
我可以通过以下方法解决此问题:
使用Java更新我的SparkConf:
SparkConf sparkConf = new SparkConf()
.setAppName("myappname")
.setMaster(System.getProperty("spark.master", "spark://<EC2 DNS>:7077"))
.set("spark.driver.host", "localhost")
.set("spark.driver.port", String.valueOf(23584));
然后我运行它以建立SSH隧道:
ssh -R 23584:localhost:23584 ubuntu@<EC2 DNS>
您可以使用任何端口,我随机选择23584。我仍然有问题,但这似乎已经解决了我遇到的错误。