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)