在使用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` 的出现主要有以下几种情况: 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 是一个常见的异常,但它可以通过简单的检查和解决来避免。在 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`问题都能得到解决。
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
通过以上步骤,一般能够解决“ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource”的问题。然而,开发过程中遇到的错误可能多种多样,因此,了解如何阅读和分析异常信息,以及如何调整和管理项目...
MySQL-JDBC连接数据库错误提示及解决方案 在使用Java连接MySQL数据库时,经常会遇到一些错误提示,以下是在JDBC连接MySQL数据库时常见的错误提示及解决方案: 一、 ClassNotFoundException: com.mysql.jdbc.Driver...
然而,在开发过程中,开发者经常遇到各种问题,其中一种常见的问题是`ClassNotFoundException`。这个异常通常表明Java虚拟机(JVM)在尝试加载一个类时无法找到对应的.class文件。 在标题中提到的"Eclipse plugin...
在`CheckException_01.java`源代码中,可能包含了处理或演示如何解决`ClassNotFoundException`的示例代码。`Java.jpg`可能是一个与Java编程相关的图像,可能用于解释类加载过程或类路径概念的可视化。为了更深入地...
总的来说,理解并解决"java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource"这一异常,不仅需要对Struts框架有一定了解,还需要掌握Java类加载机制以及数据库连接池的基本原理。通过正确...