2016-03-08 82 views
0

我一直试图在Elastic-Search中创建一个TrasportClient,但不知何故无法运行它。无法在Elastic-Search中创建TransportClient

Java代码:

package es_example.custom; 

import org.elasticsearch.action.index.IndexResponse; 
import org.elasticsearch.client.Client; 
import org.elasticsearch.client.transport.TransportClient; 
import org.elasticsearch.common.settings.Settings; 
import org.elasticsearch.common.transport.InetSocketTransportAddress; 
import org.elasticsearch.node.NodeBuilder; 


import java.net.InetAddress; 
import java.net.UnknownHostException; 
import java.util.HashMap; 
import java.util.Map; 

public class EsRoutingTransportClient 
{ 
    // Both the IP addresses are replaced with valid IP addresses in code 
    String ZEN_DISCOVERY_UNICAST_HOSTS_NO_JSON = "10.100.100.100,10.111.111.111"; 

    String ES_PATH_HOME = "/app/devuser/elasticsearch/dummy-path-home/"; 

    String ES_CLUSTER_NAME = "my-cluster"; // Verified cluster exists 

    Integer ES_PORT = 9200; 

    private Client client; 

    public EsRoutingTransportClient() 
    { 
     String elasticSearchHost = ZEN_DISCOVERY_UNICAST_HOSTS_NO_JSON; 
     Integer defaultPort = ES_PORT; 
     String elasticSearchCluster = ES_CLUSTER_NAME; 

     Settings settings = Settings.settingsBuilder() 
       .put("http.enabled", true) 
       .put("discovery.zen.ping.multicast.enabled", false) 
       // Both the IP addresses are replaced with valid IP addresses in code 
       .put("discovery.zen.ping.unicast.hosts", "[\"10.100.100.100\",\"10.111.111.111\"]") 
       .put("discovery.zen.minimum_master_nodes", 1) 
       .put("path.home", ES_PATH_HOME) 
       .build(); 
     client = TransportClient.builder().settings(settings).build(); 
     parseAndAddHostPort(elasticSearchHost, defaultPort); 
    } 

    private void parseAndAddHostPort(String elasticSearchHost, Integer defaultPort) 
    { 
     String [] esHosts = elasticSearchHost.split(","); 
     for (String esHost: esHosts) 
     { 
      String [] hostPort = esHost.split(":"); 
      Integer esPort = defaultPort; 

      if (hostPort.length == 2) 
      { 
       esHost = hostPort[0]; 
       esPort = Integer.parseInt(hostPort[1]); 
      } 
      try 
      { 
       client = ((TransportClient)client).addTransportAddress(
         new InetSocketTransportAddress(InetAddress.getByName(esHost), esPort)); 
       System.out.println("Added " + esHost + " with port " + esPort + " as a transport address"); 
      } catch (UnknownHostException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    public void sendMessage (String msg, String indexName, String type, String id, String routing) 
    { 
     try 
     { 
      byte[] byteBuffer = msg.getBytes(); 
      IndexResponse response = client.prepareIndex(indexName, type, id) 
        .setSource(byteBuffer) 
        .execute() 
        .actionGet(); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public static void main (String args[]) 
    { 
     EsRoutingTransportClient esClient = new EsRoutingTransportClient(); 
     esClient.sendMessage("Hello", "storm", "json-trips", null, null); 
    } 
} 

的pom.xml:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>es_example</groupId> 
    <artifactId>es-proj</artifactId> 
    <version>0.0.3-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <name>es-proj</name> 
    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <dependencies> 
    <dependency> 
     <groupId>org.elasticsearch</groupId> 
     <artifactId>elasticsearch</artifactId> 
     <version>2.2.0</version> 
    </dependency> 
    </dependencies> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.4.3</version> 
     <configuration /> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <artifactSet> 
       <excludes> 
        <exlcude>com.esotericsoftware.kryo:kryo:*</exlcude> 
       </excludes> 
       </artifactSet> 
       <transformers> 
       <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" /> 
       <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
        <mainClass>es_example.custom.EsRoutingTransportClient</mainClass> 
       </transformer> 
       </transformers> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

我运行它,如下所示:

mvn clean package 
java -jar target/es-proj-0.0.3-SNAPSHOT.jar 

这是个例外,我得到:

Mar 07, 2016 4:17:43 PM org.elasticsearch.plugins.PluginsService <init> 
INFO: [Bullseye] modules [], plugins [], sites [] 
Mar 07, 2016 4:17:48 PM org.elasticsearch.client.transport.TransportClientNodesService$SimpleNodeSampler doSample 
INFO: [Bullseye] failed to get node info for {#transport#-1}{10.100.100.100}{10.100.100.100:9200}, disconnecting... 
ReceiveTimeoutTransportException[[][10.100.100.100:9200][cluster:monitor/nodes/liveness] request_id [0] timed out after [5003ms]] 
    at org.elasticsearch.transport.TransportService$TimeoutHandler.run(TransportService.java:645) 
    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) 

Added 10.100.100.100 with port 9200 as a transport address 
Mar 07, 2016 4:17:53 PM org.elasticsearch.client.transport.TransportClientNodesService$SimpleNodeSampler doSample 
INFO: [Bullseye] failed to get node info for {#transport#-1}{10.100.100.100}{10.100.100.100:9200}, disconnecting... 
ReceiveTimeoutTransportException[[][10.100.100.100:9200][cluster:monitor/nodes/liveness] request_id [1] timed out after [5002ms]] 
    at org.elasticsearch.transport.TransportService$TimeoutHandler.run(TransportService.java:645) 
    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) 

Mar 07, 2016 4:17:58 PM org.elasticsearch.client.transport.TransportClientNodesService$SimpleNodeSampler doSample 
INFO: [Bullseye] failed to get node info for {#transport#-1}{10.100.100.100}{10.100.100.100:9200}, disconnecting... 
ReceiveTimeoutTransportException[[][10.100.100.100:9200][cluster:monitor/nodes/liveness] request_id [2] timed out after [5000ms]] 
    at org.elasticsearch.transport.TransportService$TimeoutHandler.run(TransportService.java:645) 
    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) 

Mar 07, 2016 4:18:03 PM org.elasticsearch.client.transport.TransportClientNodesService$SimpleNodeSampler doSample 
INFO: [Bullseye] failed to get node info for {#transport#-2}{10.111.111.111}{10.111.111.111:9200}, disconnecting... 
ReceiveTimeoutTransportException[[][10.111.111.111:9200][cluster:monitor/nodes/liveness] request_id [3] timed out after [5001ms]] 
    at org.elasticsearch.transport.TransportService$TimeoutHandler.run(TransportService.java:645) 
    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) 

Added 10.111.111.111 with port 9200 as a transport address 
NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{10.100.100.100}{10.100.100.100:9200}, {#transport#-2}{10.111.111.111}{10.111.111.111:9200}]] 
    at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:290) 
    at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:207) 
    at org.elasticsearch.client.transport.support.TransportProxyClient.execute(TransportProxyClient.java:55) 
    at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:286) 
    at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:351) 
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:85) 
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:59) 
    at es_example.custom.EsRoutingTransportClient.sendMessage(EsRoutingTransportClient.java:82) 
    at es_example.custom.EsRoutingTransportClient.main(EsRoutingTransportClient.java:94) 

Ping两台主机都在同一个终端上工作。

(我已经使用10.100.100.100和在上面的例子10.111.111.111。在实际的代码的基础上,它们是真实有效的IP地址)

此外,在列表中提到的节点之一以上是主站和另一个是数据节点。

我不知道如何解决这个问题。

任何帮助将不胜感激。

谢谢!

回答

1

您为TransportClient创建的设置不正确。他们都应该在您的ES节点上的elasticsearch.yml文件中进行设置。这些是用于配置ES服务器的设置,而不是ES TransportClient。

所以下面的设置需要在elasticsearch.yml文件中设置对10.100.100.100和10.111.111.111

cluster.name: my-cluster 
http.enabled: true 
discovery.zen.ping.multicast.enabled: false 
discovery.zen.ping.unicast.hosts: ["10.100.100.100","10.111.111.111"] 
discovery.zen.minimum_master_nodes: 1 
path.home: /path/to/es/home 

同时运行的节点上,您需要在每台主机上设置以下与他们设置正确的IP地址(这是每个主机将绑定到让其他节点和客户端可以看到并连接到它们的IP地址):

network.host: 10.100.100.100 

然后你就可以建立自己的ES客户仅是这样的:

Settings settings = Settings.settingsBuilder().build(); 
    client = TransportClient.builder().settings(settings).build(); 
    parseAndAddHostPort(elasticSearchHost, defaultPort); 

这应该有效。

+0

谢谢瓦尔。我尝试了上面的设置,但它仍然不起作用,异常仍然是一样的。任何更多的指针?我尝试了端口9300以及9200 – user2250246

+0

您确定您的主机列表是“”10.100.100.100:9300,10.111.111.111:9300“',因为9200仅用于HTTP接口,所以TransportClient必须使用端口9300。 – Val