zoukankan      html  css  js  c++  java
  • SparkR链接mysql数据库(踩坑)

    本文主要讲述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")

    再次提交集群即可顺利完成任务。

     

  • 相关阅读:
    Python实战:网络爬虫都能干什么?
    写了个脚本将json换成md
    RAC +MVVM
    Python 基础指令以及库管理工具pipenv
    CocoaPods创建自己的公开库、私有库
    python脚本解析json文件
    iOS 面试题
    路由器 大杂烩
    大数据挖掘基本概念
    Node.js实践
  • 原文地址:https://www.cnblogs.com/ldsggv/p/9067663.html
Copyright © 2011-2022 走看看