当我问这个问题时,我已经通过谷歌阅读了很多文章。许多答案表明,客户端和服务器端之间存在不匹配的版本。所以我决定将罐子从服务器端直接复制到客户端,结果是......如你所知,同样的例外:
org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null, configuration:{use:database=default})
当我通过直线连接到hiveserver2时,它顺利:) 看到我的联系。
所以,我认为当我使用jdbc时它也会起作用。但是,不幸的是,它抛出了异常,下面是我项目中的罐子。
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连接配置单元时是否有人遇到相同的情况?
答案 0 :(得分: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。