2015-06-14 74 views
0

我有一个自定义类扩展UpdateRequestProcessorFactory当它被添加到索引时对文档做一些工作。在独立的Solr中,这在v4.10.3中工作正常。我搬到SolrCloud v5.2并添加收藏(节点)时,它抛出这个错误:Solr自定义UpdateRequestProcessorFactory失败,出现“错误实例化UpdateRequestProcessorFactory”

ERROR - 2015-06-14 12:25:11.071; [ docs_shard1_replica1] org.apache.solr.common.SolrException; org.apache.solr.common.SolrException: Error CREATEing SolrCore 'docs_shard1_replica1': Unable to create core [docs_shard1_replica1] Caused by: class com.example.solr.update.processor.SelfTaggerUpdateProcessorFactory 
    at org.apache.solr.handler.admin.CoreAdminHandler.handleCreateAction(CoreAdminHandler.java:661) 
    at org.apache.solr.handler.admin.CoreAdminHandler.handleRequestInternal(CoreAdminHandler.java:213) 
    at org.apache.solr.handler.admin.CoreAdminHandler.handleRequestBody(CoreAdminHandler.java:193) 
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:143) 
    at org.apache.solr.servlet.HttpSolrCall.handleAdminRequest(HttpSolrCall.java:646) 
    at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:417) 
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:227) 
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:196) 
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) 
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215) 
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
    at org.eclipse.jetty.server.Server.handle(Server.java:497) 
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) 
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) 
    at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.apache.solr.common.SolrException: Unable to create core [docs_shard1_replica1] 
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:651) 
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:611) 
    at org.apache.solr.handler.admin.CoreAdminHandler.handleCreateAction(CoreAdminHandler.java:628) 
    ... 27 more 
Caused by: org.apache.solr.common.SolrException: Error Instantiating UpdateRequestProcessorFactory, com.example.solr.update.processor.SelfTaggerUpdateProcessorFactory failed to instantiate org.apache.solr.update.processor.UpdateRequestProcessorFactory 
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:815) 
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:658) 
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:637) 
    ... 29 more 
Caused by: org.apache.solr.common.SolrException: Error Instantiating UpdateRequestProcessorFactory, com.example.solr.update.processor.SelfTaggerUpdateProcessorFactory failed to instantiate org.apache.solr.update.processor.UpdateRequestProcessorFactory 
    at org.apache.solr.core.SolrCore.createInstance(SolrCore.java:587) 
    at org.apache.solr.core.SolrCore.createInitInstance(SolrCore.java:622) 
    at org.apache.solr.core.SolrCore.initPlugins(SolrCore.java:2281) 
    at org.apache.solr.update.processor.UpdateRequestProcessorChain.init(UpdateRequestProcessorChain.java:126) 
    at org.apache.solr.core.SolrCore.createInitInstance(SolrCore.java:624) 
    at org.apache.solr.core.SolrCore.initPlugins(SolrCore.java:2265) 
    at org.apache.solr.core.SolrCore.initPlugins(SolrCore.java:2259) 
    at org.apache.solr.core.SolrCore.loadUpdateProcessorChains(SolrCore.java:1069) 
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:766) 
    ... 31 more 
Caused by: java.lang.ClassCastException: class com.example.solr.update.processor.SelfTaggerUpdateProcessorFactory 
    at java.lang.Class.asSubclass(Class.java:3208) 
    at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:475) 
    at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:422) 
    at org.apache.solr.core.SolrCore.createInstance(SolrCore.java:566) 
    ... 39 more 

solrconfig.xml中我已经配置是这样的:

<updateRequestProcessorChain> 
    <processor class="com.example.solr.update.processor.SelfTaggerUpdateProcessorFactory" lib="custom-libs" version="1"> 
     <arr name="source"> 
      <str>title</str> 
      <str>desc</str> 
      <str>subject</str> 
      <str>content</str> 
     </arr> 
     <str name="dest">category</str> 
    </processor> 
    ... 
</updateRequestProcessorChain> 

我试图加我的自定义罐子有两种方式:

  1. 将其添加到server/lib/文件夹中,所有Jetty罐子都位于该文件夹中。这种失败Error Instantiating UpdateRequestProcessorFactory
  2. 将它添加到.system收集的建议,然后让它使用libversion属性提供给<processor />,从而未能与Caused by: java.lang.ClassNotFoundException: com.example.solr.update.processor.SelfTaggerUpdateProcessorFactory

这是否Error Instantiating UpdateRequestProcessorFactory例外告诉一些我不你看吗?从独立到Solrcloud的转变是否需要我错过的自定义代码?

回答

1

问题是classloader问题。我已将我的自定义jar添加到server/lib/文件夹中。

当我添加Collection时,它会实例化我的自定义类,它需要UpdateRequestProcessorFactory类,但在该classloader中不可用。

我解决了这个由server/lib/ rmoving我的罐子,加入这行来solrconfig.xml

<lib dir="${solr.install.dir:../../..}/custom-libs/" regex="solr-.*\.jar" /> 

,并把我的自定义罐子在custom-libs/文件夹中${SOLR_HOME}。这样我确保我的自定义类只在加入Collection时加载,而不是在之前,所以它们在正确的classloader中。

1

我认为问题正在从独立的Solr转移到云端。具体来说,关于你用自定义组件存储你的jar文件的位置。它可能对所有节点都不可见,因此失败。

但是,Solr 5.2确实具有与您可能想要使用的相关的新功能。它允许use the Config API to add the library,假设您启用该功能。

+0

我尝试了你所说的,将场景简化为1节点云。我从节点的lib文件夹中删除了自定义jar文件,创建了.system集合,上传了自定义jar文件,我可以列出OK。我在我的solrconfig.xml中添加了“lib”和“version”属性。我重新启动Solrcloud,添加集合,现在错误是由:java.lang.ClassNotFoundException:com.example.solr.update.processor.SelfTaggerUpdateProcessorFactory – s1m3n

+1

您是否使用了-Denable.runtime.lib = true? 另外,原始问题也可能表明接口与父节点不匹配(ClassCastException)。之间可能会有一些构造器更改。我会检查5.2中的源代码示例,并将它用作早期版本中的示例。 –

+0

我想我找到了答案,与此http:// stackoverflow相关。com/a/8728829/1412531 – s1m3n

相关问题