Netezza соединение с JDBC Spark / Scala

Я установил Spark 2.2.0 на моем компьютере с Windows, используя Scala 2.11.8 в IntelliJ IDE. Я пытаюсь подключить Spark к Netezza с помощью драйверов JDBC.

Я прочитал эту ссылку и добавил com.ibm.spark.netezzaФляги к моему проекту через Maven. Я пытаюсь запустить скрипт 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, хотя я думал, что банок, которые я привел в свой проект по ссылке выше, было достаточно. Я просто скучаю по драйверу или мне что-то не хватает в моем скрипте Scala?

2) В той же ссылке автор упоминает о запуске пакета Netezza Spark:

Например, чтобы использовать пакет Spark Netezza с интерактивной оболочкой Spark, запустите его, как показано ниже:

$ SPARK_HOME / bin / spark-shell –packages com.ibm.SparkTC: spark-netezza_2.10: 0.1.1 –driver-class-path ~ / nzjdbc.jar

Я не верю, что я использую любой пакет, кроме jdbc в моем сценарии. Должен ли я добавить это к моему сценарию?

Спасибо!

1 ответ

Решение

Ваша первая идея верна, я думаю. Вам почти наверняка нужно установить драйвер Netezza JDBC, если вы этого еще не сделали.

По ссылке вы разместили:

Этот пакет может быть развернут как часть прикладной программы или из инструментов Spark, таких как spark-shell, spark-sql. Чтобы использовать пакет в приложении, вы должны указать его в зависимости от сборки вашего приложения. При использовании из инструментов Spark добавьте пакет с помощью параметра командной строки –packages. Драйвер JDBC Netezza также должен быть добавлен в зависимости приложения.

Драйвер Netezza - это то, что вы должны загрузить самостоятельно, и вам необходимо право поддержки, чтобы получить к нему доступ (через IBM Fix Central или Passport Advantage). Он включен либо в пакет поддержки драйверов / клиентов Windows, либо в пакет драйверов linux.

Другие вопросы по тегам