如何从AWS Glue(PySpark)连接到Redshift?

时间:2019-10-07 11:20:09

标签: amazon-web-services amazon-redshift aws-glue

我正在尝试连接到Redshift并从Glue DevEndpoint运行简单查询(这是必需的),但似乎无法连接。

以下代码超时:

df = spark.read \
  .format('jdbc') \
  .option("url", "jdbc:redshift://my-redshift-cluster.c512345.us-east-2.redshift.amazonaws.com:5439/dev?user=myuser&password=mypass") \
  .option("query", "select distinct(tablename) from pg_table_def where schemaname = 'public'; ") \
  .option("tempdir", "s3n://test") \
  .option("aws_iam_role", "arn:aws:iam::147912345678:role/my-glue-redshift-role") \
  .load()

可能是什么原因?

我检查了URL,用户,密码,还尝试了不同的IAM角色,但是每次都挂起。.

也尝试不使用IAM角色(仅具有URL,用户/密码,架构/表已存在)并且还挂起/超时:

jdbcDF = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:redshift://my-redshift-cluster.c512345.us-east-2.redshift.amazonaws.com:5439/dev") \
    .option("dbtable", "public.test") \
    .option("user", "myuser") \
    .option("password", "mypass") \
    .load()

从S3或从Glue表(目录)读取数据(直接在Glue SSH终端中)似乎很好,所以我知道Spark和Dataframes很好,只是与RedShift的连接有些连接,但不确定是什么?

2 个答案:

答案 0 :(得分:0)

Create Glue Job

在创建胶粘作业时选择最后一个选项。然后在下一个屏幕中,它会要求选择Glue connection

答案 1 :(得分:0)

您似乎在正确的道路上。我以相同的方式从Glue PySpark作业连接并查询Redshift,除了使用上的微小变化

.format("com.databricks.spark.redshift") 

我也成功使用了

.option("forward_spark_s3_credentials", "true")

代替

.option("iam_role", "my_iam_role")