jdbc hiveserver:'客户端\协议未设置!'-cs中的1.1.1

bvhaajcl  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(357)

当我问这个问题时,我已经通过google阅读了很多文章。许多答案表明,客户端和服务器端的版本不匹配。所以我决定直接将jar从服务器端复制到客户端,结果是。。。。如你所知,同样的例外:

org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null, configuration:{use:database=default})

当我通过beeline连接到hiveserver2时,它运行良好:)查看我的连接。

所以,我认为当我使用jdbc时,它也会起作用。但是,不幸的是,它抛出了这个异常,下面是我项目中的jar。
hive-jdbc-1.1.1.jar
hive-jdbc-standalone.jar
hive-metastore-1.1.1.jar
hive-service-1.1.1.jar这些配置单元jar是从服务器端复制的。

def connect_hive(master:String){
        val conf = new SparkConf()
                        .setMaster(master)
                        .setAppName("Hive")
                        .set("spark.local.dir", "./tmp");
        val sc = new SparkContext(conf);
        val sqlContext = new SQLContext(sc);
        val url = "jdbc:hive2://192.168.40.138:10000";
        val prop= new Properties();
        prop.setProperty("user", "hive");
        prop.setProperty("password", "hive");
        prop.setProperty("driver", "org.apache.hive.jdbc.HiveDriver");
        val conn = DriverManager.getConnection(url, prop);
        sc.stop();
      }

我的服务器的配置:
hadoop 2.7.3版
Spark1.6.0
Hive1.1.1
有没有人在通过spark jdbc连接hive时遇到同样的情况?

uqcuzwp8

uqcuzwp81#

既然beeline可以工作,那么您的程序也应该正确执行。

打印当前项目类路径

你可以尝试这样的方法来了解你自己。

import java.net.URL
import java.net.URLClassLoader

import scala.collection.JavaConversions._

object App {

  def main(args: Array[String]) {
    val cl = ClassLoader.getSystemClassLoader
    val urls = cl.asInstanceOf[URLClassLoader].getURLs
    for (url <- urls) {
      println(url.getFile)
    }
  }
}

同时检查 hive.aux.jars.path=<file urls> 了解类路径中存在哪些jar。

相关问题