2017-03-22 2 views
0

Ich spiele mit Fink + ElasticSearch 5 Sink, mit X-Pack-Authentifizierung.Fink mit ElasticSearch 5 Sink Konflikte der io.nety Bibliothek

bekam ich diesen Fehler zuerst Flink Xpack ElasticSearch 5 ElasticsearchSecurityException missing autentication

So fixiert i es die ES Sink-Funktion zu überschreiben.

Mein Problem ist jetzt, wenn ich versuche, den Job auf flink (mit dem Glas) zu laufen, habe ich diesen Fehler bekommen.

Caused by: java.lang.NoSuchMethodError: io.netty.buffer.CompositeByteBuf.addComponents(ZLjava/lang/Iterable;)Lio/netty/buffer/CompositeByteBuf; 
    at org.elasticsearch.transport.netty4.Netty4Utils.toByteBuf(Netty4Utils.java:78) 
    at org.elasticsearch.transport.netty4.Netty4Transport.sendMessage(Netty4Transport.java:422) 
    at org.elasticsearch.transport.netty4.Netty4Transport.sendMessage(Netty4Transport.java:93) 
    at org.elasticsearch.transport.TcpTransport.internalSendMessage(TcpTransport.java:1058) 
    at org.elasticsearch.transport.TcpTransport.sendRequestToChannel(TcpTransport.java:1040) 
    at org.elasticsearch.transport.TcpTransport.executeHandshake(TcpTransport.java:1555) 
    at org.elasticsearch.transport.TcpTransport.openConnection(TcpTransport.java:502) 
    at org.elasticsearch.transport.TcpTransport.connectToNode(TcpTransport.java:460) 
    at org.elasticsearch.transport.TransportService.connectToNode(TransportService.java:318) 
    at org.elasticsearch.client.transport.TransportClientNodesService$SimpleNodeSampler.doSample(TransportClientNodesService.java:408) 
    at org.elasticsearch.client.transport.TransportClientNodesService$NodeSampler.sample(TransportClientNodesService.java:354) 
    at org.elasticsearch.client.transport.TransportClientNodesService.addTransportAddresses(TransportClientNodesService.java:195) 
    at org.elasticsearch.client.transport.TransportClient.addTransportAddress(TransportClient.java:312) 
    at com.ceptinel.flink.sink.Elasticsearch5ApiCallBridge.createClient(Elasticsearch5ApiCallBridge.java:45) 
    at org.apache.flink.streaming.connectors.elasticsearch.ElasticsearchSinkBase.open(ElasticsearchSinkBase.java:272) 
    at org.apache.flink.api.common.functions.util.FunctionUtils.openFunction(FunctionUtils.java:36) 
    at org.apache.flink.streaming.api.operators.AbstractUdfStreamOperator.open(AbstractUdfStreamOperator.java:112) 
    at org.apache.flink.streaming.runtime.tasks.StreamTask.openAllOperators(StreamTask.java:375) 
    at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:251) 
    at org.apache.flink.runtime.taskmanager.Task.run(Task.java:670) 
    at java.lang.Thread.run(Thread.java:745) 

Es sieht aus gibt es einen Konflikt auf der Bibliothek io.netty zwischen flink und ES-Client (nicht sicher, ob die x-pack-Transport oder der Stecker selbst)

Jede Abhilfe diesen Konflikt zu vermeiden ?

Dank Luis

Antwort

1

Bis dies in Apache Flink festgelegt ist (durch die netty Abhängigkeit weg Shading), empfehle ich Ihnen zu Schatten netty in Ihrem Benutzer Glas in einem anderen Namespace.

Wenn Sie Ihr Projekt mit Apache Maven erstellen, können Sie dazu die maven-shade-plugin verwenden. Überprüfen Sie auch diese Dokumentation Seite auf Schattierung in Flink:

+0

Danke für die Antwort, ja, das war ich habe versucht, ich denke, dass ich nicht die Schattierung richtig mache. Ich werde es überprüfen. –

+0

Fühlen Sie sich frei, Ihre Schattierung irgendwo (neue Frage SO), ich kann es dann überprüfen, wenn Sie möchten. –

+0

Ich versuche etwas zu tun wie: io.netty org.elasticsearch.client.dependences.io.netty

1

Ich benutze Gradle anstelle von Maven, aber der Prozess ist mehr oder weniger gleich.

Im Fall, wenn Sie immer noch dieses Problem haben (was sehr unwahrscheinlich ist), habe ich versucht zu lösen und die Lösung scheint zu funktionieren.

Hier ist meine Abhängigkeiten blockieren:

dependencies { 
    .... 
    compile(group: 'org.apache.flink', name: 'flink-streaming-java_2.10', version: project.flinkStreamJavaVersion) 
      { 
       exclude group: 'io.netty' 
      } 
    compile group: 'org.apache.flink', name: 'flink-connector-kafka-0.10_2.10', version: project.flinkKafkaConnectorVersion 
    compile group: 'org.apache.flink', name: 'flink-connector-elasticsearch5_2.10', version: project.flinkElasticConnectorVersion 

    .... 
} 

und dann im Schatten io.netty in ein anderes Paket mit:

shadowJar { 
    .... 
    relocate 'io.netty', 'shaded.io.netty' 
    .... 
} 

Hinweis: Der Fang auszuschließen ist kommen netty von

flink-streaming-java_2.10 

Wenn Sie versuchen, ohne zu th schattieren e netty kommt von flink-streaming, es ändert nichts. Daher ist es sehr wichtig, die netty von flink-streaming lib auszuschließen.

Verwandte Themen