无法从火花连接到红移

Posted

技术标签:

【中文标题】无法从火花连接到红移【英文标题】:Unable to connect to redshift from spark 【发布时间】:2015-10-03 19:47:33 【问题描述】:

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

我已经构建了 spark-redshift 包并将亚马逊 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()

【问题讨论】:

您忘记在您的 spark 应用程序中发送您的 AWS 依赖项 jar 谢谢,我添加了以下依赖项:aws-java-sdk-core-1.10.22、aws-java-sdk-s3-1.10.22、aws-java-sdk-sts-1.10 .22.现在我收到这个错误:java.lang.NoClassDefFoundError: org/apache/http/protocol/HttpContext 【参考方案1】:

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

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

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

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

你需要组装整个。

PS:您始终需要在未安装库时提供它们。您还必须注意您提交的 jar 的大小,因为它会损害性能。

【讨论】:

谢谢,我确实添加了 httpclient-4.5.1 和 httpcore-4.4.3。现在我收到此错误:无法初始化类 com.amazonaws.services.s3.internal.ServiceUtils。我确实读过 spark-redshift 库是一个依赖噩梦 是的。确实!但我不是红移专家。只要它保持在火花范围内,我就可以提供帮助。否则,您需要为此提出新问题,抱歉!

以上是关于无法从火花连接到红移的主要内容,如果未能解决你的问题,请参考以下文章

红移连接的粘合作业:“无法找到合适的安全组”

从 R 连接到亚马逊红移时出错 - Windows 10

火花红移。将数组展平为字符串

Spark Redshift:使用火花读取红移表时出错

无法从 sparksql 连接配置单元元存储 [重复]

亚马逊红移,sqlworkbench/j