2017-11-11 188 views
0

我使用下面的代码来读取Teradata的数据,但收到错误ExceptionInInitializer错误,同时从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) 

回答

0

Teradata JDBC driver documentation

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

  • NullPointerException异常在com.teradata.tdgss.jtdgss.TdgssConfigApi.GetMechanisms
  • 抛出:IllegalArgumentException “的InputStream不能为空” 在javax.xml.parsers.DocumentBuilder.parse,在com.teradata.tdgss.jtdgss.TdgssParseXml。解析

那么问题可能是 由于未设置,或类路径被设置 不当,使得tdgssconfig.jar不能找到类路径。

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

当然,如果JDBC驱动程序可能抛出比NPE更有帮助的错误消息,那将会很不错。我有点担心,这似乎是司机的一个“已知问题”:我无法想象,在这种情况下,抛出更有帮助的例外情况需要很多努力。对于他们来说,如果他们选择记录这种行为而不是解决这个问题,他们并没有多说。

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