2017-01-12 1 views
2

Utilisation des billets de blog sur Apache et Hortonworks J'ai été en mesure de diffuser de NiFi à Spark lorsque les deux sont situés sur la même machine. Maintenant, j'essaie de passer de NiFi sur une instance EC2 à un cluster EMR dans le même sous-réseau et groupe de sécurité et je rencontre des problèmes. L'erreur spécifique étant rapportée par le DME machine à base estNiFi Streaming à étincelle sur 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) 

En utilisant netstat sur la machine de base je vois n'ont une connexion TCP ouverte à la boîte Nifi sur le port de site à site (dans mon cas 8090). Sur la machine NiFi, dans le fichier nifi-app.log, je vois les journaux du "thread de travail de site à site" à propos de ma connexion machine principale (et rien sur les erreurs). Donc, la connexion initiale semble être réussie mais pas beaucoup après cela. Lorsque j'ai exécuté mon code Spark localement, j'étais sur l'instance NiFi EC2, donc je sais que cela fonctionne en général. Je frappe juste quelque chose, probablement lié à la sécurité, une fois que le client est un cluster EMR. Pour contourner le problème, je peux poster un fichier sur S3 et lancer une étape Spark à partir de NiFi (en utilisant un script Python), mais je préfère diffuser les données (et utiliser Kafka n'est pas une option). Est-ce que quelqu'un d'autre est passé de NiFi à EMR? La différence étant que j'ai la sécurité désactivée et j'utilise http, pas https (et je reçois une connexion refusée par opposition à un 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

Donc, juste pour confirmer, dans nifi.properties vous définissez nifi.remote.input.socket.port à 8090? et avez-vous défini une valeur pour nifi.remote.input.host? –

+0

Oui et non. J'ai modifié le post avec la section site vers site du fichier de propriétés. – Zik

+3

Ok, vous pouvez essayer de définir nifi.remote.input.host sur un nom d'hôte de l'instance EC2 (si NiFi est en cours d'exécution) qui pourrait être résolu par EMR. Le client site-to-site du code spark va utiliser l'URL de l'API NiFi REST pour demander à NiFi où se connecter pour site-to-site, et NiFi va renvoyer l'hôte et le port du site propriétés sur site. –

Répondre

3

Bryan Bende avait la solution dans un commentaire ci-dessus: une fois que je mis nifi.remote.input.host à l'adresse IP de la machine actuelle en continu commencé à travailler.