从Apache Spark加载PrestoDB表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Apache Spark加载PrestoDB表相关的知识,希望对你有一定的参考价值。

我在将Presto数据库中的表/视图数据加载到Spark时遇到问题。

 val prestoDriver = "com.teradata.presto.jdbc42.Driver"

val df = spark.read.format("jdbc").option("url", prestoURL).option("LogLevel",6).option("driver", prestoDriver)
                  .option("user", "xx").option("SSLTrustStorePath", "/xxx.jks")
                  .option("AuthenticationType","LDAP Authentication").option("password", "").option("SSL",1).option("SSLTrustStorePwd", "xxx")
                  .option("dbtable", "<select query with where clause>")
                  .load()

在Presto控制台中,我能够看到相应的查询,但随后查询在1小时后超时并出现错误:

com.facebook.presto.spi.PrestoException: Query 20180227_080921_03220_n5vdh has not been accessed since 2018-02-27T08:57:11.162Z: currentTime 2018-02-27T09:02:11.645Z
    at com.facebook.presto.execution.SqlQueryManager.failAbandonedQueries(SqlQueryManager.java:584)
    at com.facebook.presto.execution.SqlQueryManager$1.run(SqlQueryManager.java:180)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

任何我的Spark任务都无限期地运行而没有任何进展。看起来Spark中使用的Presto Teradata驱动程序没有联系到Presto以在查询完成后获取结果。

任何人都能对此提供一些启示吗?

谢谢

答案

我可以确认你的语法(确切地)正在我的presto实例上工作(v0.195)。也许我们唯一的区别是我没有使用ldap presto插件,但创建了我自己的密码插件。

以上是关于从Apache Spark加载PrestoDB表的主要内容,如果未能解决你的问题,请参考以下文章

通过 Apache-Spark 从 AWS S3 加载数据

Prestodb (AWS EMR) 加载分区元数据

Apache Spark Dataframe - 从 CSV 文件的第 n 行加载数据

Apache Sqoop 和 Spark

尝试使用 apache spark 加载模块时出现 Databricks 错误 [重复]

Apache Spark DataFrame 是不是为每个处理从数据库加载数据,或者除非另有说明,否则它是不是使用相同的数据?