Amazon ec2 尝试使用公共IP在EC2节点上启动Spark master时获取java.net.BindException

Amazon ec2 尝试使用公共IP在EC2节点上启动Spark master时获取java.net.BindException,amazon-ec2,apache-spark,Amazon Ec2,Apache Spark,我正在尝试为EC2节点上的独立集群启动Spark master。我使用的CLI命令如下所示: 爪哇之家=\ java-cp/sbin/。/conf/:/lib/spark-assembly-1.4.0-hadoop2.6.0.jar:/lib/datanucleus-core-3.2.10.jar:/lib/datanucleus-api-jdo-3.2.6.jar:/lib/datanucleus-rdbms-3.2.9.jar\ -Xms512m-Xmx512m-XX:MaxPermSiz

我正在尝试为EC2节点上的独立集群启动Spark master。我使用的CLI命令如下所示:


爪哇之家=\
java-cp/sbin/。/conf/:/lib/spark-assembly-1.4.0-hadoop2.6.0.jar:/lib/datanucleus-core-3.2.10.jar:/lib/datanucleus-api-jdo-3.2.6.jar:/lib/datanucleus-rdbms-3.2.9.jar\
-Xms512m-Xmx512m-XX:MaxPermSize=128m\
org.apache.spark.deploy.master.master--端口7077--webui端口8080--主机54.xx.xx.xx

请注意,我正在指定--host参数;我想让我的Spark主机监听特定的IP地址。我指定的主机(即54.xx.xx.xx)是我的EC2节点的公共IP;我已确认端口7077上没有其他内容正在侦听,并且我的EC2安全组已打开所有端口。我还仔细检查了公共IP是否正确

当我使用--host 54.xx.xx.xx时,会收到以下错误消息:


15/07/27 17:04:09错误NettyTransport:无法绑定到/54.xx.xx.xx:7093,正在关闭Netty transport
线程“main”java.net.BindException中的异常:未能绑定到:/54.xx.xx.xx:7093:服务“sparkMaster”在重试16次后失败!
位于org.jboss.netty.bootstrap.ServerBootstrap.bind(ServerBootstrap.java:272)
在akka.remote.transport.netty.NettyTransport$$anonfun$listen$1.apply(NettyTransport.scala:393)
在akka.remote.transport.netty.NettyTransport$$anonfun$listen$1.apply(NettyTransport.scala:389)
在scala.util.Success$$anonfun$map$1.apply(Try.scala:206)
在scala.util.Try$.apply处(Try.scala:161)
在scala.util.Success.map(Try.scala:206)
在scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)
在scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)
在scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
在akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.processBatch$1(BatchingExecutor.scala:67)
在akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.apply$mcV$sp(BatchingExecutor.scala:82)
在akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.apply(BatchingExecutor.scala:59)
在akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.apply(BatchingExecutor.scala:59)
位于scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72)
在akka.dispatch.BatchingExecutor$Batch.run(BatchingExecutor.scala:58)
运行(AbstractDispatcher.scala:41)
在akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:393)
位于scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
位于scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
位于scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
在scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)中

如果省略--host参数,则不会发生这种情况;如果使用--host 10.0.xx.xx,则不会发生这种情况,其中10.0.xx.xx是我的专用EC2 IP地址


为什么Spark无法绑定到公共EC2地址?

尝试设置环境变量Spark\u LOCAL\u IP=54.xx.xx.xx


参考第一个。

我在使用Oracle云实例时遇到了同样的问题。我的私有IP类似于10.x.x.2,而我的公共IP类似于140.x.x.238

以下是您可以遵循的一些步骤:

  • 检查您的私人IP地址

    使用命令
    ifconfig
    查找网卡的地址

  • 更改主机文件

    在Ubuntu 18.04中,修改/etc/hosts

    删除类似于
    127.0.1.1您的\u主机名的内容

    140.x.x.238您的主机名
    更改为
    10.x.x.2您的主机名

  • 这里也有同样的问题(不过使用的是储物柜装卸工机器)。
    ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9000
            inet 10.x.x.2  netmask 255.255.255.0  broadcast 10.0.0.255
            inet6 fe80::17ff:fe00:7cf9  prefixlen 64  scopeid 0x20<link>
            ether 02:00:17:00:7c:f9  txqueuelen 1000  (Ethernet)
            RX packets 146457  bytes 61901565 (61.9 MB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 142865  bytes 103614447 (103.6 MB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    SPARK_LOCAL_IP=127.0.0.1
    SPARK_MASTER_IP=YOUR_HOST_NAME