TL; DR: HiveとMySqlの両方のJDBCを併用すると問題がありますか?HiveとMySqlの両方のJDBCドライバを使用しています
私は、MySql JDBCドライバを使用していくつかのSQLクエリを実行し、その後、Hive JDBCを使用して別のHiveクエリを送信するアプリケーションに取り組んでいます。この例外がスローされた後
com.mysql.cj.core.exceptions.WrongArgumentException: Connector/J cannot handle a database URL of type 'jdbc:hive2:'.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:54)
at com.mysql.cj.core.conf.url.ConnectionUrl$Type.fromValue(ConnectionUrl.java:149)
at com.mysql.cj.core.conf.url.ConnectionUrl.getConnectionUrlInstance(ConnectionUrl.java:193)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:195)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at company.services.HiveV2Provider.createConnection(HiveProvider.scala:105)
at company.services.HiveProvider$class.loanConnection(HiveProvider.scala:66)
今すぐクエリが正常に実行されます。今起こっていただきました
は、コードがハイブは、それがこの例外をスロークエリ実行しようとしたときにMySQLのクエリは、正常に機能していることです。
MySqlとHiveの両方のドライバをロードしているので、MySqlドライバはこのクエリを最初に実行しようとしていますが、Hive URLに遭遇するとこの例外がスローされ、Hiveドライバがそれを見て実行しますクエリが正常に
これは、私は、MySQLのコードを実行する方法を示します。
val query = ... // query is created here
var mysqlConn: Connection = null
var stmt: Statement = null
try {
Class.forName("com.mysql.jdbc.Driver")
mysqlConn = DriverManager.getConnection(mysqlAddress, username, password)
stmt = mysqlConn.createStatement()
val rs = stmt.executeQuery(query)
val returnVal = someResultSetHandlingFunction(rs)
rs.close()
returnVal
} catch {
case NonFatal(e) =>
logWarning(s"Failed to execute query on: $mysqlAddress", e)
throw e
} finally {
if (mysqlConn != null) {
mysqlConn.close()
}
}
マイハイブコードはのみのドライバ名と同じになります。org.apache.hive.jdbc.HiveDriver
(そしてそれはjdbc:hive2://someurl
と通信)
のバージョン:
- ハイブは、ハイブ-JDBC-1.1.0-cdh5.7.1
- MySQLは避けるためにどのような方法があるかどう誰もが知ってい6.0.4
のmysql-コネクタ-javaのですこの例外を受け取りますか? 2つの異なるJDBCドライバをロードするのは問題がありますか?
- 私は直接JDBCを使用するには、そのおそらくない最高のものを知っているが、私は何かをチェックしている:私は、これはわずか数の明確化問題
すべきではないという印象を受ける他のやや似質問で読みますおよびJDBCは、私はスカラ座を使用してい
- このタスクのための罰金ですが、私はそれがこの問題のために事前に
おかげで重要とは思わない
私の解決策(SQLServerドライバ、同じエラー)にコメントしていましたが、答えが長すぎます。別の答えとして掲示される。多分それはハイブのドライバーケースにも合っているでしょう。 – jfneis
私は明らかにすでに動作していますが、これらの問題はデバッグに迷惑をかけるので、あなたの答えが将来の開発者に役立つかもしれないことを願っています:) – Gideon