如何处理DataImportHandler中的并发数据导入?

时间:2014-01-31 21:50:58

标签: multithreading solr concurrency dataimporthandler

有人可以解释一下DIH如何处理并发?

我已经设置了MySql JDBC数据源,需要通过向Apache Stanbol增强服务器发送字段值来对导入的数据进行一些自定义处理。我是通过在dataimport(onImportEnd)末尾配置自定义EventListener来实现的。

在dataimport过程中,我将每个文档的字段值复制到我的StanbolEventListener和onImportEnd中的静态Map,我将它们发送给Stanbol进行增强。

我需要在这个过程中处理并发性。需要使我的Map线程安全。为此,我需要了解DIH中如何处理并发。

出于测试目的,我为文档0-100发出了/ dataimport,并且在请求处理时发出了另一个文档101-200的请求。我在日志中得到了以下异常。有人可以解释如何在DIH中处理我的数据并发性吗?;

    [Thread-15] ERROR org.apache.solr.handler.dataimport.JdbcDataSource  – Ignoring Error when closing connection
java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@1e820764 is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming result sets before attempting more queries.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924)
    at com.mysql.jdbc.MysqlIO.checkForOutstandingStreamingData(MysqlIO.java:3314)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2477)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2809)
    at com.mysql.jdbc.ConnectionImpl.rollbackNoChecks(ConnectionImpl.java:5165)
    at com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:5048)
    at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4654)
    at com.mysql.jdbc.ConnectionImpl.close(ConnectionImpl.java:1630)
    at org.apache.solr.handler.dataimport.JdbcDataSource.closeConnection(JdbcDataSource.java:410)
    at org.apache.solr.handler.dataimport.JdbcDataSource.close(JdbcDataSource.java:395)
    at org.apache.solr.handler.dataimport.DocBuilder.closeEntityProcessorWrappers(DocBuilder.java:284)
    at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:273)
    at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:422)
    at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:487)
    at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:468)

1 个答案:

答案 0 :(得分:2)

Dileepa

用于DIH的多线程功能,但自SOLR 4.0以来已被删除

https://issues.apache.org/jira/browse/SOLR-3262