Spark-shell 连接到 Mesos 卡在 sched.cpp

Spark-shell connecting to Mesos stuck at sched.cpp

下面是我的 spark-defaults.confspark-shell

的输出
$ cat conf/spark-defaults.conf
spark.master                     mesos://172.16.**.***:5050
spark.eventLog.enabled           false
spark.broadcast.compress         false
spark.driver.memory              4g
spark.executor.memory            4g
spark.executor.instances         1

$ bin/spark-shell
log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Using Spark's repl log4j profile: org/apache/spark/log4j-defaults-repl.properties
To adjust logging level use sc.setLogLevel("INFO")
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.5.2
      /_/

Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_80)
Type in expressions to have them evaluated.
Type :help for more information.
15/11/15 04:56:11 WARN MetricsSystem: Using default name DAGScheduler for source because spark.app.id is not set.
I1115 04:56:12.171797 72994816 sched.cpp:164] Version: 0.25.0
I1115 04:56:12.173741 67641344 sched.cpp:262] New master detected at master@172.16.**.***:5050
I1115 04:56:12.173951 67641344 sched.cpp:272] No credentials provided. Attempting to register without authentication

它无限期地挂在这里,而 Mesos Web UI 显示许多 Spark 框架正在旋转 - 不断注册和取消注册,直到我退出 spark-shell 按 Ctrl-C。

我怀疑部分原因是我的笔记本电脑有多个 IP 地址。当 运行 在服务器上时,它继续到下一行,并且通常的 Scala REPL:

I1116 09:53:30.265967 29327 sched.cpp:641] Framework registered with 9d725348-931a-48fb-96f7-d29a4b09f3e8-0242
15/11/16 09:53:30 INFO mesos.MesosSchedulerBackend: Registered as framework ID 9d725348-931a-48fb-96f7-d29a4b09f3e8-0242
15/11/16 09:53:30 INFO util.Utils: Successfully started service 'org.apache.spark.network.netty.NettyBlockTransferService' on port 57810.
15/11/16 09:53:30 INFO netty.NettyBlockTransferService: Server created on 57810
15/11/16 09:53:30 INFO storage.BlockManagerMaster: Trying to register BlockManager
15/11/16 09:53:30 INFO storage.BlockManagerMasterEndpoint: Registering block manager 172.16.**.***:57810 with 2.1 GB RAM, BlockManagerId(driver, 172.16.**.***, 57810)
15/11/16 09:53:30 INFO storage.BlockManagerMaster: Registered BlockManager
15/11/16 09:53:30 INFO repl.Main: Created spark context..
Spark context available as sc.

我正在 运行ning Mesosphere 构建的 Mesos 0.25.0,我正在将 spark.driver.host 设置为可从 Mesos 集群中的所有机器访问的地址。我看到 spark-shell 进程打开的每个端口都绑定到该 IP 地址或 *.

The most similar question on Whosebug 似乎没有帮助,因为在这种情况下,我的笔记本电脑应该可以从主机访问。

我找不到可能包含框架未注册原因的日志文件。我应该在哪里寻找解决这个问题的方法?

Mesos 对网络的工作方式有一个非常奇怪的概念——特别是,重要的是您可以在 Master 和 Framework 之间建立 双向 通信。所以双方都需要有一条相互的网络路由。如果您 运行 在 NAT 或容器后面,您之前已经 运行 到过这个——通常您需要在框架端将 LIBPROCESS_IP 设置为您的可公开访问的 IP。也许这也适用于多宿主系统,例如您的笔记本电脑。

您可以在 Internet 上找到更多信息,但遗憾的是没有很好的记录。不过还有a hint on their Deployment Scripts page