2017-03-13 20 views
2

Javaクライアントをelasticsearchサーバに接続しようとしています。Javaクライアントをelasticsearchサーバに接続できません

Elasticsearch 2.4.0は、離れたサーバーにインストールされています。 これにアクセスするには、ポート10700を使用する必要があります(「telnet xxxx 10700」を実行すると、ポートが開いているので機能します)

私は今2日間エラーがあり、 netty4の依存関係の間に矛盾がありますが、修正できません。 (私のネッテイの依存関係はトランジションですが、私は自分でインポートしません)

どうすればこの問題を解決できますか?

Javaコード

public void connexionToEs() throws UnknownHostException { 
    String clusterName = "xxxx"; 
    String serverAddress = "xxxx"; 

    try{ 
     Settings settings = Settings.builder() 
       .put("cluster.name", clusterName) 
       .put("client.transport.sniff", true) 
       .build(); 
     TransportClient client = new PreBuiltTransportClient(settings); 
     client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(serverAddress), 10700)); 

     SearchResponse response = client.prepareSearch().execute().actionGet(); 
     String output = response.toString(); 
     System.out.println(output); 
     client.close(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

依存性:

<!-- DEPENDENCIES FOR ELASTICSEARCH CLIENT --> 
<dependency> 
    <groupId>org.elasticsearch</groupId> 
    <artifactId>elasticsearch</artifactId> 
    <version>5.2.0</version> 
</dependency> 

<dependency> 
    <groupId>org.elasticsearch.client</groupId> 
    <artifactId>transport</artifactId> 
    <version>5.2.0</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-api</artifactId> 
    <version>2.6.2</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-core</artifactId> 
    <version>2.6.2</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-web</artifactId> 
    <version>2.6.2</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-to-slf4j</artifactId> 
    <version>2.6.2</version> 
</dependency> 

エラー:

Exception in thread "elasticsearch[_client_][management][T#1]" 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$SniffNodesSampler$1.run(TransportClientNodesService.java:488) 
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:527) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 

netty4依存:

io.netty:netty:3.10.6.Final 
io.netty:netty-buffer:4.0.28.Final 
io.netty:netty-codec:4.0.28.Final 
io.netty:netty-codec-http:4.1.7.Final 
io.netty:netty-common:4.0.28.Final 
io.netty:netty-handler:4.0.28.Final 
io.netty:netty-resolver:4.1.7.Final 
io.netty:netty-transport:4.0.28.Final 
+0

」5.2.0 '...? Elasticsearch 5.x –

+0

あなたの答えをありがとう。私は前に2.4.0のバージョンで試してみましたが、うまくいきません... –

+0

あなたのNettyバージョンがどこにあってもうまくいかなかったのでしょうか?あなたは4.xコードが3.xベースで動作することを期待してはいけません –

答えて

1

私は次のように、同様の問題を解決:

<dependency> 
    <groupId>org.apache.hbase</groupId> 
    <artifactId>hbase-client</artifactId> 
    <version>1.3.0</version> 
    <exclusions> 
     <exclusion> 
      <groupId>io.netty</groupId> 
      <artifactId>netty-all</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
+0

ありがとうございました! ;) –

0

エラーがスタックトレースの上部にある:スレッドで 例外 "elasticsearch [クライアント] [管理] [T#1]" java.lang.NoSuchMethodErrorの :io.netty.buffer.CompositeByteBuf.addComponents(ZLjava/lang/Iterable;)Lio/netty/buffer/CompositeByteBuf;

コードではaddComponents(...)メソッドをio.netty.buffer.ComposityByteBuffクラスと呼びますが、実行時にはこのメソッドは使用できません。

これは、コンパイルと実行時環境が異なるためです。ソースをコンパイルするために使用するライブラリのバージョンと、実行時に使用されるライブラリのバージョンは、おそらく同じではありません。

+0

あなたの答えをありがとう、私はそれを変更しようとします。 –

0

あなたElasticsearchサーバー用のマッチングのJava依存関係を使用してみてください

<dependency> 
    <groupId>org.elasticsearch</groupId> 
    <artifactId>elasticsearch</artifactId> 
    <version>2.4.0</version> 
</dependency> 
+0

あなたの答えをありがとう。私は以前これを試しましたが、2.4.0 elasticsearch-clientのバージョンは存在しません... –

+0

はい。私はここからコピーした。 https://mvnrepository.com/artifact/org.elasticsearch –

+0

私はそれを見つけられませんでしたhttps://mvnrepository.com/artifact/org.elasticsearch.client/transport –

1

右Elasticsearch依存バージョンを使用してください - あなたのサーバー上と同じ。

また、2.xはelasticsearchトランスポート依存性を必要としません。削除することができます

<dependency> 
    <groupId>org.elasticsearch.client</groupId> 
    <artifactId>transport</artifactId> 
    <version>5.2.0</version> 
</dependency> 

最後に、2.xはPreBuiltTransportClientを使用しません。ドキュメントhereを参照してください。

0

は、これらの網状-すべての依存関係を除外します。これで問題は解決します。

compile.exclude group: "io.netty", module:"netty-all" 
compile.exclude group: "org.jboss.netty", module:"netty" 
関連する問題