Spark Q&A : com/mysql/jdbc/Driver : Unsupported major.minor version 52.0
4915 ワード
Q:RDD計算結果をMySQLに書き込んだ場合、Sparkは次のようにエラーを報告します.
関連部分コード:
A:私の解決方法:特定のバージョンの
インターネット上では、コンパイル時と実行時のJDKバージョンが異なるため、例えばJDK 8.0を使用してコンパイルするが、JDK 7.0のJVM上で実行すると、このようなエラーが発生することが多い.これは私が出会った状況とは違いますが、参考にすることができます.
理由をより詳細に説明するリンクを添付します.
How to fix java.lang.UnsupportedClassVersionError: Unsupported major.minor version
java.lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0のエラー
Peculiar Eclipse java.lang.UnsupportedClassVersionError, Unsupported major.minor version 52.0
java.lang.UnsupportedClassVersionError: com/mysql/jdbc/Driver : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:190)
関連部分コード:
rdd.foreachPartition(iter => {
var conn: Connection = null
var ps: PreparedStatement = null
val tableName = "SOME_TABLE"
val sql = s"INSERT INTO $tableName(value1,value2,value3,value4) VALUES(?,?,?,?)"
try {
Class.forName("com.mysql.jdbc.Driver").newInstance
conn = DriverManager.getConnection("jdbc:MYSQSL://HOST.DB:8868/DB", "USERNAME", "PASSWORD")
while (iter.hasNext) {
val msg = iter.next()
ps = conn.prepareStatement(sql)
val value1 = timestamp
val value2 = msg._1._2
val value3 = msg._1._1
val value4 = msg._2
ps.setTimestamp(1, java.sql.Timestamp.valueOf(value1))
ps.setString(2, value2)
ps.setString(3, value3)
ps.setInt(4, value4)
ps.executeUpdate()
}
} catch {
case e: Exception => println("-> Exception!\t:\t" + e)
} finally {
if (ps != null) ps.close()
if (conn != null) conn.close()
}
})
A:私の解決方法:特定のバージョンの
mysql-connector-java
を使用して6.0.6と5.1.14の2つのバージョンを使用することを試みたが、sparkのバージョンと一致する5.1.38だけが正常に使用できることが分かった.<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.38version>
dependency>
インターネット上では、コンパイル時と実行時のJDKバージョンが異なるため、例えばJDK 8.0を使用してコンパイルするが、JDK 7.0のJVM上で実行すると、このようなエラーが発生することが多い.これは私が出会った状況とは違いますが、参考にすることができます.
理由をより詳細に説明するリンクを添付します.
How to fix java.lang.UnsupportedClassVersionError: Unsupported major.minor version
java.lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0のエラー
Peculiar Eclipse java.lang.UnsupportedClassVersionError, Unsupported major.minor version 52.0