[英]Netezza connection with Spark / Scala JDBC
我已经在IntelliJ IDE上使用Scala 2.11.8在Windows计算机上设置了Spark 2.2.0。 我正在尝试使用JDBC驱动程序使Spark连接到Netezza。
我已经阅读了此链接,并通过Maven将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的交互式外壳一起使用,请如下所示启动它:
$ SPARK_HOME / bin / spark-shell –打包com.ibm.SparkTC:spark-netezza_2.10:0.1.1 –driver-class-path〜/ nzjdbc.jar
我不相信我在脚本中调用了除jdbc
之外的任何软件包。 是否需要将其添加到脚本中?
谢谢!
我认为您的第一个想法是正确的。 如果您还没有安装Netezza JDBC驱动程序,则几乎可以肯定。
通过您发布的链接:
该软件包可以作为应用程序的一部分或从Spark工具(如spark-shell,spark-sql)进行部署。 要在应用程序中使用包,您必须在应用程序的构建依赖项中指定它。 从Spark工具使用时,请使用–packages命令行选项添加软件包。 Netezza JDBC驱动程序也应添加到应用程序依赖项中 。
您必须自己下载Netezza驱动程序,并且需要支持权利才能访问它(通过IBM的Fix Central或Passport Advantage)。 它包含在Windows驱动程序/客户端支持软件包或linux驱动程序软件包中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.