首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在弹性搜索中使用YCSB

在弹性搜索中使用YCSB
EN

Stack Overflow用户
提问于 2017-06-23 02:07:43
回答 1查看 356关注 0票数 0

我正在尝试使用YCSB将一些数据加载到Elastic Search中,但我不断收到错误的NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{gdVShcjUToSDe3eJkHJNxw}{192.168.3.87}{192.168.3.87:9300}]]

这是我对Elastic Search Node的配置。

代码语言:javascript
复制
cluster.name: my-application
node.name: reconf-6
network.host: 192.168.3.87
http.port: 9200
transport.tcp.port: 9300
transport.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["elasticsearch-1"]
path.data: data_mount/es
path.logs: data_mount/es

我首先启动了10个这样的节点,通过curl -XGET 'http://elasticsearch-1:9200/_cluster/state?pretty',我可以看到集群中有10个节点。

然后我尝试在远程模式下运行YCSB。然后报告异常:

代码语言:javascript
复制
Exception in thread "Thread-3" NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{gdVShcjUToSDe3eJkHJNxw}{192.168.3.87}{192.168.3.87:9300}]]
        at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:344)
        at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:242)
        at org.elasticsearch.client.transport.TransportProxyClient.execute(TransportProxyClient.java:59)
        at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:356)
        at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:403)
        at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:392)
        at org.elasticsearch.client.support.AbstractClient$IndicesAdmin.execute(AbstractClient.java:1220)
        at org.elasticsearch.client.support.AbstractClient$IndicesAdmin.exists(AbstractClient.java:1242)
        at com.yahoo.ycsb.db.elasticsearch5.ElasticsearchClient.init(ElasticsearchClient.java:142)
        at com.yahoo.ycsb.DBWrapper.init(DBWrapper.java:85)
        at com.yahoo.ycsb.ClientThread.run(Client.java:415)
        at java.lang.Thread.run(Thread.java:748)

YCSB中启动客户端的部分代码如下:

代码语言:javascript
复制
if (remoteMode) {
  settings.put("client.transport.sniff", true)
      .put("client.transport.ignore_cluster_name", false)
      .put("client.transport.ping_timeout", "30s")
      .put("client.transport.nodes_sampler_interval", "30s");
  // Default it to localhost:9300
  String[] nodeList = props.getProperty("es.hosts.list", DEFAULT_REMOTE_HOST).split(",");
  System.out.println("Elasticsearch Remote Hosts = " + props.getProperty("es.hosts.list", DEFAULT_REMOTE_HOST));
  TransportClient tClient = new PreBuiltTransportClient(settings.build());
  for (String h : nodeList) {
    String[] nodes = h.split(":");
    try {
      tClient.addTransportAddress(new InetSocketTransportAddress(
          InetAddress.getByName(nodes[0]),
          Integer.parseInt(nodes[1])
      ));
    } catch (NumberFormatException e) {
      throw new IllegalArgumentException("Unable to parse port number.", e);
    } catch (UnknownHostException e) {
      throw new IllegalArgumentException("Unable to Identify host.", e);
    }
  }
  client = tClient;
}
EN

回答 1

Stack Overflow用户

发布于 2017-07-11 22:17:50

您是否尝试过在ES的配置文件中注释掉transport.host?它将传输层绑定到本地主机,并且您已经通过network.host指定了机器的IP。(您需要重新启动节点)

您正在测试哪个版本的ES?我也看到你在他们的github上留下了评论,所以你已经知道它不能在ES 5.x.x上工作。原因是ES 5.x.x拒绝与以前版本的驱动程序连接。

我设法让它与version of risdenk一起工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44706570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档