
# 连上不同的JDBCServer，function不能正常使用
#### 问题
场景一：
通过add jar的方式建立永久函数，当Beeline连上不同的JDBCServer或者JDBCServer重启后都需要重新add jar。
图1场景一异常信息   
![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001389176704.png)
场景二：
show functions能够查到相应的函数，但是无法使用，这是由于连接上的JDBC节点上没有相应路径的jar包，添加上相应的jar包能够查询成功。
图2场景二异常信息   
![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0265793569.png)
#### 回答
场景一：
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*命令。
