Apache Spark错误:无法连接到akka.tcp:// sparkMaster @

时间:2015-02-11 12:00:51

标签: hadoop apache-spark cloudera

这是我们使用apache spark和hadoop等大数据的第一步。

我们安装了Cloudera CDH 5.3。从cloudera经理我们选择安装spark。 Spark在集群中的一个节点中启动并运行良好。

从我的机器上我做了一个连接的小应用程序来读取存储在hadoop HDFS上的文本文件。

我正在尝试从Eclipse运行应用程序并显示这些消息

15/02/11 14:44:01 INFO client.AppClient$ClientActor: Connecting to master spark://10.62.82.21:7077... 15/02/11 14:44:02 WARN client.AppClient$ClientActor: Could not connect to akka.tcp://sparkMaster@10.62.82.21:7077: akka.remote.InvalidAssociation: Invalid address: akka.tcp://sparkMaster@10.62.82.21:7077 15/02/11 14:44:02 WARN Remoting: Tried to associate with unreachable remote address [akka.tcp://sparkMaster@10.62.82.21:7077]. Address is now gated for 5000 ms, all messages to this address will be delivered to dead letters. Reason: Connection refused: no further information: /10.62.82.21:7077

应用程序有一个类,使用以下行创建上下文

JavaSparkContext sc = new JavaSparkContext(new SparkConf().setAppName("Spark Count").setMaster("spark://10.62.82.21:7077"));

其中此IP是机器spark工作的IP。

然后我尝试使用以下行从HDFS读取文件

sc.textFile("hdfs://10.62.82.21/tmp/words.txt")

当我运行应用程序时,我得到了

3 个答案:

答案 0 :(得分:6)

检查您的Spark主日志,您应该看到类似的内容:

15/02/11 13:37:14 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkMaster@mymaster:7077]
15/02/11 13:37:14 INFO Remoting: Remoting now listens on addresses: [akka.tcp://sparkMaster@mymaster:7077]
15/02/11 13:37:14 INFO Master: Starting Spark master at spark://mymaster:7077

然后当您连接到主服务器时,请务必使用与上述日志中完全相同的主机名(不要使用IP地址):

.setMaster("spark://mymaster:7077"));

Spark standalone对这个主机名/ IP的东西有点挑剔。

答案 1 :(得分:4)

使用shell命令" sbin / start-master.sh"创建Spark母版时。转到地址http://localhost:8080并检查"网址"行。

答案 2 :(得分:1)

我注意到没有接受的答案,仅仅是因为我认为我会提到一些事情。

首先,在conf目录的spark-env.sh文件中,SPARK_MASTER_IP和SPARK_LOCAL_IP设置可以是主机名。你不希望它们存在,但它们可以是。

正如另一个答案所述,Spark可能对主机名与IP地址有点挑剔,因为这个已解决的错误/功能:See bug here。问题是,目前尚不清楚他们是否“解决”只是告诉我们使用IP而不是主机名?

我现在遇到同样的问题,你要做的第一件事是检查基础知识。

您可以ping运行Spark主服务器的框吗?你可以从主人那里ping工人吗?更重要的是,您可以从主箱中为工作人员提供无密码ssh吗? Per 1.5.2 docs您需要能够使用私钥执行此操作并将工作人员输入conf / slaves文件。我在最后复制了相关段落。

您可以获得工作人员可以联系主人但主人无法回到工作人员的情况,因此看起来没有连接。检查两个方向。

最后在所有设置组合中,在刚刚进行的有限实验中我只找到了一个重要的:在主服务器上,在spark-env.sh中,将SPARK_MASTER_IP设置为IP地址,而不是主机名。 / strong>然后使用spark://192.168.0.10:7077从工作人员连接并瞧它连接!看起来这里不需要其他配置参数。

这是conf中有关ssh和slaves文件的文档中的段落:

  

使用启动脚本启动Spark独立群集   应该在Spark目录中创建一个名为conf / slaves的文件   必须包含您打算使用的所有计算机的主机名   启动Spark工作人员,每行一个。如果conf / slaves不存在,那么   启动脚本默认为单个机器(localhost),即   对测试很有用。注意,主机访问每个   工人机器通过ssh。默认情况下,ssh并行运行   要求设置无密码(使用私钥)访问权限。如果   如果您没有密码设置,则可以设置环境   变量SPARK_SSH_FOREGROUND并为每个变量连续提供密码   工人。

完成后,使用IP地址应该可以在您的代码中使用。让我们知道!这可能是一个恼人的问题,并且了解大多数配置参数无关紧要很好。