【问题标题】:AWS Redshift driver in ZeppelinZeppelin 中的 AWS Redshift 驱动程序
【发布时间】:2016-08-13 05:44:20
【问题描述】:

我想使用笔记本 Zeppelin 在 Redshift 中探索我的数据。一个带有 Spark 的小型 EMR 集群在后面运行。我正在加载 databricks 的 spark-redshift 库

%dep
z.reset()
z.load("com.databricks:spark-redshift_2.10:0.6.0")

然后

import org.apache.spark.sql.DataFrame

val query = "..."

val url = "..."
val port=5439
val table = "..."
val database = "..."
val user = "..."
val password = "..."

val df: DataFrame = sqlContext.read
  .format("com.databricks.spark.redshift")
  .option("url", s"jdbc:redshift://${url}:$port/$database?user=$user&password=$password")
  .option("query",query)
  .option("tempdir", "s3n://.../tmp/data")
  .load()

df.show

但我得到了错误

java.lang.ClassNotFoundException: Could not load an Amazon Redshift JDBC driver; see the README for instructions on downloading and configuring the official Amazon driver

我添加了选项

option("jdbcdriver", "com.amazon.redshift.jdbc41.Driver")

但不是为了更好。我想我需要在某个地方指定 redshift 的 JDBC 驱动程序,就像我将 --driver-class-path 传递给 spark-shell 一样,但是如何用 zeppelin 做到这一点?

【问题讨论】:

  • 鉴于错误消息,您似乎需要进行一些额外的配置。您是否真的按照README 的指示进行操作?这不是一般的错误消息,而是由 redshift JDBC 驱动程序产生的;所以你已经安装了它,但它只是缺少一些配置(或其他库?)。

标签: jdbc apache-spark amazon-redshift apache-zeppelin


【解决方案1】:

您可以使用 Zeppelin 的 dependency-loading mechanism 或在 Spark 的情况下使用 %dep dynamic dependency loader 添加具有 JDBC 驱动程序等依赖项的外部 jar

当您的代码需要外部库时,您可以使用 %dep 解释器轻松完成以下工作,而不是下载/复制/重启 Zeppelin。

  • 从 Maven 存储库递归加载库
  • 从本地文件系统加载库
  • 添加额外的 Maven 存储库
  • 自动将库添加到 SparkCluster(您可以关闭)

后者看起来像:

%dep
// loads with all transitive dependencies from Maven repo
z.load("groupId:artifactId:version")

// or add artifact from filesystem
z.load("/path/to.jar")

按照惯例,必须在注释的第一段中。

【讨论】:

    猜你喜欢
    • 2018-08-23
    • 2021-09-10
    • 2016-08-18
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    相关资源
    最近更新 更多