文档首页/
    
      
      MapReduce服务 MRS/
      
      
        
        
        组件操作指南(阿布扎比区域)/
        
        
        使用Spark2x/
        
        
        Spark2x常见问题/
        
        
        SQL和DataFrame/
        
      
      连上不同的JDBCServer,function不能正常使用
    
  
  
    
        更新时间:2024-07-19 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