Как получить данные из сеанса EMR Spark? - PullRequest
0 голосов
/ 09 июля 2019

Я занимаюсь проектированием некоторых конвейеров данных ETL с помощью Airflow.Преобразование данных выполняется путем предоставления кластера AWS EMR Spark и отправки ему некоторых заданий.Задания читают данные из S3, обрабатывают их и записывают обратно в S3, используя дату в качестве раздела.

В качестве последнего шага мне нужно загрузить данные S3 в хранилище данных, используя сценарии SQL, которые передаются в Redshift.используя скрипт Python, однако я не могу найти чистый способ получить, какие данные должны быть загружены, т.е.какие разделы даты были сгенерированы во время преобразований Spark (может быть известно только во время выполнения задания и не заранее).

Обратите внимание, что все организовано с помощью скрипта Python с использованием библиотеки boto3, которая запускается с корпоративной виртуальной машинык нему нельзя получить доступ извне.

Каков наилучший способ получить эту информацию из EMR?

На данный момент я думаю о различных решениях: - Запишите информацию в файл журнала.,Получить данные из главного узла Spark, используя SSH через скрипт Python - Записать информацию в файл S3 - Записать информацию в базу данных (RDS?)

Я пытаюсь определить плюсы и минусыиз этих решений.Мне также интересно, что было бы лучшим способом сообщить, что преобразования данных завершены и что метаданные можно получить.

Заранее спасибо

1 Ответ

0 голосов
/ 09 июля 2019

Самое простое - использовать S3 в качестве временного хранилища.После завершения выполнения Spark (запись результата в S3) вы можете добавить еще один шаг записи данных в корзину S3, которую вы хотите получить на следующем шаге.

Подход с RDS должен быть аналогичен S3, ноэто требует больше реализаций, чем S3.Вам нужно настроить RDS, сохранить схему, реализацию для работы с RDS ...

С файлом S3 tmp, после завершения EMR и запуска AF на следующем шаге, используя Boto для получения этого файла TMP (путь S3 зависит от вашеготребование) и это все.

...