【发布时间】:2017-05-28 04:37:32
【问题描述】:
使用Apache 和Hortonworks 上的博客文章,当两者都位于同一台机器上时,我已经能够从 NiFi 流式传输到 Spark。现在我正在尝试从一个 EC2 实例上的 NiFi 流式传输到同一子网和安全组中的 EMR 集群,但我遇到了问题。 EMR Core机器上报的具体错误是
Failed to receive data from NiFi
java.net.ConnectException: Connection refused
at sun.nio.ch.Net.connect0(Native Method)
at sun.nio.ch.Net.connect(Net.java:454)
at sun.nio.ch.Net.connect(Net.java:446)
at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:648)
at java.nio.channels.SocketChannel.open(SocketChannel.java:189)
at org.apache.nifi.remote.client.socket.EndpointConnectionPool.establishSiteToSiteConnection(EndpointConnectionPool.java:708)
at org.apache.nifi.remote.client.socket.EndpointConnectionPool.establishSiteToSiteConnection(EndpointConnectionPool.java:682)
at org.apache.nifi.remote.client.socket.EndpointConnectionPool.getEndpointConnection(EndpointConnectionPool.java:300)
at org.apache.nifi.remote.client.socket.SocketClient.createTransaction(SocketClient.java:129)
at org.apache.nifi.spark.NiFiReceiver$ReceiveRunnable.run(NiFiReceiver.java:149)
在核心机器上使用netstat,我看到它在站点到站点端口(在我的情况下为 8090)上确实有到 NiFi 盒的开放 TCP 连接。在 NiFi 机器上,在 nifi-app.log 文件中,我看到来自“Site-to-Site Worker Thread”的关于我的核心机器建立连接的日志(并且没有任何错误)。所以最初的连接似乎是成功的,但之后就没有成功了。
当我在本地运行我的 Spark 代码时,我在 NiFi EC2 实例上,所以我知道它通常可以工作。一旦客户端是 EMR 集群,我就会遇到一些可能与安全相关的问题。
作为一种解决方法,我可以将文件发布到 S3,然后从 NiFi 启动 Spark 步骤(使用 Python 脚本),但我更愿意流式传输数据(并且不能使用 Kafka)。有没有其他人从 NiFi 流式传输到 EMR 工作?
这篇文章是类似的:Getting data from Nifi to spark streaming 不同之处在于我关闭了安全性,并且我使用的是 http,而不是 https(而且我的连接被拒绝而不是 401)。
编辑:
nifi.properties:
# Site to Site properties
nifi.remote.input.host=
nifi.remote.input.secure=false
nifi.remote.input.socket.host=
nifi.remote.input.socket.port=8090
nifi.remote.input.http.enabled=true
nifi.remote.input.http.transaction.ttl=30 sec
【问题讨论】:
-
所以只是为了确认一下,在 nifi.properties 中您将 nifi.remote.input.socket.port 设置为 8090?您是否为 nifi.remote.input.host 设置了值?
-
是和不是。我已经用属性文件的站点到站点部分编辑了帖子。
-
好的,您可能想尝试将 nifi.remote.input.host 设置为 EMR 可解析的 EC2 实例的主机名(如果 NiFi 正在运行)。 spark流代码中的站点到站点客户端将使用NiFi REST API的URL来询问NiFi在哪里连接站点到站点,NiFi将从站点返回主机和端口到站点属性。
-
这成功了!谢谢!
标签: apache-spark spark-streaming amazon-emr apache-nifi