从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
相关产品推荐
相关产品推荐

