Spring XD - не удалось найти модуль с именем

У меня есть несколько пользовательских модулей, которые я использую в Spring XD. Я могу без проблем использовать «загрузку модуля» при развертывании XD с одним узлом, но при работе в распределенном режиме у меня есть следующее исключение:

org.springframework.xd.dirt.module.NoSuchModuleException: Could not find module with name 'grobid' and type 'processor'

Я создаю кластер XD с докером, используя Spring XD 1.1.1.RELEASE. Вот последовательность команд, которая приводит к этому исключению:

server-unknown:>admin config server http://docker:9393
Successfully targeted http://docker:9393
xd:>module upload --type processor --name grobid --file /opt/.../grobid-1.0-SNAPSHOT.jar
Successfully uploaded module 'processor:grobid'
xd:>stream create --name grobidTest --definition "http --port=11001 | grobid --grobidHost=http://${GROBID_PORT_8080_TCP_ADDR}:${GROBID_PORT_8080_TCP_PORT} | processedXml:log"
Created new stream 'grobidTest'
xd:>stream deploy --name grobidTest --properties "module.grobid.count=1"
Deployed stream 'grobidTest'

Согласно документации, я настроил автономный экземпляр Redis, и у меня нет журналов при загрузке XD, указывающих на какие-либо проблемы с подключением к нему.

Что может привести к тому, что мой модуль будет недоступен для узлов, в то время как в оболочке у меня есть доступ к его информации:

xd:>module info --name processor:grobid
Information about processor module 'grobid':

  Option Name  Description                                            Default  Type
  -----------  -----------------------------------------------------  -------  --------
  grobidHost   Grobid Host                                            <none>   String
  outputType   how this module should emit messages it produces       <none>   MimeType
  inputType    how this module should interpret messages it consumes  <none>   MimeType

Единственная проблема (я не знаю, является ли это блокировщиком), которую я вижу в журналах, заключается в том, что когда я создаю поток, у меня есть несколько ошибок ZK, которые регистрируются:

zk_1      | 2015-04-13 19:55:37,257 [myid:] - INFO  [ProcessThread(sid:0 cport:-1)::PrepRequestProcessor@645] - Got user-level KeeperException when processing sessionid:0x14cb4593f940001 type:create cxid:0x59 zxid:0x36 txntype:-1 reqpath:n/a Error Path:/xd/modules/sink/log/dependencies Error:KeeperErrorCode = NoNode for /xd/modules/sink/log/dependencies
zk_1      | 2015-04-13 19:55:37,273 [myid:] - INFO  [ProcessThread(sid:0 cport:-1)::PrepRequestProcessor@645] - Got user-level KeeperException when processing sessionid:0x14cb4593f940001 type:create cxid:0x64 zxid:0x3c txntype:-1 reqpath:n/a Error Path:/xd/modules/processor/grobid/dependencies Error:KeeperErrorCode = NoNode for /xd/modules/processor/grobid/dependencies
zk_1      | 2015-04-13 19:55:37,289 [myid:] - INFO  [ProcessThread(sid:0 cport:-1)::PrepRequestProcessor@645] - Got user-level KeeperException when processing sessionid:0x14cb4593f940001 type:create cxid:0x6e zxid:0x41 txntype:-1 reqpath:n/a Error Path:/xd/modules/source/http/dependencies Error:KeeperErrorCode = NoNode for /xd/modules/source/http/dependencies

person gamars    schedule 13.04.2015    source источник


Ответы (1)


Spring XD добавил понятие «общий реестр удаленных модулей» в https://github.com/spring-projects/spring-xd/commit/208181c9f4693d2ef2e4e0d4065d9d8727fa1601 (это версия 1.2, не выпущенная на момент написания). Это зависит от общего местоположения, предположительно HDFS.

Перед этим, если вы собираетесь использовать кластер с пользовательскими загружаемыми модулями, вам нужно каким-то образом сделать место, где записываются модули, доступным для всех контейнеров. Традиционный способ сделать это — использовать что-то вроде NFS.

Если вы используете докер (и, похоже, вы не уверены, что это только на одном хосте), вы можете использовать Объем данных Docker для этого.

И чтобы уточнить, эти два последних абзаца применимы даже к Spring XD 1.1.x.

person ebottard    schedule 14.04.2015