2015-02-11 98 views
9

这是使用大数据的东西,比如Apache火花和Hadoop我们的第一个步骤。阿帕奇星火错误:无法连接到akka.tcp:// @ sparkMaster

我们安装了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://[email protected]:7077: akka.remote.InvalidAssociation: Invalid address: akka.tcp://[email protected]:7077 15/02/11 14:44:02 WARN Remoting: Tried to associate with unreachable remote address [akka.tcp://[email protected]: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是机器火花工作的IP地址。

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

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

当我跑我得到了应用程序的

+0

您是否为同一台计算机配置了多个IP? – Harman 2015-02-11 13:16:13

+0

实际上,我不知道,但如果我使用域名而不是IP,则会引发相同的异常。 – Fanooos 2015-02-11 13:18:44

+0

当你启动ifconfig时,你会看到什么 – Harman 2015-02-12 06:02:27

回答

6

检查你的星火主日志,你应该看到类似这样的:

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

然后你连接到主时,一定要准确使用相同的主机名在上面的日志中找到(做不使用IP地址):

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

星火独立是有点挑剔与此主机名/ IP的东西。

+0

机器有一个域名,如果我使用它而不是IP,则会抛出相同的异常。 – Fanooos 2015-02-11 13:19:24

+0

你检查了主人的日志吗? – 2015-02-11 13:58:39

+0

另一个Spark独立的缺陷是它充当点对点系统。您的客户端/驱动程序应用程序必须可以由主人联结。您可能已禁用防火墙设置并添加到您的SparkConf中: .set(“spark.driver.host”,“mydriverapp”) .set(“spark.driver.port”,“7076”) – 2015-02-11 16:57:38

4

当你使用shell命令“sbin目录/ start-master.sh”创建星火主人。去地址http://localhost:8080并检查“URL”行。

+0

这很好建议,同时在我今天的测试中,我发现如果URL显示主机名,则无论如何都不会连接。只有当我设置一个设置(SPARK_MASTER_IP)并使用IP地址时,它才会连接。 – JimLohse 2015-12-28 20:53:36

1

我注意到没有接受的答案,只是为了我想我会提到一些事情的信息。

首先,在conf目录下的文件spark-env.sh的SPARK_MASTER_IP和SPARK_LOCAL_IP设置可以是主机名。你不想让他们成为,但他们可以。

正如另一个答案指出,星火可以大约主机名与IP地址有点挑剔,因为这解决的bug /功能:See bug here。问题是,目前尚不清楚他们是否“解决”仅仅是告诉我们使用IP而不是主机名?

好吧,我现在有这个同样的问题,你要做的第一件事是检查的基础知识。

你可以ping通Spark主机运行的盒子吗?你可以从主人ping工人吗?更重要的是,你可以通过主机箱向工作人员输入无密码的ssh吗? Per 1.5.2 docs您需要使用私钥来完成此操作,并让工作人员输入conf/slaves文件。我在最后复制了相关段落。

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

最后所有的设置组合,在一个有限的实验中,现在我只找到一个重要的:在主设备上,在spark-env.sh中,将SPARK_MASTER_IP设置为IP地址,而不是主机名。然后从工作人员连接spark://192.168.0.10:7077,然后连接!貌似在这里不需要其他配置参数。

下面是有关SSH和奴隶的文档段落文件中的conf:

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

一旦你这样做了,使用IP地址应该在你的代码中工作。让我们知道!这可能是一个令人讨厌的问题,并且了解大多数配置参数并不重要,这很好。