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 ...
随机推荐
- 浅谈count(*)、count(1)、count(列名)
count(*) 和 count(1)和count(列名)区别 执行效果上: count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL count(1)包括了所有列, ...
- 【分享·微信支付】 C# MVC 微信支付教程系列之公众号支付
微信支付教程系列之公众号支付 今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后 ...
- mysql资源地址
http://ftp.ntu.edu.tw/MySQL/Downloads/MySQL-5.7/
- chchc
---恢复内容开始--- 51CTO博客-原创IT文章分享平台 Logo 首页 文章 专家 专家博客 博客之星 推荐博客 我的博客 网站导航 学院 博客 下载 家园 论坛 CTO训练营 WOT 51C ...
- hmac 算法模块
Hmac算法:Keyed-Hashing for Message Authentication.它通过一个标准算法,在计算哈希的过程中,把key混入计算过程中 Python自带的hmac模块实现了标准 ...
- 深入浅出SharePoint——Caml快速开发
适用于Visual Studio 2010的Caml智能感知工具 http://visualstudiogallery.msdn.microsoft.com/15055544-fda0-42db-a6 ...
- MVC过滤器的使用总结
一.过滤器的作用 在MVC项目当中,当我们要实现这些功能时:身份验证,异常处理.日志记录,性能统计,如果按照一般的做法那就需要在每个页面重复做这些工作,这样做起来不仅费时费力,代码也会变得冗余难懂,如 ...
- API接口数据自检
这个周末的娱乐,通用模块,让后端自检,严格客户端按照文档的要求来,妈妈再也不担心我加班了,对某些团队来说,可能根本用不着,本是想到就尝试一把而已. 哎,傻X的客户端程序员,时间都去推辞扯淡打扮啦,好好 ...
- SVM中为何间隔边界的值为正负1
在WB二面中,问到让讲一下SVM算法. 我回答的时候,直接答道线性分隔面将样本分为正负两类,取平行于线性切割面的两个面作为间隔边界,分别为:wx+b=1和wx+ b = -1. 面试官就问,为什么是正 ...
- 2018-2019-2 网络对抗技术 20165322 Exp5 MSF基础应用
2018-2019-2 网络对抗技术 20165322 Exp5 MSF基础应用 目录 实验内容与步骤 一个主动攻击实践 MS08-067(失败) ms17_010_psexec(成功且唯一) 一个针 ...