Как вернуть выходные данные заданий AWS Glue обратно в рабочий процесс вызывающей пошаговой функции? - PullRequest
0 голосов
/ 03 октября 2019

Функции шага AWS позволяют вызывать задания AWS Glue, как описано здесь: https://docs.aws.amazon.com/step-functions/latest/dg/connect-glue.html

Я хочу запустить задание и (после сохранения результатов в S3) вернуть некоторые метаданные, созданные во время задания (например, строку). количество или число отфильтрованных строк) назад к потоку функции Step.

Мы можем передавать параметры из функций Step в задание Glue следующим образом:

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

Но как вернуть задание Glueвернуть обратно в рабочий процесс Step Function? Я попытался просто вернуть String из функции main () в задании (Scala) Glue, но он не отображается в JSON, возвращенном в поток пошаговой функции:

{
      "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
    }

Я не могу найти документациюна этом, так что, возможно, это просто невозможно. Однако возврат значений из Lambdas работает просто отлично и обычно отображается в рабочем процессе функции Step.

Ответы [ 2 ]

1 голос
/ 03 октября 2019

На этой стадии вы ничего не можете вернуть из работы с клеем. Ожидается, что по определению AWS glue будет работать с огромным количеством данных, и, следовательно, ожидается, что на выходе также будет огромное количество данных.

Вы можете записать результат в DynamodB или S3 или любое другое хранилище и получить к нему доступ с помощью лямбды на следующем шаге в функциях шага AWS

0 голосов
/ 03 октября 2019

AWS Glue - это полностью управляемый сервис извлечения, преобразования и загрузки (ETL), являющийся лишь оболочкой над Spark. Когда вы выполняете задачу в Glue ETL, она на самом деле отправляет искровое задание и выполняет ваш код. В общем, spark должен загружать данные из поддерживаемых hadoop файловых систем, таких как HDFS / S3 (hadoop рассматривает s3 как файловую систему), применяет преобразование и записывает обработанные данные обратно на диск (который является выходом программы spark).

Если вы действительно хотите вернуть какое-то значение из вашей программы spark, вы можете создать прослушиватель для какого-либо порта и опубликовать данные, которые вы хотите вернуть, в ответ на этот порт. Однако, учитывая ограниченную среду клея, выполнение любой такой работы было бы утомительной работой.

...