无法从火花连接到红移
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 库是一个依赖噩梦 是的。确实!但我不是红移专家。只要它保持在火花范围内,我就可以提供帮助。否则,您需要为此提出新问题,抱歉!以上是关于无法从火花连接到红移的主要内容,如果未能解决你的问题,请参考以下文章