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")
再次提交集群即可顺利完成任务。
SparkR链接mysql数据库(踩坑)的更多相关文章
- flask 链接mysql数据库 小坑
#config.py MYSQL_NAME = 'root' MYSQL_PASSWORD = 'zyms90bdcs' MYSQL_HOST = 'xxxx' MYSQL_POST = ' MYSQ ...
- Python学习笔记9-Python 链接MySql数据库
Python 链接MySql数据库,方法很简单: 首先需要先 安装一个MySql链接插件:MySQL-python-1.2.3.win-amd64-py2.7.exe 下载地址:http://dev. ...
- Tomcat通过JNDI方式链接MySql数据库
原文:Tomcat通过JNDI方式链接MySql数据库 拷贝MySQL的JDBC驱动到Tomcat的lib路径下 配置全局数据源或者单个Web应用的局部数据源 局部数据源 在Tomcat的conf/C ...
- C# 链接MySql数据库
C# 链接MySql数据库只得注意的几点: 1.C#链接MySql数据库要在网上下载一个mysql-connector-net-6.0.4-noinstall.rar 这里面放的都是一堆dll .将 ...
- 写给小白的JAVA链接MySQL数据库的步骤(JDBC):
作为复习总结的笔记,我罗列了几个jdbc步骤,后边举个简单的例子,其中的try块请读者自行处理. /* * 1.下载驱动包:com.mysql.jdbc.Driver;网上很多下载资源,自己找度娘,此 ...
- Java链接MySQL数据库的用配置文件和不用配置文件的代码
1.利用配置文件(db.properties)链接MySQL数据库 package tool; import java.io.FileInputStream;import java.sql.Conne ...
- SQLServer 远程链接MySql数据库详解
SQLServer 远程链接MySql数据库详解 by:授客 QQ:1033553122 测试环境: Microsoft Windows XP Professional 版本2000 Service ...
- Java基于jdbc链接mysql数据库步骤示列
用JDBC来链接MYSQL数据库,基本步骤都大同小异,只不过不同的数据库之间的URL地址有些不同.其基本步骤可分为以下几点: 1.加载相应的数据库的JDBC驱动程序. 2.利用驱动管理器DriverM ...
- jmeter链接mysql数据库
一.下载与MySQL对应的jar包 1.1.查询MySQL的版本, 命令语句 :SELECT VERSION(); 1.2.MySQL官网下载jar包 ,https://downloads.mysql ...
随机推荐
- Oracle spool 小结
关于SPOOL(SPOOL是SQLPLUS的命令,不是SQL语法里面的东西.) 对于SPOOL数据的SQL,最好要自己定义格式,以方便程序直接导入,SQL语句如: select taskindex|| ...
- python 3 输入和输出
一.普遍的输入和输出 1.输入 在python3中,函数的输入格式为:input(),能够接受一个标准输入数据,返回string类型. input() 函数是从键盘作为字符串读取数据,不论是否使用引号 ...
- 采用powershell创建project网站集(摘抄自https://www.cnblogs.com/jindahao/p/5855668.html)
采用powershell创建project网站集,具体步骤如下 1.输入License Enable-ProjectServerLicense –Key "23CB6-N4X8Q-WWD7M ...
- 期初付年金(annuity-due)
含义:在 n 个时期,每个时期初付款1元. ——期初付年金的现值因子 ——期初付年金的积累值因子 关系: 二.期初付年金和期末付年金的关系
- namespace 相关
#include <iostream>using namespace std;namespace first{ int var = 5;}namespace second{ double ...
- MTK 官方 openwrt SDK 使用
来源 1.https://github.com/unigent/openwrt-3.10.14 上面有个 问题:SDK 缺少 linux-3.10.14-p112871.tar.xz 在 http ...
- Mac sshw 使用
sshw ssh client wrapper for automatic login. install use go get go get -u github.com/yinheli/sshw/cm ...
- zeromq 笔记
一. 当执行zmq_bind后会进入mute state,直到有进入或者出去的连接发生才会进入ready state 在mute state状态下会根据不同的套接字类型决定是丢弃消息还是阻塞 可参考z ...
- unittest:2 执行多条用例,仅执行一次setUp和tearDown
对象方法setUp()和tearDown() 每个用例执行前后都会被调用.但是有另外一种场景:setUp之后执行完所有用例,最后调用一次tearDown.比如打开网页,多条用例分别验证网页上的元素正确 ...
- vue项目出现的错误汇总
报错一: expected "indent", got "!" 通过vue-cli创建的项目,不需要在webpack.base.conf.js中再手动配置关于c ...