Solr облако не может найти плагин - NoClassDefFoundError
Я использую облачный кластер solr и использую пользовательский компонент поиска - https://github.com/cominvent/request-sanitizer-component.
конфигурации:
Server count: 8
Shards: 16
Replication factor: 3
Max shards per node: 6
Я определил поисковый компонент в solrconfig.xml:
<searchComponent runtimeLib="true" name="request-sanitizer" version="1" class="com.cominvent.solr.RequestSanitizerComponent"/>
Я загрузил jar плагина в коллекцию.system, следуя инструкциям руководства по solr.
Затем я добавляю плагин jar в свою коллекцию, используя API-интерфейс конфигурации с этим curl:
curl http://solr-220.soma.plos.org:8983/solr/50_2/config -H 'Content-type:application/json' -d '{
"add-runtimelib": { "name":"request-sanitizer", "version":1 }
}'
Затем я добавляю поисковый компонент:
curl http://solr-220.soma.plos.org:8983/solr/50_2/config -H 'Content-type:application/json' -d '{
"add-searchcomponent": {
"name": "request-sanitizer",
"runtimeLib": true,
"class": "com.cominvent.solr.RequestSanitizerComponent",
"sanitize": "rows=>50:50" }
}'
Плагин jar и поисковый компонент добавляются в configoverlay.json
в http://solr-220.soma.plos.org:8983/solr/50_2/config/overlay
:
{
"responseHeader":{
"status":0,
"QTime":0},
"overlay":{
"znodeVersion":4,
"runtimeLib":{"request-sanitizer":{
"name":"request-sanitizer",
"version":1}},
"searchComponent":{"request-sanitizer":{
"name":"request-sanitizer",
"runtimeLib":true,
"class":"com.cominvent.solr.RequestSanitizerComponent",
"sanitize":"rows=>50:50"}}}}
Однако, когда я пытаюсь сделать запрос к коллекции, я получаю следующее исключение:
java.lang.NoClassDefFoundError: org/apache/solr/handler/component/SearchComponent
Что не так с моей конфигурацией?
Заметки
Для первой попытки я поместил банку в SOLR_HOME/lib. Первоначально это работало для кластеров с небольшим количеством сегментов - создание коллекции вызывало бы те же исключения NoClassDefFoundError, но они исчезали после перезапуска сервера.
Однако, когда я увеличил до 8 осколков, создание создало те же исключения, и коллекция так и не была создана. Вот почему я решил использовать API конфигурации, но я бы также принял решение, которое использует SOLR_HOME/lib. Одна из возможностей - заставить коллекцию остаться, даже с многочисленными ошибками запуска, если это возможно.
Спасибо за прочтение!
1 ответ
У нас было два экземпляра баночки с дезинфицирующим средством в пути к классам. Удаление одной из банок решило проблему.