【问题标题】:Getting an SearchPhaseExecutionException while searching from a client node connected to ElasticSearch Cluster从连接到 ElasticSearch 集群的客户端节点搜索时获取 SearchPhaseExecutionException
【发布时间】:2015-05-21 16:30:37
【问题描述】:

我创建了一个有 2 个节点的 ES 集群。其中一个节点配置为主节点,另一个配置为客户端节点。主节点已完全建立索引。

当我在其余客户端上运行以下命令时
http://localhost:9200/_cluster/health, 我得到以下回复

{
    "cluster_name": "827d89539ac6ae688c1a84b9a7076b33",
    "status": "green",
    "timed_out": false,
    "number_of_nodes": 2,
    "number_of_data_nodes": 1,
    "active_primary_shards": 4,
    "active_shards": 4,
    "relocating_shards": 0,
    "initializing_shards": 0,
    "unassigned_shards": 0
}

这表明客户端节点已加入集群。

我可以从主节点搜索和索引。但是在尝试从客户端节点搜索时,我得到了以下异常。

Caused by: org.elasticsearch.action.search.SearchPhaseExecutionException: Failed to execute phase [query_fetch], all shards failed; shardFailures {[FI4lBsqZSne3MzDY5QLDvw][rule][0]: RemoteTransportException[Failed to deserialize response of type [org.elasticsearch.search.fetch.QueryFetchSearchResult]]; nested: TransportSerializationException[Failed to deserialize response of type [org.elasticsearch.search.fetch.QueryFetchSearchResult]]; nested: IOException[Expected handle header, got [90]]; }
at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.onFirstPhaseResult(TransportSearchTypeAction.java:272)
at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction$3.onFailure(TransportSearchTypeAction.java:224)
at org.elasticsearch.search.action.SearchServiceTransportAction$7.handleException(SearchServiceTransportAction.java:324)
at org.elasticsearch.transport.netty.MessageChannelHandler.handleException(MessageChannelHandler.java:181)
at org.elasticsearch.transport.netty.MessageChannelHandler.handleResponse(MessageChannelHandler.java:148)
at org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:125)
at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:296)
at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462)
at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443)
at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303)
at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:268)
at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:255)
at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)
at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

我用来连接主节点的设置是

ImmutableSettings.Builder settingsBuilder = ImmutableSettings.settingsBuilder()
            //.classLoader(getClass().getClassLoader()) // set the class loader to PRAppLoader
            .put("cluster.name", "827d89539ac6ae688c1a84b9a7076b33")
            .put("node.name", "wkoduyw7hyd")
            .put("node.master", false)
            .put("node.data", false)
            .put("action.auto_create_index", false) // disable automatic index creation
            .put("script.disable_dynamic", true) // disable dynamic scripts
            .put("script.auto_reload_enabled" , false) // disable script reloading
            .put("path.data", "H:\\WorkSpace\\LunaSprintWorks_Trunc\\miniboot-embedded\\local_8084\\Tomcat\\work\\Catalina\\localhost\\prweb\\PegaSearchIndex")
            ;
    settingsBuilder.put("discovery.zen.ping.multicast.enabled", true);
    settingsBuilder.put("threadpool.index.size", 1);
    settingsBuilder.put("threadpool.search.size", 1);
    settingsBuilder.put("threadpool.bulk.size", 1);
    settingsBuilder.put("threadpool.suggest.size", 1);
    settingsBuilder.put("threadpool.get.size", 1);
    settingsBuilder.put("threadpool.percolate.size", 1);
    settingsBuilder.put("transport.netty.worker_count", 2);
    settingsBuilder.put("http.netty.worker_count", 1);

我在客户端节点中执行的搜索查询在其余客户端上运行良好。

我从 queryBuilders 构造的查询是

{
  "query" : {
    "filtered" : {
      "query" : {
        "query_string" : {
          "query" : "pxRetrieveReportData",
          "default_field" : "_instancename",
          "default_operator" : "and",
          "allow_leading_wildcard" : true,
          "analyze_wildcard" : true
        }
      },
      "filter" : {
        "fquery" : {
          "query" : {
            "query_string" : {
              "query" : "NOT _isexternal:true",
              "default_field" : "_instancename",
              "default_operator" : "and",
              "allow_leading_wildcard" : true
            }
          },
          "_cache" : false
        }
      }
    }
  },
  "fields" : "*"
}

您能否告诉我在哪些情况下会出现此异常?

我在两个节点中使用相同版本的 elasticsearch jar。

【问题讨论】:

  • 你的客户端是什么版本的ES,你的集群是什么版本?
  • 两者都有 elasticsearch 1.0.2。版本
  • 你确定吗?此异常表示版本不匹配。
  • 我发现了这个问题。我们重构了一个 elasticsearch 库,使其具有不同的包名称。主节点有这个 jar,客户端节点有从 elasticsearch.org 站点下载的标准 jar。感谢 Stefan 指出问题。

标签: exception search elasticsearch


【解决方案1】:

该异常表明客户端和集群之间可能使用了混合 Elasticsearch 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多