文档首页/
MapReduce服务 MRS/
组件操作指南(LTS版)(巴黎区域)/
使用Spark2x/
Spark2x常见问题/
SQL和DataFrame/
连上不同的JDBCServer,function不能正常使用
更新时间:2022-12-14 GMT+08:00
连上不同的JDBCServer,function不能正常使用
问题
场景一:
通过add jar的方式建立永久函数,当Beeline连上不同的JDBCServer或者JDBCServer重启后都需要重新add jar。
图1 场景一异常信息
场景二:
show functions能够查到相应的函数,但是无法使用,这是由于连接上的JDBC节点上没有相应路径的jar包,添加上相应的jar包能够查询成功。
图2 场景二异常信息
回答
场景一:
add jar语句只会将jar加载到当前连接的JDBCServer的jarClassLoader,不同JDBCServer不会共用。JDBCServer重启后会创建新的jarClassLoader,所以需要重新add jar。
添加jar包有两种方式:可以在启动spark-sql的时候添加jar包,如spark-sql --jars /opt/test/two_udfs.jar;也可在spark-sql启动后再添加jar包,如add jar /opt/test/two_udfs.jar。add jar所指定的路径可以是本地路径也可以是HDFS上的路径。
场景二:
show functions会从外部的Catalog获取当前database中所有的function。SQL中使用function时,JDBCServer会加载该function对应的jar。
若jar不存在,则该function无法使用,需要重新执行add jar命令。
父主题: SQL和DataFrame