Apache spark Spark提交应用程序主主机

Apache spark Spark提交应用程序主主机,apache-spark,spark-streaming,hosts-file,Apache Spark,Spark Streaming,Hosts File,我是Spark的新手,在提交申请时遇到了一个问题。我设置了一个主节点,其中有两个带有spark的从属节点,一个带有zookeeper的节点,一个带有kafka的节点。我想在python中使用spark streaming启动kafka wordcount示例的修改版本 要提交应用程序,我要做的是将ssh连接到主spark节点并运行/bin/spark submit。如果我用ip指定主节点,一切正常,应用程序正确地使用来自kafka的消息,我可以从SparkUI中看到应用程序在两个从节点上正确运行

我是Spark的新手,在提交申请时遇到了一个问题。我设置了一个主节点,其中有两个带有spark的从属节点,一个带有zookeeper的节点,一个带有kafka的节点。我想在python中使用spark streaming启动kafka wordcount示例的修改版本

要提交应用程序,我要做的是将ssh连接到主spark节点并运行
/bin/spark submit
。如果我用ip指定主节点,一切正常,应用程序正确地使用来自kafka的消息,我可以从SparkUI中看到应用程序在两个从节点上正确运行:

./bin/spark-submit --master spark://<spark master ip>:7077 --jars ./external/spark-streaming-kafka-assembly_2.10-1.3.1.jar ./examples/src/main/python/streaming/kafka_wordcount.py <zookeeper ip>:2181 test
然后它与这些日志挂起:

15/05/27 02:01:58 INFO AppClient$ClientActor: Connecting to master akka.tcp://sparkMaster@spark-master01:7077/user/Master...
15/05/27 02:02:18 INFO AppClient$ClientActor: Connecting to master akka.tcp://sparkMaster@spark-master01:7077/user/Master...
15/05/27 02:02:38 INFO AppClient$ClientActor: Connecting to master akka.tcp://sparkMaster@spark-master01:7077/user/Master...
15/05/27 02:02:58 ERROR SparkDeploySchedulerBackend: Application has been killed. Reason: All masters are unresponsive! Giving up.
15/05/27 02:02:58 ERROR TaskSchedulerImpl: Exiting due to error from cluster scheduler: All masters are unresponsive! Giving up.
15/05/27 02:02:58 WARN SparkDeploySchedulerBackend: Application ID is not initialized yet.
我的
/etc/hosts
文件如下所示:

<spark master ip> spark-master01
127.0.0.1 localhost

::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
<spark slave-01 ip> spark-slave01
<spark slave-02 ip> spark-slave02
<kafka01 ip> kafka01
<zookeeper ip> zookeeper01

您可以先尝试ping spark-master01查看ip spark-master01的解析结果。然后您可以尝试
netstat-n-a
查看spark主机的端口7077是否正确绑定到spark主机节点的ip。

您使用的是主机名而不是ip地址。因此,您应该在每个节点的
/etc/hosts
文件中提到主机名。然后它就会工作。

所有节点中的
/etc/hosts
文件都是相同的。你确定吗?您拥有相同的
hosts
文件,其中包含所有worker、master和当前运行应用程序的节点(Spark Driver)中所有计算机的主机名。是的,我确定。
/etc/hosts
文件由ansible任务生成,并在所有主机上运行。无论如何,我还通过ssh检查了每个节点。您是否从主机文件中未提及的不同机器执行应用程序?不,我要做的是ssh到spark master并运行上述命令。请参阅包含
netstat-n-a
输出的更新。Ping
spark-master01
Ping是正确的ip。你能试着在你的一个从机上提交你的应用程序看看它是否有效吗?你是什么意思?正如我在提交应用程序时使用ip地址所说的那样,它可以在两个从属服务器上运行。但是我想用主机名来代替。
<spark master ip> spark-master01
127.0.0.1 localhost

::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
<spark slave-01 ip> spark-slave01
<spark slave-02 ip> spark-slave02
<kafka01 ip> kafka01
<zookeeper ip> zookeeper01
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address           State
tcp        0      0 0.0.0.0:22              0.0.0.0:*                 LISTEN
tcp        0      0 <spark master ip>:22    <my laptop ip>:60113      ESTABLISHED
tcp        0    260 <spark master ip>:22    <my laptop ip>:60617      ESTABLISHED
tcp6       0      0 :::22                   :::*                      LISTEN
tcp6       0      0 <spark master ip>:7077  :::*                      LISTEN
tcp6       0      0 :::8080                 :::*                      LISTEN
tcp6       0      0 <spark master ip>:6066  :::*                      LISTEN
tcp6       0      0 127.0.0.1:60105         127.0.0.1:44436           TIME_WAIT
tcp6       0      0 <spark master ip>:43874 <spark master ip>:7077    TIME_WAIT
tcp6       0      0 127.0.0.1:51220         127.0.0.1:55029           TIME_WAIT
tcp6       0      0 <spark master ip>:7077  <spark slave 01 ip>:37061 ESTABLISHED
tcp6       0      0 <spark master ip>:7077  <spark slave 02 ip>:47516 ESTABLISHED
tcp6       0      0 127.0.0.1:51220         127.0.0.1:55026           TIME_WAIT