【问题标题】:Extract Embedded AWS Glue Connection Credentials Using Scala使用 Scala 提取嵌入式 AWS Glue 连接凭证
【发布时间】:2020-08-12 22:46:17
【问题描述】:

我有一个直接从 redshift 读取数据的胶水作业,为此,必须提供连接凭据。我已经创建了一个嵌入式粘合连接,并且可以使用以下 pyspark 代码提取凭据。有没有办法在 Scala 中做到这一点?

glue = boto3.client('glue', region_name='us-east-1')
    
response = glue.get_connection(
    Name='name-of-embedded-connection',
    HidePassword=False 
)
    
table = spark.read.format(
    'com.databricks.spark.redshift'
).option(
    'url',
    'jdbc:redshift://prod.us-east-1.redshift.amazonaws.com:5439/db'
).option(
    'user',
    response['Connection']['ConnectionProperties']['USERNAME']
).option(
    'password',
    response['Connection']['ConnectionProperties']['PASSWORD']
).option(
    'dbtable',
    'db.table'
).option(
    'tempdir',
    's3://config/glue/temp/redshift/'
).option(
    'forward_spark_s3_credentials', 'true'
).load()

【问题讨论】:

    标签: scala pyspark amazon-redshift aws-glue aws-java-sdk


    【解决方案1】:

    AWS 没有等效的 scala 来发出此 API 调用。但是您可以在 scala 中使用 Java SDK 代码,如 answer 中所述。

    This 是对getConnection 的 Java SDK 调用,如果您不想这样做,可以按照以下方法:

    1. 创建 AWS Glue python shell 作业并检索连接信息。

    2. 一旦你有了这些值,然后调用另一个 scala Glue 作业,并在你的 python shell 作业中使用这些作为参数,如下所示:

    glue = boto3.client('glue', region_name='us-east-1')

    response = glue.get_connection(
        Name='name-of-embedded-connection',
        HidePassword=False 
    )
    
    response = client.start_job_run(
                   JobName = 'my_scala_Job',
                   Arguments = {
                     '--username': response['Connection']['ConnectionProperties']['USERNAME'],
                     '--password': response['Connection']['ConnectionProperties']['PASSWORD'] } )
    
    1. 然后使用 getResolvedOptions 在 scala 作业中访问这些参数,如下所示:

    导入 com.amazonaws.services.glue.util.GlueArgParser

    val args = GlueArgParser.getResolvedOptions(
      sysArgs, Array(
        "username",
        "password")
    )
    val user = args("username")
    val pwd  = args("password")
    

    【讨论】:

    • 感谢您的及时回复。抱歉,我没有使用 Java 的经验。您将如何运行 Java SDK getConnection 调用?
    • 即使我不知道该怎么做,所以我给了你另一种方法。
    • 啊好的,我很感激。
    • 我能够编造一些东西,但我仍然无法以正确的格式得到它com.amazonaws.services.glue.model.GetConnectionRequest。我创建了一个单独的票 here
    猜你喜欢
    • 1970-01-01
    • 2019-09-15
    • 2019-04-17
    • 2019-05-27
    • 2021-11-26
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多