SparkR鏈接mysql資料庫(踩坑)

来源:https://www.cnblogs.com/ldsggv/archive/2018/05/21/9067663.html
-Advertisement-
Play Games

本文主要講述sparkR鏈接Mysql的過程和坑。 SparkR的開發可以用RStudio工具進行開發,連接spark可以通過RStudio界面中的Connections進行配置連接;具體方法這裡不做介紹。 下麵為spark程式的部分代碼: 在集群和sparkR shell里會有一個不知道是不是bu ...


本文主要講述sparkR鏈接Mysql的過程和坑。

SparkR的開發可以用RStudio工具進行開發,連接spark可以通過RStudio界面中的Connections進行配置連接;具體方法這裡不做介紹。

下麵為spark程式的部分代碼:

if (nchar(Sys.getenv("SPARK_HOME")) < 1) {  
  Sys.setenv(SPARK_HOME = "/usr/local/spark/")  
}  
library(SparkR, lib.loc = c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib")))  
sc <- sparkR.init(master = "local[*]", sparkEnvir = list(spark.driver.memory="2g")) 
df<-read.jdbc("jdbc:mysql://192.168.1.181:3306/dsj_test?user=root&password=123456&characterEncoding=utf8","channel",user="root",password="123456")
newdata<-select(df,df$channel,df$stream_id,df$region,df$isp)
省略具體操作
write.jdbc(newdata, "jdbc:mysql://192.168.1.181:3306/dsj_test?user=root&password=123456&characterEncoding=utf8", "testmysql", mode="overwrite", user = "root", password = "123456"

在集群和sparkR shell里會有一個不知道是不是bug的坑。

復現:

1. 啟動sparkR;

2.進入sparkR中,載入mysql驅動:

sparkR.session(sparkPackages="/usr/local/spark/jars/mysql-connector-java-8.0.11.jar")

3. 連接資料庫,獲取數據:

df<-read.jdbc("jdbc:mysql://192.168.1.181:3306/dsj_test?user=root&password=123456&characterEncoding=utf8","channel",user="root",password="123456")

 在這一步的時候第一次執行是不會過去的,它會報一個異常:

18/05/21 15:44:56 ERROR RBackendHandler: jdbc on 5 failed

java.lang.reflect.InvocationTargetException......

Caused by: java.sql.SQLException: No suitable driver

at java.sql.DriverManager.getDriver(DriverManager.java:315)

at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$7.apply(JDBCOptions.scala:84)

at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$7.apply(JDBCOptions.scala:84)

at scala.Option.getOrElse(Option.scala:121).......

 

4. 再次執行第三步,並不會再次報錯,而是顯示成功;

 

在集群中也一樣,即使添加了mysql驅動也會報出第三步的異常;集群提交的命令為:(載入驅動的三個方式選一個就好,但是提交.jar人物,選--driver-class-path參數)

./spark-submit --master spark://leeco:7077 --packages mysql:mysql-connector-java:8.0.11  --driver-class-path /usr/local/spark/jars/mysql-connector-java-8.0.11.jar --jars /usr/local/spark/jars/mysql-connector-java-8.0.11.jar /Users/leeco/work/R/analysis/analysisF.R

 

這裡的這個坑是在集群中發現的,主要是sparkR第一次載入驅動的時候報異常,第二次正常運行,不知道是不是bug,還是我的配置有問題,有大神知道可以告知,感激不盡。

解決辦法:

在R語言中捕獲異常,再次執行載入數據語句即可:

possibleError <- tryCatch(
df<-read.jdbc("jdbc:mysql://192.168.1.181:3306/dsj_test?user=root&password=123456&characterEncoding=utf8","channel",user="root",password="123456"),
error=function(e) {0}
)
df<-read.jdbc("jdbc:mysql://192.168.1.181:3306/dsj_test?user=root&password=123456&characterEncoding=utf8","channel",user="root",password="123456")

再次提交集群即可順利完成任務。

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 初始化故障排查 1. so依賴缺失 比如報這樣的錯誤: 可以用 安裝依賴包。 實驗發現安裝成功之後,還是報同樣的錯誤。用 查詢, 。上網找了原因,需要再 。而 安裝出來是numactl 2.0.9 2.el6.i686;所以需要再安裝 ,安裝出來是 。 解決方法,安裝libaio.so.1;但 預設 ...
  • 1.decode () 例子:它的寫法如下decode('a','b','c','d'),其中a,b,c,d可以是其他函數也可以是數值,依據我們自己的情況來使用,它的含義是如果a=b,那麼結果顯示c,否則d。 翻譯成我們更通俗易懂的話就是: if(sex=1) then return '男' els ...
  • 以下是MariaDB官方文檔說明,MariaDB如何安裝在已經存在MySQL實例的主機上: 但是如果是先安裝了MariaDB,然後再安裝MySQL,比如: 在 做了一個軟鏈接,即 具體見《MariaDB安裝》的配置是一樣的。 安裝時註意 新的MySQL實例的配置文件,比如/etc/my3308.cn ...
  • 一、什麼是資料庫鏡像 基本軟體的高可用性解決方案 快速的故障轉移恢復(3秒轉移),低硬體成本 基於資料庫級別的實現 二、資料庫鏡像中的伺服器角色 主體伺服器 承載主體資料庫 接受用戶連接和事務處理請求 鏡像伺服器 承載鏡像資料庫 作為主體資料庫的熱備份(主體資料庫的變化及時傳到鏡像資料庫中) 僅在故 ...
  • 轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/80393761 本文出自 "【趙彥軍的博客】" 獲取當前時間 返回當前日期 :select curdate() ; 返回當前時間 :select curtime() ; 返回當前日期和 ...
  • 二進位安裝方式的MariaDB卸載 1. 關閉mysql服務 2. 刪除數據文件和目錄 3. 刪除軟鏈接,二進文件(如有必要) 4. 刪除自啟動配置,配置文件 5. 刪除mysql用戶和用戶組(如有必要) RPM包安裝方式的MariaDB卸載 1. 關閉mysql服務 2. 檢查mysql組件 3. ...
  • 二進位安裝 (CentOS7 + MariaDB 10.2.8) 安裝前準備 1. 關閉NUMA 2. 檢查NUMA 限制設置 ulimit a查看 主要查看open files,max user processes的限制設置。 open files系統打開文件過多,會報 OS error code ...
  • 情景: Dataguard 物理備庫執行恢復報錯: Errors in file /home/u01/app/diag/rdbms/rzorcl11g/ORCL/trace/ORCL_pr00_35893.trc:ORA-01111: name for data file 20 is unknown ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...