如何将 AWS Glue 作业的 return 输出返回到调用 Step Function 工作流程?

How to return output from AWS Glue jobs back to the calling Step Function workflow?

AWS Step Functions 允许调用 AWS Glue 作业,如下所述: https://docs.aws.amazon.com/step-functions/latest/dg/connect-glue.html

我想 运行 作业和(将结果保存到 S3 后)return 作业期间产生的一些元数据(如行数或筛选行数)返回到 Step 函数流.

我们可以像这样将参数从 Step 函数传递到 Glue 作业:

              "RunGlueJob": {
                "Type": "Task",
                "Resource": "arn:aws:states:::glue:startJobRun.sync",
                "Parameters": {
                  "JobName": "MyJobName",
                  "Arguments": {
                    "--param1.$": "$.param1",
                    "--param2.$": "$.param2"
                  }
                },
                "Next": "NextState"
              },

但是 Glue 作业 return 如何输出回 Step Function 工作流程?我只是尝试从 (Scala) Glue 作业中的 main() 函数 returning 一个字符串,但它没有出现在 JSON returned 到步骤函数流中:

{
      "AllocatedCapacity": 3,
      "Arguments": {
        "--param1.$": "$.param1",
        "--param2.$": "$.param2"
      },
      "Attempt": 0,
      "CompletedOn": 1570114802442,
      "ExecutionTime": 39,
      "GlueVersion": "0.9",
      "Id": "jr_some_id",
      "JobName": "MyJobName",
      "JobRunState": "SUCCEEDED",
      "LastModifiedOn": 1570114802442,
      "LogGroupName": "/aws-glue/jobs",
      "MaxCapacity": 3,
      "PredecessorRuns": [],
      "StartedOn": 1570114746138,
      "Timeout": 2880
    }

我找不到任何关于此的文档,所以这可能根本不可能。但是,return来自 Lambdas 的值工作得很好并且在 Step 函数工作流中正常显示。

在这个阶段你不能return任何来自粘合工作的东西。根据定义,AWS glue 预计将处理大量数据,因此预计输出也将是大量数据。

您可以将结果写入 dynamodb 或 s3 或任何其他存储,并在 AWS 步骤函数的下一步中使用 lambda 访问它

AWS Glue 是一种完全托管的提取、转换和加载 (ETL) 服务,只不过是 Spark 之上的包装器。当您在 Glue ETL 中执行任务时,它实际上会提交一个 spark 作业并执行您的代码。通常,spark 应该从 hadoop 支持的文件系统加载数据,如 HDFS/S3(hadoop 将 s3 视为文件系统),应用转换并将处理后的数据写回磁盘(这是 spark 程序的输出) .

如果您真的想 return 从您的 spark 程序中获取一些值,您可以在某个端口上创建一个侦听器并发布您想要 return 的数据作为对该端口的响应。然而,考虑到胶水的受限环境,实施任何此类工作都将是一项乏味的工作。