在solr导入中关闭ResultSet后不允许操作

时间:2017-08-27 13:56:50

标签: mysql solr apache-zookeeper solrcloud

我在solr-6.6.0中进行完全导入时遇到错误。 我正在接受例外的抨击

当我设置时,会发生这种情况 BATCHSIZE =" -1"在我的db-config.xml

如果我将此值更改为batchSize =" 100"然后导入将运行没有任何错误。

但建议的价值是" -1"。 任何有关solr抛出此异常的建议。

顺便说一下,我试图导入的数据并不大,我试图导入的数据只有250个文档。

堆栈追踪:

org.apache.solr.handler.dataimport.DataImportHandlerException: java.sql.SQLException: Operation not allowed after ResultSet closed
at org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:61)
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.hasnext(JdbcDataSource.java:464)
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator$1.hasNext(JdbcDataSource.java:377)
at org.apache.solr.handler.dataimport.EntityProcessorBase.getNext(EntityProcessorBase.java:133)
at org.apache.solr.handler.dataimport.SqlEntityProcessor.nextRow(SqlEntityProcessor.java:75)
at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:267)
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:475)
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:516)
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:414)
at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:329)
at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:232)
at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:415)
at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:474)
at org.apache.solr.handler.dataimport.DataImporter.lambda$runAsync$0(DataImporter.java:457)
at java.lang.Thread.run(Thread.java:745)

顺便提一下警告:

Could not read DIH properties from /configs/state/dataimport.properties :class org.apache.zookeeper.KeeperException$NoNodeException

当config目录不可写时会发生这种情况。 如何在solrCloud模式下使config目录可写。 我使用zookeeper作为看门狗。我们可以继续更改有动物园管理员的配置文件的权限吗? 非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

使用fetchSize =" -1"只有在没有它的情况下运行时才会推荐 。它的行为取决于JDBC驱动程序,但是人们假设其推荐is this sentence from the old wiki

的原因
  

DataImportHandler旨在逐行传输行。它将获取大小值(默认值:500)传递给Statement#setFetchSize,而某些驱动程序则不会这样做。对于MySQL,将batchSize属性添加到值为-1的dataSource配置。这会将Integer.MIN_VALUE传递给驱动程序作为提取大小,并防止大型表的内存不足。

除非您实际上看到了默认值的问题,否则请单独保留设置,并假设您的JDBC驱动程序执行正确的操作(... -1可能无法执行此操作。< / p>

dataimport.properties必须可写的原因是它在上次导入运行到文件时写入属性,因此您可以通过引用SQL语句中上次更新的时间来执行增量更新。

如果要使用此功能,您必须使目录可写为客户端(solr)。我的猜测是,如果你不使用delta导入,你可以忽略警告。