连接被拒绝:尝试连接到远程 Spark 群集时 spark.example.com/xxx.xxx.xxx.xxx:70



我在EC2机器上设置了一个Spark独立集群。集群总共包含 1 个主节点和 2 个工作节点。当我尝试在 PySpark shell 的帮助下将 Spark 作业从本地计算机提交到远程主服务器时,我收到连接被拒绝错误。

在我的本地计算机上尝试连接到远程 Spark Master(EC2 实例(:

pyspark --master spark://spark.example.com:7077

在本地计算机上运行上述命令时,出现以下错误:

Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: test.example.com/52.66.70.6:7077
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:323)
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:633)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
... 1 more
Caused by: java.net.ConnectException: Connection refused
... 11 more
2018-08-31 08:58:09 ERROR StandaloneSchedulerBackend:70 - Application has been killed. Reason: All masters are unresponsive! Giving up.
2018-08-31 08:58:09 WARN  StandaloneSchedulerBackend:66 - Application ID is not initialized yet.
2018-08-31 08:58:09 WARN  StandaloneAppClient$ClientEndpoint:66 - Drop UnregisterApplication(null) because has not yet connected to master
2018-08-31 08:58:09 WARN  MetricsSystem:66 - Stopping a MetricsSystem that is not running
2018-08-31 08:58:10 ERROR SparkContext:91 - Error initializing SparkContext.

当我通过登录到我的一个 Spark 节点运行相同的命令时,它已成功连接。

/etc/hosts 文件:

127.0.0.1 localhost
127.0.0.1 spark.example.com #Changing this to floating/Public IP throws "Cannot Bind to port 7077" error
127.0.0.1 slave1

spark-env.sh

MASTER_HOST=spark.example.com

EC2 入站安全组配置为允许"所有流量"从"互联网上的任何位置"到"所有端口">

以下是我的 Spark 主节点(EC2 实例(上的lsof日志

lsof -i :7077
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    20671 ubuntu  237u  IPv6  79763      0t0  TCP localhost:7077 (LISTEN)
java    20671 ubuntu  249u  IPv6  80993      0t0  TCP localhost:7077->localhost:42553 (ESTABLISHED)
java    20671 ubuntu  250u  IPv6  80994      0t0  TCP localhost:7077->localhost:42554 (ESTABLISHED)
java    20910 ubuntu  252u  IPv6  80992      0t0  TCP localhost:42554->localhost:7077 (ESTABLISHED)
java    20912 ubuntu  251u  IPv6  80991      0t0  TCP localhost:42553->localhost:7077 (ESTABLISHED)

您的问题是您的 Spark 提交过程无法与 Spark 主节点通信。您没有提到您的安全组配置,我假设这是问题所在。

当我在 EC2 上为 Spark 配置入站安全规则时,我打开了所有端口(TCP 和 UDP(,但将源设置为系统的公有 IP 地址。这意味着只有网络上的计算机才能访问该系统。

如果要加强安全性,请启用以下端口:

8080 - 火花 UI

4040 - 火花工作 UI

8088 - 闪光灯 UI

7077 - Spark 提交接口

注意:您需要在主设备和从设备之间启用安全组中的所有端口。他们需要能够公开地相互交流。

相关内容

最新更新