簡體   English   中英

Netezza與Spark / Scala JDBC的連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM