Apache Drill(v1.13.0)连接DB2(LUW)报错求助
Apache Drill v1.13.0 与 DB2 LUW 兼容问题解决方案
我确实看到过不少用户成功让Apache Drill v1.13.0和DB2 LUW兼容运行的案例,不过你遇到的这个[jcc][t4][10120][10898][4.15.82] 无效操作:结果集已关闭异常是个典型的驱动兼容问题,咱们一步步来排查解决:
核心问题分析
这个异常本质是旧版DB2 JDBC驱动(你用的4.15.82)和Drill v1.13.0的JDBC结果集处理逻辑不匹配,驱动提前关闭了Drill还在使用的结果集。
具体解决步骤
升级DB2 JDBC驱动版本
旧驱动的结果集管理逻辑和Drill的调用流程冲突,建议升级到DB2 JDBC驱动4.2版本及以上(比如4.26.14或更高的兼容版本)。注意驱动版本要和你的DB2 LUW版本匹配:- DB2 10.5 对应驱动4.2版本
- DB2 11.1/11.5 可以使用更新的4.2.x或更高版本驱动
替换驱动时,要把新的db2jcc4.jar(以及对应的license包如db2jcc_license_cisuz.jar,如果需要)放到Drill的$DRILL_HOME/jars/3rdparty目录下,替换旧文件。如果是分布式集群,所有节点都要同步替换。
检查并修正DB2存储插件配置
确保db2-storage-plugin.conf的关键配置正确:{ "type": "jdbc", "driver": "com.ibm.db2.jcc.DB2Driver", "url": "jdbc:db2://<你的DB2主机>:<端口>/<数据库名>:currentSchema=<目标Schema>;", "username": "<用户名>", "password": "<密码>", "enabled": true, "connectionProperties": { "resultSetHoldability": "1", "useCursorFetch": "true", "fetchSize": "1000" } }其中
connectionProperties里的参数是关键:resultSetHoldability": "1"强制驱动保持结果集打开直到显式关闭useCursorFetch": "true"启用游标式获取,避免一次性加载大量数据导致结果集提前关闭fetchSize": "1000"控制每次获取的行数,平衡性能和结果集稳定性
测试验证
重启Drill集群后,先用简单查询测试,比如:SELECT * FROM db2.<你的Schema>.<测试表> LIMIT 10;如果不再抛出异常,再逐步测试复杂查询,确认兼容性。
额外注意事项
- 不要混用不同版本的DB2驱动包,确保所有节点的驱动版本一致
- 如果你的DB2 LUW开启了SSL连接,需要在JDBC URL中添加SSL相关参数,同时确保驱动包支持SSL功能
内容的提问来源于stack exchange,提问作者JMX
相关产品推荐
相关产品推荐

