【问题标题】:ExceptionInInitializer Error while Reading Data from teradata table using Spark使用 Spark 从 teradata 表读取数据时出现 ExceptionInInitializer 错误
【发布时间】:2018-04-24 06:55:12
【问题描述】:

我正在使用下面的代码从 teradata 读取数据但出现错误

val jdbcDF = spark.read
  .format("jdbc")
  .option("url",s"jdbc:teradata://${TeradataDBHost}/database=${TeradataDBDatabase}")
  .option("dbtable", TeradataDBDatabase+"."+TeradataDBTable)
  .option("driver","com.teradata.jdbc.TeraDriver")
  .option("user", TeradataDBUsername)
  .option("password", TeradataDBPassword)
  .load()

错误堆栈跟踪

Exception in thread "main" java.lang.ExceptionInInitializerError
            at com.teradata.jdbc.jdbc.GenericTeraEncrypt.getGSSM(GenericTeraEncrypt.java:577)
            at com.teradata.jdbc.jdbc.GenericTeraEncrypt.<init>(GenericTeraEncrypt.java:116)
            at com.teradata.jdbc.jdbc.GenericTeradataConnection.<init>(GenericTeradataConnection.java:107)
            at com.teradata.jdbc.jdbc_4.TDSession.<init>(TDSession.java:186)
            at com.teradata.jdbc.jdk6.JDK6_SQL_Connection.<init>(JDK6_SQL_Connection.java:36)
            at com.teradata.jdbc.jdk6.JDK6ConnectionFactory.constructSQLConnection(JDK6ConnectionFactory.java:25)

Caused by: java.lang.NullPointerException
        at com.teradata.tdgss.jtdgss.TdgssConfigApi.GetMechanisms(Unknown Source)
        at com.teradata.tdgss.jtdgss.TdgssManager.<init>(Unknown Source)
        at com.teradata.tdgss.jtdgss.TdgssManager.<clinit>(Unknown Source)

【问题讨论】:

    标签: apache-spark jdbc apache-spark-sql spark-dataframe teradata


    【解决方案1】:

    来自Teradata JDBC driver documentation

    如果您收到以下例外情况之一:

    • com.teradata.tdgss.jtdgss.TdgssConfigApi.GetMechanisms 处出现 NullPointerException
    • IllegalArgumentException "InputStream cannot be null" at javax.xml.parsers.DocumentBuilder.parse, at com.teradata.tdgss.jtdgss.TdgssParseXml.parse

    那么问题可能是 由于未设置类路径或设置了类路径 错误,导致找不到 tdgssconfig.jar。

    所以我猜tdgssconfig.jar 在类路径中找不到。

    当然,如果 JDBC 驱动程序可以抛出比 NPE 更有用的错误消息,那就太好了。我有点担心这似乎是驱动程序的一个“已知问题”:我无法想象在这种情况下抛出一个更有帮助的异常需要付出很多努力。如果他们选择记录这种行为而不是修复它,这对他们来说并没有什么意义。

    (致谢:通过this Teradata Community post找到。)

    【讨论】:

      猜你喜欢
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多