SparkSQL Driver ClassNotFoundException的解决方案
来源:互联网 发布:古代神话 知乎 编辑:程序博客网 时间:2024/06/05 11:29
在使用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/下就可以了
- SparkSQL Driver ClassNotFoundException的解决方案
- 关于java.lang.ClassNotFoundException: com.mysql.jdbc.Driver的解决方案
- SparkSQL read Elasticsearch ClassNotFoundException
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver解决方案
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver完美解决方案
- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法
- java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver的解决方法
- 关于java.lang.ClassNotFoundException: com.mysql.jdbc.Driver的解决办法
- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver异常的解决办法
- 关于eclipse中ClassNotFoundException:com.mysql.jdbc.Driver的解决办法
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 的解决办法
- ClassNotFoundException:com.jdbc.mysql.Driver
- ClassNotFoundException: com.mysql.jdbc.Driver
- android ClassNotFoundException 解决方案
- ClassNotFoundException解决方案总结
- Mybatis与spring项目中遇到的奇怪的问题:ClassNotFoundException: com.mysql.jdbc.Driver
- JavaEE项目JDBC连接MySql数据库提示ClassNotFoundException的解决方案
- 关于Tomcat启动出现java.lang.ClassNotFoundException异常的解决方案
- 使用Maven为代码构建依赖包
- Something learned from leetcode (2)
- SparkSQL中DataFrame registerTempTable源码浅析
- quartz中设置Job不并发执行
- SparkSQL操作sqlserver和postgresql示例
- SparkSQL Driver ClassNotFoundException的解决方案
- 记一次Spark集群查询速度变慢的问题调查
- CXF集成Spring
- Maven构建SpringMVC项目详解
- Spark1.6新特性简介及个人的理解
- 开启google人工智能学习Tensorflow之旅(一)
- 被修改的新闻
- zookeeper注册服务与netty的简单结合应用
- 常用git命令积累汇总