【问题标题】:Spark submit application master hostSpark 提交应用程序主控主机
【发布时间】:2015-05-27 06:16:08
【问题描述】:

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

要提交应用程序,我要做的是通过 ssh 进入主 Spark 节点并运行 <path to spark home>/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

但是如果我用它的主机名指定主节点:

./bin/spark-submit --master spark://spark-master01:7077 --jars ./external/spark-streaming-kafka-assembly_2.10-1.3.1.jar ./examples/src/main/python/streaming/kafka_wordcount.py zookeeper01: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

更新

这是netstat -n -a 输出的第一部分:

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

【问题讨论】:

    标签: apache-spark spark-streaming hosts-file


    【解决方案1】:

    您使用的是主机名而不是 IP 地址。因此,您应该在每个节点的 /etc/hosts 文件中提及您的主机名。然后就可以了。

    【讨论】:

    • /etc/hosts 文件在所有节点中都是一样的。
    • 你确定吗?您在所有工作人员、主服务器和运行应用程序的当前节点(Spark 驱动程序)中拥有相同的 hosts 文件,其中包含所有机器的主机名。
    • 是的,我确定。 /etc/hosts 文件由 ansible 任务生成,并在所有主机上运行。无论如何,我还在每个节点中通过 ssh-ing 进行了检查。
    • 您是否在主机文件中未提及的不同机器上执行您的应用程序?
    • 不,我要做的是 ssh 进入 spark master 并运行上面提到的命令。
    【解决方案2】:

    你可以先试试ping spark-master01 看看ip spark-master01 解析成什么。然后你可以试试netstat -n -a看看你的spark master的7077端口是否正确绑定到你的spark master节点的ip。

    【讨论】:

    • 请查看包含netstat -n -a 输出的更新。 ping spark-master01 ping 正确的 ip。
    • 您可以尝试在您的一个奴隶上提交您的应用程序,看看它是否有效?
    • 什么意思?正如我在提交应用程序时使用 IP 地址所说的那样,它按预期运行,它在两个从属服务器上运行。但我想改用主机名。
    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    相关资源
    最近更新 更多