spark-shell连接数据库java.sql.SQLSyntaxErrorException: Unknown databas
生活随笔
收集整理的這篇文章主要介紹了
spark-shell连接数据库java.sql.SQLSyntaxErrorException: Unknown databas
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
完整報錯如下:
2020-05-05 11:16:50 WARN ?TaskSetManager:66 - Lost task 1.0 in stage 9.0 (TID 47, Laptop, executor 2): java.sql.SQLSyntaxErrorException: Unknown database 'leaf'at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)at java.sql.DriverManager.getConnection(DriverManager.java:664)at java.sql.DriverManager.getConnection(DriverManager.java:247)at $line57.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$1.apply(<console>:28)at $line57.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$1.apply(<console>:26)at org.apache.spark.rdd.JdbcRDD$$anon$1.<init>(JdbcRDD.scala:82)at org.apache.spark.rdd.JdbcRDD.compute(JdbcRDD.scala:78)at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)at org.apache.spark.scheduler.Task.run(Task.scala:109)at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:345)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:748)ArrayBuffer()測試代碼是:
import java.sql.DriverManager import org.apache.spark.rdd.JdbcRDD import org.apache.spark.{SparkConf, SparkContext}object One extends App { val con = new SparkConf().setAppName("rddmysql").setMaster("yarn")val sc = new SparkContext(con)#---------------------下面是spark-shell部分----------------------------//********************************直接從mysql中讀取數據(并且加條件)val getcon=()=>{Class.forName("com.mysql.cj.jdbc.Driver").newInstance()DriverManager.getConnection("jdbc:mysql://Desktop:3306/leaf","appleyuchi","appleyuchi")}val jdbcmysql=new JdbcRDD(sc, //sc程序入口getcon, // 數據庫連接"select * from spark where num >=? and num <=?", //條件查詢語句339233, //最小值3395045, //最大值2, //partition分區ressultSet=>{//返回內容(獲取內容) ressultSet是自己起的別名,可以隨便起 id和age的下標是由它在你數據庫中的位置決定的val id =ressultSet.getInt(1)val age =ressultSet.getInt(2)(id,age) //返回})// ,然后再把age等于18的數據取出val jdbcmysql2 = jdbcmysql.filter(x=>x._2==1935)//再把過濾后的數據保存到mysql中(自己在mysql中創建數據,有id和age)println(jdbcmysql2.collect().toBuffer)//*****************************將數據用RDD直接存到mysql中jdbcmysql2.foreachPartition(x=>{val con = DriverManager.getConnection("jdbc:mysql://Desktop:3306/leaf","appleyuchi","appleyuchi") //建立連接val eq = con.prepareStatement("insert into spark values(?,?)") //添加sql語句。需要提前在mysql中建好結構相同的表x.foreach(t=>{eq.setInt(1,t._1)eq.setInt(2,t._2)eq.executeUpdate()})eq.close()con.close()}) #---------------------上面是spark-shell部分----------------------------sc.stop() }
?
錯誤分析:
明明數據庫是存在的,為什么說unknown,憑我們的功底,sql語法肯定不會出錯,那么問題到底在哪里?
解決方案:
https://gitee.com/appleyuchi/cluster_configuration/blob/master/物理環境配置流程-必須先看.txt
?
總結
以上是生活随笔為你收集整理的spark-shell连接数据库java.sql.SQLSyntaxErrorException: Unknown databas的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云听如何发布作品
- 下一篇: 汇优app(沟通从会汇开始)