mysql - 在 solr import 中关闭 ResultSet 后不允许操作

标签 mysql solr apache-zookeeper solrcloud

我在 solr-6.6.0 中进行完全导入时遇到错误。 我收到如下异常

这发生在我设置
我的 db-config.xml 中的 batchSize="-1"

如果我将此值更改为 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 模式下可写。 我正在使用 zookeeper 作为看门狗。我们可以继续更改 zookeeper 的配置文件的权限吗? 非常感谢您的帮助。

最佳答案

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

DataImportHandler is designed to stream row one-by-one. It passes a fetch size value (default: 500) to Statement#setFetchSize which some drivers do not honor. For MySQL, add batchSize property to dataSource configuration with value -1. This will pass Integer.MIN_VALUE to the driver as the fetch size and keep it from going out of memory for large tables.

除非您真的看到默认值有问题,否则不要管设置并假设您的 JDBC 驱动程序做正确的事情(.. 它可能不会用 -1 作为值) .

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

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

关于mysql - 在 solr import 中关闭 ResultSet 后不允许操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45905729/

相关文章:

mysql - fputcsv 未将数据库导出到 csv

mysql - 字段列表中的未知列,参数化存储过程

java - 如何在 SolrJ 中使用 SpellingResult 类

docker - 如何恢复kafka数据

docker - 创建主题,但在Kubernetes上使用Python获得Kafka FailedPayloadsError

C# 将数据导出到 Excel 时格式化列

mysql - 在 mysql 5.5.25 中使用的正确语法表示不存在

Django haystack SearchQuerySet 到 QuerySet

search - 一个词短语搜索,以避免在 Solr 中出现词干

java - 使用多线程系统监视zookeeper上的多个节点