Solr 4.6 | Setting Up an External ZooKeeper Ensemble | upgrade solr to Solr4.6

4.1----->4.6

Solr从4.1到4.6还是有不少改变的。。。

一、solr.xml

  • 在4.3版本开始Solr维护这两套不同格式的solr.xml,旧的遗留格式和自动发现模式,5.0以后会废除遗留格式而只支持自动发现;简单的说自动发现就是把原有格式里对core的定义放到了core.properties里
  • 在4.5版本开始Solr支持把solr.xml交给ZooKeeper维护

 

关于solr.xml以及core.properties的格式参照https://cwiki.apache.org/confluence/display/solr/Solr+Cores+and+solr.xml

https://cwiki.apache.org/confluence/display/solr/Format+of+solr.xml

http://wiki.apache.org/solr/Solr.xml%204.4%20and%20beyond

"Allow solr.xml to be stored in ZooKeeper" refer to https://issues.apache.org/jira/browse/SOLR-4718

 

https://cwiki.apache.org/confluence/display/solr/Command+Line+Utilities#CommandLineUtilities-Scripts

http://blog.csdn.net/zhyh1986/article/details/9856817

 

对于一些配置参数的理解

host/hostContext/hostPort和以前一样,如果设置不对可能在Cloud页面的链接不能进入

可以把zkHost配置到这里吗

 

Errors

1.about sharedLib

config : <lib dir="./lib" /> 

 lib目录位于$SOLR_HOME下

WARN [org.apache.solr.core.SolrResourceLoader] - <Can't find (or read) directory to add to classloader: ./lib (resolved as: /home/andy/work/solr_home/solr1/collection_user/./lib).>

ERROR :logs like

ERROR - 2013-05-22 22:41:16.939; org.apache.solr.common.SolrException; null:java.lang.NoClassDefFoundError: org/apache/lucene/analysis/icu/segmentation/ICUTokenizer
        at java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.lang.Class.privateGetDeclaredConstructors(Class.java:2413)
        at java.lang.Class.getConstructor0(Class.java:2723)
        at java.lang.Class.getConstructor(Class.java:1676)
        at org.apache.solr.core.SolrResourceLoader.newInstance(SolrResourceLoader.java:550)
        at org.apache.solr.schema.FieldTypePluginLoader$2.create(FieldTypePluginLoader.java:342)
        at org.apache.solr.schema.FieldTypePluginLoader$2.create(FieldTypePluginLoader.java:335)
        at org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:151)
        at org.apache.solr.schema.FieldTypePluginLoader.readAnalyzer(FieldTypePluginLoader.java:362)
        at org.apache.solr.schema.FieldTypePluginLoader.create(FieldTypePluginLoader.java:86)
        at org.apache.solr.schema.FieldTypePluginLoader.create(FieldTypePluginLoader.java:43)
        at org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:151)
        at org.apache.solr.schema.IndexSchema.readSchema(IndexSchema.java:467)
        at org.apache.solr.schema.IndexSchema.<init>(IndexSchema.java:164)
        at org.apache.solr.schema.IndexSchemaFactory.create(IndexSchemaFactory.java:55)
        at org.apache.solr.schema.IndexSchemaFactory.buildIndexSchema(IndexSchemaFactory.java:69)
        at org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:727)
        at org.apache.solr.core.CoreContainer.create(CoreContainer.java:765)
        at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:426)
        at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:421)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassNotFoundException: org.apache.lucene.analysis.icu.segmentation.ICUTokenizer
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:789)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)

对于WARN我把配置改为<lib dir="../lib" /> ,这个警告就没有了,这说明:在以前的版本(至少是4.1)中,当前目录是指$SOLR_HOME下;在新版本中,当前目录是指$SOLR_HOME/COLLECTION_CURRENT下

对于ERROR我花了不少时间,各种方法都试过都不行,后来仔细阅读日志文件发现发现不同于版本的特殊情况,对$SOLR_HOME/lib下的jar包被CLASSLOADER加载了3次(我在$SOLR_HOME下只有一个COLLECTION),那基本可以确定是这个原因引起的,但是如何不让solr重复加载呢?后来在jira上发现别人提过https://issues.apache.org/jira/browse/SOLR-4852,在新的版本中 如果sharedLib为$SOLR_HOME/lib,那么必须在你的solr.xml里去掉这个配置项,并且删掉所有其他地方对$SOLR_HOME/lib的指向,因为新版solr不需指定自动扫描$SOLR_HOME/lib下的jar包,如果你指定几次就会多加载几次,那么就会导致当前CLASSLOADER里的.class可能不是你所需要的。其实这样有些费解,特别是当你做Solr升级的时候,希望以后有所改进

 

总结:

新版本对xml的配置文件解析更严格,以前schema.xml中有小错误可能不会报错,现在会导致collection启动失败

新版本Solr索引文件名里还含有*_Lucene41_* 开始以为有问题,仔细看LOG发现 codec=Lucene46

Solr4.4开始支持把索引存到HDFS(https://cwiki.apache.org/confluence/display/solr/Running+Solr+on+HDFS)

 

 

http://www.tuicool.com/articles/n63y6r 

posted on 2014-01-09 15:39  ukouryou  阅读(329)  评论(0编辑  收藏  举报

导航