Spark中連接Mysql

在開發中涉及到spark連接到Mysql的部分操作,雖然要用scala進行編寫,但是有過Java語言的一些基礎上手scala並不是件難事…
以下爲連接部分的代碼,注意在使用前要引入相關的依賴,比如mysql的連接驅動等等,這些就不用我多BB了吧。示例demo:

def main(args: Array[String]): Unit = {
	val conf = new SparkConf().setAppName("test").setMaster("local")
	val sc = new SparkContext(conf)
	val sqlContext = new SQLContext(sc)
	val properties = new Properties()
	// 設置數據庫用戶名和密碼
	properties.put("user","test")
	properties.put("password","test")
	// 注意自己所連數據庫的地址
	val url = "jdbc:mysql://localhost:3306/test"
	// 對應的表名
	val test= sqlContext.read.jdbc(url,"test",properties)
	// 數據的展示
    test.show()
}

然而在我做好這些充分準備的時候,迫不及待的想連上數據庫一看究竟,但是卻遭到了無情的拒絕!!! 報錯警告…
錯誤的原因如下:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
一頓操作猛如虎,難不成寫法不對??? 在網上看了一些解決方案,但是好像不太適用。直到看到了這個老哥總結的,可能是因爲自己的配置問題。

通信鏈路故障,則表示DB根本無法訪問。 這可能有以下一個或多個原因:

  1. JDBC URL中的IP地址或主機名是錯誤的。 本地DNS服務器無法識別JDBC URL中的主機名。 JDBC URL中的端口號丟失或錯誤。 數據庫服務器已關閉。 數據庫服務器不接受TCP / IP連接。 數據庫服務器已用完連接。
  2. Java和DB之間的某些東西阻止了連接,例如 防火牆或代理。

要解決這個問題,請遵循以下建議:

1.使用ping驗證並測試它們。 刷新DNS或使用JDBC URL中的IP地址。 根據MySQL DB的my.cnf進行驗證。 啓動數據庫。
2.驗證是否在沒有–skip-networking選項的情況下啓動mysqld。 重新啓動數據庫並相應地修改代碼,以便最終關閉連接。
3.禁用防火牆和/或配置防火牆/代理以允許/轉發端口。
最後發現是自己連接數據庫的ip寫錯了… 難受呀 嗎啡!!!
感謝老哥的總結。。。
感謝老哥的總結。。。鏈接轉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章