zz22 发表于 2015-9-6 11:49:52

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.iyunv.com/zhyh1986/article/details/9856817
  
  对于一些配置参数的理解
  host/hostContext/hostPort和以前一样,如果设置不对可能在Cloud页面的链接不能进入
  可以把zkHost配置到这里吗
  
  Errors
  1.about sharedLib
  config : <lib dir="./lib" />
  lib目录位于$SOLR_HOME下
  WARN - <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
页: [1]
查看完整版本: Solr 4.6 | Setting Up an External ZooKeeper Ensemble | upgrade solr to Solr4.6