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

issue while connecting spark to redshift using spark -redshift connector

我需要将 spark 连接到我的 redshift 实例以生成数据。 我将 spark 1.6 与 scala 2.10 一起使用。 使用了兼容的 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 .我也设置了 accesskey 和 secret access key.

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

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

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

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

  4. 运行 复制语句