首页 文章

JDBC-HiveServer:'client_protocol is unset!' - CS中的1.1.1

提问于
浏览
0

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

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

当我通过直线连接到hiveserver2时它很顺利:)看到我的连接 .

enter image description here

所以,我认为当我使用jdbc时它也会起作用 . 但是,不幸的是,它引发了异常,下面是我项目中的 jar .

  • hive-jdbc-1.1.1.jar

  • hive-jdbc-standalone.jar

  • hive-metastore-1.1.1.jar

  • hive-service-1.1.1.jar从服务器端复制那些hive 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 spark 1.6.0 hive 1.1.1

通过spark-JDBC连接hive时是否有人遇到相同的情况?

1 回答

  • 1

    由于直线工作,预计您的程序也应该正确执行 .

    打印当前项目类路径

    你可以试试这样的事来理解你的自我 .

    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 .

相关问题