我试图从apache nutch索引到单节点ES群集并得到此错误。
org.elasticsearch.transport.RemoteTransportException:失败 从流中反序列化异常响应引起: org.elasticsearch.transport.TransportSerializationException:失败 从流中反序列化异常响应 org.elasticsearch.transport.netty.MessageChannelHandler.handlerResponseError(MessageChannelHandler.java:173) 在 org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:125) 在 org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) 在 org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) 在 org.elasticsearch.common.netty.channel.DefaultChannelPipeline $ DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) 在 org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:296) 在 org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462) 在 org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443) 在 org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303) 在 org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) 在 org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) 在 org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559) 在 org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:268) 在 org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:255) 在 org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) 在 org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) 在 org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318) 在 org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) 在 org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) 在 org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) 在 org.elasticsearch.common.netty.util.internal.DeadLockProofWorker $ 1.run(DeadLockProofWorker.java:42) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(Thread.java:745)引起: java.io.StreamCorruptedException:不支持的版本:1 at org.elasticsearch.common.io.ThrowableObjectInputStream.readStreamHeader(ThrowableObjectInputStream.java:46) 在java.io.ObjectInputStream。(ObjectInputStream.java:301)at org.elasticsearch.common.io.ThrowableObjectInputStream。(ThrowableObjectInputStream.java:38) 在 org.elasticsearch.transport.netty.MessageChannelHandler.handlerResponseError(MessageChannelHandler.java:170) ......还有23个
从进一步的研究中我发现我应该在客户端和ES服务器上拥有相同的jvm版本。参考:http://jontai.me/blog/2013/06/elasticsearch-remotetransportexception-failed-to-deserialize-exception-response-from-stream/
我使用的是ES版 2.3.2 ,而我的JVM版本是" 1.8.0_91" 。 当我检查/plugins/indexer-elastic/plugin.xml时,指定的版本是 1.4.1 。我想知道除了降级ES集群版本之外,这可能是问题和可能的解决方案。我想继续使用ES 2.3.2。请帮帮我。
PS:我用于编制索引的命令是 bin/nutch index crawl/crawldb/ -linkdb crawl/linkdb/ crawl/segments/20160801174223/
答案 0 :(得分:1)
通过进一步研究,我得到了解决方案。由于nutch的索引器插件(ES 1.4.1)中的版本不匹配,错误即将出现。
一个解决方案是从 https://github.com/apache/nutch/blob/master/ 下载源代码,然后按照 src /中提供的说明,使用弹性服务器版本自定义插件版本插件/索引弹性/ howto_upgrade_es.txt 强>
在src / plugin / indexer-elastic / ivy.xml中升级elasticsearch依赖项
升级src / plugin / indexer-elastic / plugin.xml中的Elasticsearch特定依赖项获取列表 依赖项及其版本执行:$ ant -f ./build-ivy.xml
$ ls lib /- 醇>
使用ant或任何其他构建工具从nutch源文件夹构建。
然后我们可以在没有此问题的情况下索引到ElasticSearch。 干杯:)