Я работаю над проблемой, когда мы собираемся выполнить несколько преобразований данных с помощью EMR (SparkSQL).

Изучив документацию по AWS Data Pipelines и AWS Step Functions, я немного не понимаю, какой вариант использования каждый пытается решить. Я осмотрелся, но не нашел авторитетного сравнения между ними. Есть несколько ресурсов, которые показывают, как я могу использовать их для планирования и запуска заданий Spark в кластере EMR.

  1. Что мне следует использовать для планирования и организации моих заданий EMR по обработке?

  2. В более общем плане, в какой ситуации один будет лучшим выбором по сравнению с другим с точки зрения ETL / обработки данных?

25
archilius 8 Мар 2019 в 13:50

1 ответ

Лучший ответ

Да, есть много способов добиться того же, и разница в деталях и в вашем варианте использования. Я даже собираюсь предложить еще одну альтернативу :)

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

Если у вас разные источники данных или вы хотите обрабатывать более сложные сценарии, то подойдут как AWS Data Pipeline, так и AWS Step Functions. AWS Step Functions - это общий способ реализации рабочих процессов, а Data Pipelines - это специализированный рабочий процесс для работы с данными.

Это означает, что Data Pipeline будет лучше интегрирован, когда дело дойдет до источников и выходных данных, а также для работы напрямую с такими инструментами, как S3, EMR, DynamoDB, Redshift или RDS. Таким образом, для решения проблемы чистого конвейера данных лучше всего подходит AWS Data Pipeline.

При этом AWS Data Pipeline не очень гибкий. Если источник данных, который вам нужен, не поддерживается или вы хотите выполнить некоторую деятельность, которая не интегрирована, то вам нужно обойтись без сценариев оболочки.

С другой стороны, AWS Step Functions не являются специализированными и имеют хорошую интеграцию с некоторыми сервисами AWS и с AWS Lambda, что означает, что вы можете легко интегрироваться с чем угодно через бессерверный API.

Так что это действительно зависит от того, чего вам нужно достичь, и от типа вашей рабочей нагрузки.

32
Javier Ramirez 8 Мар 2019 в 11:37