Netezza与Spark/Scala JDBC的连接
我已经在Windows机器上使用IntelliJ IDE上的Scala 2.11.8设置了Spark 2.2.0。我正在尝试使用JDBC驱动程序使Spark连接到Netezza 我已经通读并通过Maven将Netezza与Spark/Scala JDBC的连接,scala,apache-spark,jdbc,netezza,Scala,Apache Spark,Jdbc,Netezza,我已经在Windows机器上使用IntelliJ IDE上的Scala 2.11.8设置了Spark 2.2.0。我正在尝试使用JDBC驱动程序使Spark连接到Netezza 我已经通读并通过Maven将com.ibm.spark.netezzajar添加到我的项目中。我尝试运行下面的Scala脚本来测试连接: package jdbc object SimpleScalaSpark { def main(args: Array[String]) { import org.apac
com.ibm.spark.netezza
jar添加到我的项目中。我尝试运行下面的Scala脚本来测试连接:
package jdbc
object SimpleScalaSpark {
def main(args: Array[String]) {
import org.apache.spark.sql.{SparkSession, SQLContext}
import com.ibm.spark.netezza
val spark = SparkSession.builder
.master("local")
.appName("SimpleScalaSpark")
.getOrCreate()
val sqlContext = SparkSession.builder()
.appName("SimpleScalaSpark")
.master("local")
.getOrCreate()
val nzoptions = Map("url" -> "jdbc:netezza://SERVER:5480/DATABASE",
"user" -> "USER",
"password" -> "PASSWORD",
"dbtable" -> "ADMIN.TABLENAME")
val df = sqlContext.read.format("com.ibm.spark.netezza").options(nzoptions).load()
}
}
但是,我得到以下错误:
17/07/27 16:28:17 ERROR NetezzaJdbcUtils$: Couldn't find class org.netezza.Driver
java.lang.ClassNotFoundException: org.netezza.Driver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.spark.sql.execution.datasources.jdbc.DriverRegistry$.register(DriverRegistry.scala:38)
at com.ibm.spark.netezza.NetezzaJdbcUtils$$anonfun$getConnector$1.apply(NetezzaJdbcUtils.scala:49)
at com.ibm.spark.netezza.NetezzaJdbcUtils$$anonfun$getConnector$1.apply(NetezzaJdbcUtils.scala:46)
at com.ibm.spark.netezza.DefaultSource.createRelation(DefaultSource.scala:50)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:306)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:146)
at jdbc.SimpleScalaSpark$.main(SimpleScalaSpark.scala:20)
at jdbc.SimpleScalaSpark.main(SimpleScalaSpark.scala)
Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:netezza://SERVER:5480/DATABASE
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:208)
at com.ibm.spark.netezza.NetezzaJdbcUtils$$anonfun$getConnector$1.apply(NetezzaJdbcUtils.scala:54)
at com.ibm.spark.netezza.NetezzaJdbcUtils$$anonfun$getConnector$1.apply(NetezzaJdbcUtils.scala:46)
at com.ibm.spark.netezza.DefaultSource.createRelation(DefaultSource.scala:50)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:306)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:146)
at jdbc.SimpleScalaSpark$.main(SimpleScalaSpark.scala:20)
at jdbc.SimpleScalaSpark.main(SimpleScalaSpark.scala)
我有两个想法:
1) 我不相信我真的安装了任何Netezza JDBC驱动程序,尽管我认为从上面的链接带到我的项目中的JAR已经足够了。我只是缺少一个驱动程序,还是Scala脚本中缺少了什么
2) 在同一链接中,作者提到启动Netezza Spark软件包:
例如,将Spark Netezza软件包与Spark的interactive
shell,按如下所示启动它:
$SPARK_HOME/bin/SPARK shell–套装
SparkTC:spark-netezza_2.10:0.1.1
–驱动程序类路径~/nzjdbc.jar
我不相信我在脚本中调用的是除jdbc
之外的任何包。我必须把它添加到我的脚本中吗
谢谢 我认为你的第一个想法是对的。如果尚未安装Netezza JDBC驱动程序,则几乎肯定需要安装该驱动程序 从您发布的链接: 此包可以作为应用程序的一部分部署,也可以从 Spark工具,如Spark shell、Spark sql。要在中使用包,请执行以下操作: 应用程序,您必须在应用程序的构建中指定它 附属国。使用Spark tools时,请使用 –包命令行选项。Netezza JDBC驱动程序也应该是 添加到应用程序依赖项
Netezza驱动程序是您必须自己下载的,您需要获得支持权限才能访问它(通过IBM的Fix Central或Passport Advantage)。它包含在Windows驱动程序/客户端支持包或linux驱动程序包中。我认为您的第一个想法是正确的。如果尚未安装Netezza JDBC驱动程序,则几乎肯定需要安装该驱动程序 从您发布的链接: 此包可以作为应用程序的一部分部署,也可以从 Spark工具,如Spark shell、Spark sql。要在中使用包,请执行以下操作: 应用程序,您必须在应用程序的构建中指定它 附属国。使用Spark tools时,请使用 –包命令行选项。Netezza JDBC驱动程序也应该是 添加到应用程序依赖项
Netezza驱动程序是您必须自己下载的,您需要获得支持权限才能访问它(通过IBM的Fix Central或Passport Advantage)。它包含在Windows驱动程序/客户端支持包或linux驱动程序包中。什么是spark submit命令?请注意,它需要
--jars
和--driver class path
来加载您的JDBC驱动程序。@Philantrover我相信我在运行Scala脚本时设置了IntelliJ来启动Spark,但不确定Spark submit命令默认以什么开始。不管怎样,你是说我的spark submit命令应该更新为包含上面(2)中的--packages和--driver类路径吗?在执行脚本之前,我也尝试过在命令行中运行它,但不幸的是,仍然出现了相同的错误:spark shell——packages com.ibm.SparkTC:spark-netezza_2.10:0.1.1——驱动程序类path/path/to/nzjdbc.jar您的spark提交命令是什么?请注意,它需要--jars
和--driver class path
来加载您的JDBC驱动程序。@Philantrover我相信我在运行Scala脚本时设置了IntelliJ来启动Spark,但不确定Spark submit命令默认以什么开始。不管怎样,你是说我的spark submit命令应该更新为包含上面(2)中的--packages和--driver类路径吗?在执行脚本之前,我也尝试过在命令行中运行它,但不幸的是,仍然出现了同样的错误:spark shell——packages com.ibm.SparkTC:spark-netezza_2.10:0.1.1——驱动程序类path/path/to/nzjdbc.jar。一旦我安装了正确的netezza JDBC驱动程序,我就简单地将IntelliJ指向了项目结构依赖项中的nzjdbc.jar文件,它工作起来很有魅力。谢谢确认,一旦我安装了正确的Netezza JDBC驱动程序,我就简单地将IntelliJ指向项目结构依赖项中的nzjdbc.jar文件,它工作得很好。谢谢