2017-01-12 2 views
2

Mit Blog-Posts auf Apache und Hortonworks konnte ich von NiFi zu Spark streamen, wenn beide auf demselben Computer befinden. Jetzt versuche ich, von NiFi auf einer EC2-Instanz zu einem EMR-Cluster in derselben Subnetz- und Sicherheitsgruppe zu streamen, und ich stoße auf Probleme. Der spezifische Fehler durch die EMR-Core-Maschine gemeldet istNiFi-Streaming zu Funken auf EMR

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) 

Mit netstat auf der Core-Maschine Ich sehe es hat eine offene TCP-Verbindung zum Nifi Box auf dem Site-to-Site-Port (in meinem Fall 8090). Auf der NiFi-Maschine, in der nifi-app.log-Datei, sehe ich Protokolle vom "Site-to-Site-Worker-Thread" über meine Kernmaschine, die die Verbindung herstellt (und nichts über irgendwelche Fehler). Die erste Verbindung scheint also erfolgreich zu sein, aber nicht viel später.

Als ich meinen Spark-Code lokal lief, war ich auf der NiFi EC2-Instanz, also weiß ich, dass es im Allgemeinen funktioniert. Ich treffe gerade etwas, wahrscheinlich sicherheitsbezogen, sobald der Client ein EMR-Cluster ist.

Als Work around kann ich eine Datei an S3 senden und dann einen Spark-Schritt von NiFi (mit einem Python-Skript) starten, aber ich würde lieber die Daten streamen (und die Verwendung von Kafka ist keine Option). Hat jemand anderes Streaming von NiFi zu EMR funktioniert?

Dieser Beitrag ist ähnlich: Getting data from Nifi to spark streaming der Unterschied, ich habe Sicherheit ausgeschaltet und ich benutze http, nicht https (und ich bekomme Verbindung abgelehnt im Gegensatz zu einem 401).

Edit:

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 
+0

Also nur zur Bestätigung, in nifi.properties setzen Sie nifi.remote.input.socket.port auf 8090? und hast du einen Wert für nifi.remote.input.host festgelegt? –

+0

Ja und Nein. Ich habe den Post mit dem Abschnitt site to site der Eigenschaftendatei bearbeitet. – Zik

+3

Ok, vielleicht möchten Sie versuchen, nifi.remote.input.host auf einen Hostnamen der EC2-Instanz zu setzen (wo NiFi läuft), die durch EMR auflösbar wäre. Der Site-to-Site-Client im Spark-Streaming-Code verwendet die URL der NiFi-REST-API, um NiFi zu fragen, wo er sich für Site-to-Site verbinden soll, und NiFi wird Host und Port von der Site zurückgeben -zu-Site-Eigenschaften. –

Antwort

3

Bryan Bende hatte die Lösung in einem Kommentar über: sobald ich nifi.remote.input.host an die IP-Adresse der aktuellen Maschine Streaming gesetzt zu arbeiten begann.