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

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

SparkR链接mysql数据库(踩坑)的更多相关文章

  1. flask 链接mysql数据库 小坑

    #config.py MYSQL_NAME = 'root' MYSQL_PASSWORD = 'zyms90bdcs' MYSQL_HOST = 'xxxx' MYSQL_POST = ' MYSQ ...

  2. Python学习笔记9-Python 链接MySql数据库

    Python 链接MySql数据库,方法很简单: 首先需要先 安装一个MySql链接插件:MySQL-python-1.2.3.win-amd64-py2.7.exe 下载地址:http://dev. ...

  3. Tomcat通过JNDI方式链接MySql数据库

    原文:Tomcat通过JNDI方式链接MySql数据库 拷贝MySQL的JDBC驱动到Tomcat的lib路径下 配置全局数据源或者单个Web应用的局部数据源 局部数据源 在Tomcat的conf/C ...

  4. C# 链接MySql数据库

    C# 链接MySql数据库只得注意的几点: 1.C#链接MySql数据库要在网上下载一个mysql-connector-net-6.0.4-noinstall.rar  这里面放的都是一堆dll .将 ...

  5. 写给小白的JAVA链接MySQL数据库的步骤(JDBC):

    作为复习总结的笔记,我罗列了几个jdbc步骤,后边举个简单的例子,其中的try块请读者自行处理. /* * 1.下载驱动包:com.mysql.jdbc.Driver;网上很多下载资源,自己找度娘,此 ...

  6. Java链接MySQL数据库的用配置文件和不用配置文件的代码

    1.利用配置文件(db.properties)链接MySQL数据库 package tool; import java.io.FileInputStream;import java.sql.Conne ...

  7. SQLServer 远程链接MySql数据库详解

    SQLServer 远程链接MySql数据库详解 by:授客 QQ:1033553122 测试环境: Microsoft Windows XP Professional 版本2000 Service ...

  8. Java基于jdbc链接mysql数据库步骤示列

    用JDBC来链接MYSQL数据库,基本步骤都大同小异,只不过不同的数据库之间的URL地址有些不同.其基本步骤可分为以下几点: 1.加载相应的数据库的JDBC驱动程序. 2.利用驱动管理器DriverM ...

  9. jmeter链接mysql数据库

    一.下载与MySQL对应的jar包 1.1.查询MySQL的版本, 命令语句 :SELECT VERSION(); 1.2.MySQL官网下载jar包 ,https://downloads.mysql ...

随机推荐

  1. 前端静态资源版本更新与缓存之——通过gulp 在原html文件上自动化添加js、css版本号

    原理 修改js和css文件 通过对js,css文件内容进行hash运算,生成一个文件的唯一hash字符串(如果文件修改则hash号会发生变化) 替换html中的js,css文件名,生成一个带版本号的文 ...

  2. JDBC连接数据库反射实现O/R映射

    测试preparedStatement public void testPreparedStatement(){ Connection connection=null; PreparedStateme ...

  3. [BZOJ 3514]Codechef MARCH14 GERALD07加强版 (CHEF AND GRAPH QUERIES)

    [BZOJ3514] Codechef MARCH14 GERALD07加强版 (CHEF AND GRAPH QUERIES) 题意 \(N\) 个点 \(M\) 条边的无向图,\(K\) 次询问保 ...

  4. ubuntu卸载virtualbox

    本想在ubuntu下virtualbox,可惜出错了,需要卸载后再安装,只能百度拼凑后再安装: 1.首先是执行删除命令:sudo apt-get remove virtualbox*( 这样就不用去查 ...

  5. C# winform 数据库操作知识点总结(干货)

    1.数据库连接及操作 在说数据库操作之前,先说一下数据库连接操作字符串的获取 首先,点击服务器资源管理器,接下来选中数据连接右键点击添加连接,填入你要连接的服务器名称,点击单选框使用SQL Serve ...

  6. EF和linq to sql 关系

    LINQ to SQL 允许你用任何类来代表数据库中的数据.表.同样的,EF也允许你用任何类来代表苏据库中的数据.表. 所不同的的地方是Linq to sql 用这些被修饰过的类直接同数据库打交道,存 ...

  7. linux下批量重命名文件

    # 使用通配符批量创建 多个文件:$ touch zqunor{1..7}.txt # 批量将多个后缀为 .txt 的文本文件重命名为以 .c 为后缀的文件:$ rename 's/\.txt/\.c ...

  8. Redis的安装和部署(windows )

    Redis是一个开源的试用ANSI C语言编写的.遵守BSD协议.支持网络.可基于内存可持久化的日志型.key-value数据库.通常被称为数据结构服务器. redis的数据类型有:字符串(strin ...

  9. i2c 通信

    时间长了记忆就会模糊, 保存下逻辑分析抓到的图像, 什么时候需要可以看一眼. 当clk处于高电平时, data线有下降,说明开始传输, 有上升说明结束传输. 发送地址无回应: 发送地址有回应 正常数据 ...

  10. MySQL导出表结构方法

    方法一: 以下用的是Navicat Premium,可以换成任意图形化客户端 SELECT COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHAR ...