You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Hive导入数据至GeoMesa Accumulo时遇JDBC方法不支持错误求助

问题描述

尝试通过JDBC转换器将Hive数据导入GeoMesa Accumulo,配置如下:

geomesa.converters.hive  = {    
  type = "jdbc",   
  connection = "jdbc:hive2://host:10000/default",
  id-field = "$1",
  fields = [
    { name = "my_id", type = "string", transform = "$1" },
    { name = "shape", type = "geometry", transform = "geometry($2)" }
  ]
}

执行导入命令:

echo "SELECT * FROM table" | geomesa-accumulo ingest -u user -p pass -c catalog -s hive.sft -f feature -C hive.conf

已将Hive JDBC驱动放入GeoMesa库,但仍报错:

2023-09-13 10:51:59,640 WARN  [org.locationtech.geomesa.convert2.package$ErrorHandlingIterator] Failed parsing input: 
java.sql.SQLFeatureNotSupportedException: Method not supported
    at org.apache.hive.jdbc.HiveConnection.prepareCall(HiveConnection.java:1215)
    ...
解决思路

1. 指定JDBC转换器使用PreparedStatement

错误根源是GeoMesa JDBC转换器默认调用prepareCall()创建CallableStatement,但Hive JDBC驱动不支持该方法。可以在转换器配置中添加statement-type参数,强制使用PreparedStatement:

修改后的配置:

geomesa.converters.hive  = {    
  type = "jdbc",   
  connection = "jdbc:hive2://host:10000/default",
  statement-type = "prepared",  # 新增配置,指定使用PreparedStatement
  id-field = "$1",
  fields = [
    { name = "my_id", type = "string", transform = "$1" },
    { name = "shape", type = "geometry", transform = "geometry($2)" }
  ]
}

2. 绕开JDBC转换器,先导出Hive数据再导入

如果上述配置无效(比如使用的GeoMesa版本不支持statement-type参数),可以采用间接导入方式:

  • 从Hive导出数据到文件(比如CSV):
    hive -e "SELECT * FROM table" > hive_data.csv
    
  • 配置GeoMesa的CSV转换器,将导出的文件导入Accumulo。

3. 确认JDBC驱动版本兼容性

检查Hive JDBC驱动版本是否与当前Hive集群、GeoMesa版本匹配,优先使用Hive官方提供的对应版本驱动,避免因版本差异导致的方法支持问题。

内容的提问来源于stack exchange,提问作者auliama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:30:10