Spark Redshift:使用火花读取红移表时出错
Posted
技术标签:
【中文标题】Spark Redshift:使用火花读取红移表时出错【英文标题】:Spark Redshift: error while reading redshift tables using spark 【发布时间】:2017-01-25 09:41:02 【问题描述】:我在使用 spark 从 redshift 表中读取数据时遇到错误。
下面是代码:
Dataset<Row> dfread = sql.read()
.format("com.databricks.spark.redshift")
.option("url", url)
//.option("query","select * from TESTSPARK")
.option("dbtable", "TESTSPARK")
.option("forward_spark_s3_credentials", true)
.option("tempdir","s3n://test/Redshift/temp/")
.option("sse", true)
.option("region", "us-east-1")
.load();
错误:
Exception in thread "main" java.sql.SQLException: [Amazon](500310) Invalid operation: Unable to upload manifest file - S3ServiceException:Access Denied,Status 403,Error AccessDenied,Rid=,CanRetry 1
详情:
error: Unable to upload manifest file - S3ServiceException:Access Denied,Status 403,Error AccessDenied,Rid 6FC2B3FD56DA0EAC,ExtRid I,CanRetry 1
code: 9012
context: s3://jd-us01-cis-machine-telematics-devl-data-
processed/Redshift/temp/f06bc4b2-494d-49b0-a100-2246818e22cf/manifest
query: 44179
有人可以帮忙吗?
【问题讨论】:
【参考方案1】:当 Redshift 尝试访问您告诉它加载的文件时,您会从 S3 收到权限错误。
在调用load()
之前,您是否为 S3 访问配置了访问密钥?
sc.hadoopConfiguration.set("fs.s3.awsAccessKeyId", "ASDFGHJKLQWERTYUIOP")
sc.hadoopConfiguration.set("fs.s3.awsSecretAccessKey", "QaZWSxEDC/rfgyuTGBYHY&UKEFGBTHNMYJ")
您应该能够通过查询 stl_query
表来检查 Redshift 端使用了哪个访问密钥 ID。
【讨论】:
【参考方案2】:来自错误“S3ServiceException:Access Denied”
似乎没有为 Redshift 设置访问 S3 文件的权限。请按照以下步骤操作
-
向该存储桶添加允许 Redshift 帐户的存储桶策略
访问在 Redshift 账户中创建一个 IAM 角色,redshift 可以
assume 将访问 S3 存储桶的权限授予新创建的角色
将角色与 Redshift 集群关联
运行 COPY 语句
【讨论】:
以上是关于Spark Redshift:使用火花读取红移表时出错的主要内容,如果未能解决你的问题,请参考以下文章