无法从 spark 连接到 redshift

Unable to connect to redshift from spark

我正在尝试使用 scala 2.10 从 redshift 读取数据到 spark 1.5

我已经构建了 spark-redshift 包并将 amazon JDBC 连接器添加到项目中,但我一直收到此错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentials

我已通过以下方式进行身份验证:

val hadoopConf = sc.hadoopConfiguration
hadoopConf.set("fs.s3n.impl","org.apache.hadoop.fs.s3native.NativeS3FileSystem")
hadoopConf.set("fs.s3n.awsAccessKeyId", "ACCESSKEY")
hadoopConf.set("fs.s3n.awsSecretAccessKey","SECRETACCESSKEY")

val df: DataFrame = sqlContext.read.format("com.databricks.spark.redshift")
.option("url","jdbc:redshift://AWS_SERVER:5439/warehouseuser=USER&password=PWD")
.option("dbtable", "fact_time")
.option("tempdir", "s3n://bucket/path")
.load()

df.show()

关于你的第一个错误java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentials我重复我在评论中所说的话: 您忘记将 AWS 依赖项 jar 运送到您的 spark 应用程序 jar

关于第二个错误,我不确定该包,但它更有可能是您需要的 org.apache.httpcomponents 库。 (不知道你是用来干什么的!)

您可以将以下内容添加到您的 Maven 依赖项中:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.3</version>
</dependency>

你需要组装整个。

PS: 如果库没有安装,您总是需要提供它们。您还必须注意提交的 jar 的大小,因为它会影响性能。