在使用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解决办法.md
使用IDEA启动项目遇见ClassNotFoundException的解决方案 在使用IDEA启动项目时,可能会遇见ClassNotFoundException的错误,导致项目无法启动。本文将详细介绍使用IDEA启动项目遇见ClassNotFoundException的正确解决...
项目中碰到的,记录一下解决方案
本文将深入探讨 `ClassNotFoundException` 的原因、如何诊断问题以及多种解决方案,帮助开发者更好地理解和处理此类异常。 **原因分析:** `ClassNotFoundException` 的出现主要有以下几种情况: 1. **类路径配置...
"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`的问题,你需要确保你的项目正确包含了Apache Commons DBCP及其相关依赖,并正确配置了`BasicDataSource`。同时,了解...
### Java常见异常及其解决方案 #### 1. `java.lang.NullPointerException` **异常描述:** `NullPointerException`是最常见的运行时异常之一,通常发生在试图访问一个尚未初始化或者被设置为`null`的对象实例时。...
ClassNotFoundException如何解决.md
同时,我们也可以通过日志信息来诊断问题,以便快速地找到解决方案。 ClassNotFoundException 是一个常见的异常,但它可以通过简单的检查和解决来避免。在 Android 开发中,我们需要注意这些可能的错误,以便确保...
Java中的`ClassNotFoundException`异常通常表示在尝试加载特定类时,JVM无法找到对应的字节码文件。这个异常可能由多种原因引起,但在本场景中,它与Java 9引入的模块系统及其对Java EE API的影响密切相关。 在Java...
Java 异常解决方案 Java 异常是 Java 开发中经常遇到的问题,本文档将提供 Java 异常解决方案,涵盖 Hibernate、Tomcat、Java 基本、JSP、SSH 整合等多个方面的异常解决方案。 一、Hibernate 异常解决方案 * org....
在Java服务器页面(JSP)开发中,可能会遇到`ClassNotFoundException`异常,这通常是由于系统无法找到或加载指定的类导致的。...通过以上步骤,大多数JSP开发中的`ClassNotFoundException`问题都能得到解决。