Apache spark Spark提交应用程序主主机
我是Spark的新手,在提交申请时遇到了一个问题。我设置了一个主节点,其中有两个带有spark的从属节点,一个带有zookeeper的节点,一个带有kafka的节点。我想在python中使用spark streaming启动kafka wordcount示例的修改版本 要提交应用程序,我要做的是将ssh连接到主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中看到应用程序在两个从节点上正确运行
/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
输出的更新。Pingspark-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