1

我需要将 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 .我也设置了访问密钥和秘密访问密钥。

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

4

1 回答 1

2

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

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

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

  4. 运行 COPY 语句
于 2019-06-19T04:03:58.933 回答