使用spark -redshift连接器将spark连接到redshift时出现问题

时间:2019-06-06 16:02:40

标签: pyspark amazon-redshift spark-redshift

我需要将spark连接到我的redshift实例以生成数据。 我正在使用带有scala 2.10的spark 1.6。 使用了兼容的jdbc连接器和spark-redshift连接器。 但是我面临一个奇怪的问题: 我正在使用pyspark

df=sqlContext.read\
    .format("com.databricks.spark.redshift")\
    .option("query","select top 10 * from fact_table")\
    .option("url","jdbc:redshift://redshift_host:5439/events?user=usernmae&password=pass")\
    .option("tempdir","s3a://redshift-archive/").load()

当我执行df.show()时,它给我我的存储桶被拒绝权限的错误。 这很奇怪,因为我可以在存储桶中看到正在创建的文件,但是可以读取它们。

PS。我还设置了访问密钥和秘密访问密钥。

PS。我也对s3a和s3n文件系统感到困惑。 使用的连接器: https://github.com/databricks/spark-redshift/tree/branch-1.x

1 个答案:

答案 0 :(得分:0)

似乎未为Redshift设置访问S3文件的权限。请按照以下步骤

  1. 向该存储桶添加一个存储桶策略,该策略允许Redshift帐户
  2. 访问权限在Redshift帐户中创建Redshift可以创建的IAM角色

  3. 假定授予访问新的S3存储桶的权限 创建的角色将角色与Redshift集群相关联

  4. 运行COPY语句