java.net.BindException: 使用 Google DataProc 时地址已被使用

java.net.BindException: Address already in use while using Google DataProc

我刚刚使用 DataProc 在 Google Cloud 中设置了一个 Spark 集群,我正在尝试使用文档中指定的 gcutil 从我的本地计算机提交一个简单的 pyspark hello-world.py 作业 - https://cloud.google.com/dataproc/submit-job

gcloud beta dataproc jobs submit pyspark --cluster cluster-1 hello-world.py

但是,我收到以下错误:

15/12/28 08:54:53 WARN org.spark-project.jetty.util.component.AbstractLifeCycle: FAILED   SelectChannelConnector@0.0.0.0:4040: java.net.BindException: Address  already in use
java.net.BindException: Address already in use
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:433)
    at sun.nio.ch.Net.bind(Net.java:425)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
   at org.spark-project.jetty.server.nio.SelectChannelConnector.open(SelectChannelConnector.java:187)
...
  py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:68)
   at py4j.GatewayConnection.run(GatewayConnection.java:207)
   at java.lang.Thread.run(Thread.java:745)

我只提交过一次这个作业,所以我很困惑为什么会出现这个错误。任何帮助将不胜感激。

创建 spark 上下文时,它默认在 4040 启动应用程序 UI 端口。当 UI 启动时,它会检查它是否正在使用,如果正在使用,它应该增加到 4041。看起来你在端口 4040 上有一些东西 运行。应用程序应向您显示警告,然后尝试在 4041 上启动 UI。