当前位置: 首页 > 知识库问答 >
问题:

尝试在带有公共IP的EC2节点上启动Spark master时获取java.net.BindException

巫懿轩
2023-03-14

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

java_home=<我的JDK安装位置>\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:

注意,我指定了--host参数;我希望我的Spark master正在监听一个特定的IP地址。我指定的主机(即54.xx.xx.xx)是我的EC2节点的公共IP;我已经确认没有其他东西在监听端口7077,并且我的EC2安全组已经打开了所有端口。我也仔细检查了公共IP是否正确。

当我使用--host54.xx.xx.xx时,我会得到以下错误消息:

15/07/27 17:04:09错误NettyTransport:未能绑定到/54.xx.xx.xx:7093,正在关闭线程“main”java.net.BindException:未能绑定到:/54.xx.xx.xx:7093:服务“Spark Master”重试16次后失败!在org.jboss.netty.bootstrap.serverbootstrap.bind(serverbootstrap.java:272)在akka.remote.transport.netty.nettytransport$$anonfun$listin$1在akka.remote.transport.netty.nettytransport$$anonfun$listin$1在apply(nettytransport.scala:393)在scala.util.success$$anonfun$listin$1在apply(nettytransport.scala:389)fun$map$1.在scala.concurrent.future$$anonfun$map$1.在scala.concurrent.impl.callbackrunnable.run(promere.scala:235)在scala.concurrent.impl.callbackrunnable.run(promere.scala:32)在akka.dispatch.batchingexecutor$batch$$anonfun$run$1.processbatch$1(Batchingexecutor.scala:67)在)在acka.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)在Akka.dispatch.taskInvocation.run(AbstractDispatcher.scala:41)在Akka.dispatch.forkJoinExecutorConfigurator$AkkaForkJoinAsk.exec(AbstractDispatch.scala:393)在joinpool.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地址?


共有1个答案

姜钊
2023-03-14

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

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

>

  • 检查您的专用IP地址

    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
    

  •  类似资料:
    • 问题内容: 我在EC2上运行了Elasticsearch, 我可以点击本地IP地址(例如curl -XGET localhost:9200) 无论是在同一台计算机上还是在我们的网络上,我都无法通过公用IP地址进行攻击,它总是会超时, IPtables允许 端口是开放的(对其自身以及专用网络都是开放的) Elasticsearch http.cors已启用,并允许“ *” 除了Iptables,亚马

    • 我想了解分配给EC2实例的弹性IP和IPv4公共IP之间的区别及其意义。 我一直试图从一个EC2实例连接到互联网,这个实例是我在一个新VPC创建的新公共子网内启动的。我创建了一个新的互联网网关、一个新的路由表、一个新的网络ACL和一个新的安全组,并对它们进行了适当的配置。 但是,我无法从EC2实例连接到Internet,即使我能够远程SSH。 通过互联网论坛,我了解到EC2实例要从公共子网连接到互

    • 问题内容: 当设备在android上启动时,我一直在尝试启动服务,但无法正常工作。我已经看了许多在线链接,但是这些代码都不起作用。我忘记了什么吗? 广播接收器 问题答案: 作为附加信息:BOOT_COMPLETE在挂载外部存储之前发送到应用程序。因此,如果将应用程序安装到外部存储,它将不会收到BOOT_COMPLETE广播消息。

    • 我可以对我的AWS EC2实例使用SSH ok。Grizzly已经安装并启动。 我无法通过浏览器从本地计算机连接到EC2公共IPhttp://publicip:8080/索引。我有一个安全组,允许传入访问HTTP端口8080,允许所有传出。我还尝试允许ICMP进行ping,但我也无法ping。我删除了所有安全组限制,但这也不起作用。我检查了iptables,没有任何限制规则。 有什么想法吗? 谢谢

    • 无法通过公共IP访问EC2 Ubuntu 18.04服务器 重启工作EC2实例 正常重启,没有错误 安全组,检查80,443的入站OK 我还能查什么?

    • 问题内容: 如何使用python2.7获取公共IP?不是私有IP。 问题答案: 当前有几种选择: ip.42.pl jsonip.com httpbin.org ipify.org 以下是可以利用上述每种方法的确切方法。 ip.42.pl 这是我找到的第一个选项。对于脚本来说非常方便,您不需要在这里进行JSON解析。 jsonip.com 似乎该域的唯一目的是返回JSON中的IP地址。 httpb