在使用SparkSQL连接关系型数据库时,需要通过JDBC来加载对应数据库的驱动,如SQLServer JDBC连接用到的sqljdbc4.jar,处理时经常会遇到sparksql抛出jdbc的驱动程序ClassNotFoundException,类似下面的错误提示
Exception in thread "main" java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.apache.spark.sql.jdbc.package$DriverRegistry$.register(jdbc.scala:227)
at org.apache.spark.sql.jdbc.DefaultSource.createRelation(JDBCRelation.scala:94)
at org.apache.spark.sql.sources.ResolvedDataSource$.apply(ddl.scala:265)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:114)
at org.apache.spark.sql.SQLContext.load(SQLContext.scala:1242)
at com.test.SparkSQLSample$.test(SparkSQLSample.scala:21)
at com.test.SparkSQLSample$.main(SparkSQLSample.scala:32)
at com.test.SparkSQLSample.main(SparkSQLSample.scala)
分享一下自己的处理方式
1.最简单的Spark程序以local方式在本地启动,只需要将sqljdbc4.jar关联到项目中即可
2.Spark程序运行在mesos或yarn等分布式任务调度系统上
2.1 这种情况下,可以考虑将驱动包如sqljdbc4.jar,利用maven或sbt打包到spark-submit提交的jar包中,
不过这种方式并不推荐,原因有两点:首先每次新增的依赖包都需要重新打包,其次我在将sqljdbc4打包到Spark-submit的jar,执行Spark作业时发现,底层抛出异常,大致意思sqljdbc4.jar需要用jdk_1.6的版本编译,而我用的1.7,然而其它的依赖包中编译却需要1.7,总的来说,这种方式可能出力后还可能达不到效果
2.2 推荐使用下面的方式,简单便捷,只需要我们在Spark节点添加SPARK_CLASSPATH,并把需要的包引用到SPARK_CLASSPATH即可。
以CentOS为例,在/etc/profile中添加export SPARK_CLASSPATH="/usr/local/lib/*",source /etc/profile 后即生效,这样我们只需要把依赖的驱动包添加到/usr/local/lib/下就可以了
相关推荐
ClassNotFoundException终极解决办法 完美解决ClassNotFoundException,jar包在线查找库,在线下载库
主要介绍了使用IDEA启动项目遇见ClassNotFoundException的正确解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
"java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver" 解决方案 [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket. 解决了jsp连接 sql server 2000的问题
整个系统都没有错误,但是在发布运行后,控制台上却抛出了这样的异常: java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource
JSP中ClassNotFoundException异常的解决办法.pdf 学习资料 复习资料 教学资源
Driver Type JDBC version MySQL Server version Status 5.1 4 3.0, 4.0, 4.1, 4.2 4.1, 5.0, 5.1, 5.5, 5.6, 5.7 Recommended version 5.0 4 3.0 4.1, 5.0 Released version 3.1 4 3.0 4.1, 5.0 Obsolete
主要介绍了Android Caused by: java.lang.ClassNotFoundException解决办法的相关资料,需要的朋友可以参考下
java 9 中引入了模块的概念,默认情况下,Java SE中将不再包含java EE 的Jar包 而在 java 6/7 / 8 时关于这个API 都是捆绑在
weblogic10 与hibernate冲突解决方案 错误如下:org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken linux windows 环境解决方案全解 Linux 启动脚本添加如下: export USER_...
JSON转化时出现 java.lang.ClassNotFoundException: net.sf.ezmorph.MorpherRegistry
struts初学者的数据池配置出现java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource异常的解决办法
java 找不到指定类时发生的异常(ClassNotFoundException) java 找不到指定类时发生的异常(ClassNotFoundException)
NULL 博文链接:https://sw1982.iteye.com/blog/607325
JDBC数据库操作乱码非主流解决方案---JDBC连接驱动代理 以驱动的方式提供给使用方,在底层实现连接的代理管理功能,向使用者隐藏 实现过程以及无缝的过渡 你需要了解下列参数: proxy.driver= (必须)实际要连接...
这个是我调用百度定位SDK做的一个小案例,但是在我电脑上能够运行,在其他人的电脑上就会报错,出现ClassNotFoundException异常。
NULL 博文链接:https://redarmychen.iteye.com/blog/463864
NULL 博文链接:https://chimpp55.iteye.com/blog/2344330
Caused by: java.sql.SQLException: java.lang.ClassNotFoundException: org.apache.hive.jdbc.HiveDriver at com.trs.gateway.commons.hive.HiveFeature.getConnection(HiveFeature.java:57) at ...