Я разрабатываю некоторые конвейеры данных ETL с помощью Airflow. Преобразование данных выполняется путем подготовки кластера AWS EMR Spark и отправки некоторых заданий. Задания считывают данные из S3, обрабатывают их и записывают обратно в S3, используя дату в качестве раздела.
Для моего последнего шага мне нужно загрузить данные S3 в хранилище данных с помощью сценариев SQL, которые отправляются в Redshift с помощью сценария Python, однако я не могу найти чистый способ получить, какие данные необходимо загрузить, т.е. какие разделы даты были сгенерированы во время преобразований Spark (можно узнать только во время выполнения задания, а не заранее).
Обратите внимание, что все организовано с помощью скрипта Python с использованием библиотеки boto3, которая запускается с корпоративной виртуальной машины, к которой нет доступа извне.
Как лучше всего получить эту информацию из EMR?
Пока думаю о разных решениях: - Запишите информацию в файл журнала. Получите данные с главного узла Spark, используя SSH через скрипт Python. - Запишите информацию в файл S3 - Записать информацию в базу данных (RDS?)
Я изо всех сил пытаюсь определить, каковы плюсы и минусы этих решений. Мне также интересно, как лучше всего сообщить, что преобразование данных завершено и что метаданные могут быть извлечены.
заранее спасибо





Самый простой способ — использовать S3 в качестве временного хранилища. После завершения выполнения Spark (запись результата в S3) вы можете добавить еще один шаг записи данных в корзину S3, которые вы хотите получить на следующем шаге.
Подход с RDS должен быть похож на S3, но требует больше реализаций, чем S3. Вам нужно настроить RDS, поддерживать схему, реализовать работу с RDS...
С файлом tmp S3, после завершения EMR и выполнения следующего шага AF, используя Boto для извлечения этого файла tmp (путь S3 зависит от ваших требований), и все.