У нас есть следующее требование:
Ежегодные XML-файлы (размером от 15 до 20 ГБ) с 1990 по 2018 год.
Еженедельные файлы XML (размером от 3 до 6 ГБ), содержащие обновленные записи XML для любых годовых данных с 1990 по 2018 год.
Нам нужно запустить задание ETL, чтобы выполнить слияние еженедельных и годовых данных в S3 и предоставить интегрированные данные для последующих приложений локально в виде API.
Путь, по которому мы идем, - это AWS Glue для слияния ETL и потенциально Athena для предоставления результатов SQL-запросов для последующих приложений.
Я пытаюсь объединить ETL несколько XML (Insert / Update) в S3 с помощью AWS Glue и Pyspark - если быть точным, я делаю следующие шаги:
1) Создайте динамические фреймы данных из каталога Glue (из нескольких исходных данных XML) [всего 3 файла размером около 10 ГБ]
Для каждого года данных выполните 2) Преобразование динамического фрейма данных в фрейм данных Spark 3) Используйте методы Join (leftanti) и Union для объединения данных 4) Запишите файлы JSON (объединенные в один файл за год)
Задания выполняются в течение 2 часов и из журналов - что, на мой взгляд, слишком долго. Нам необходимо увеличить размер обрабатываемого файла примерно до 400+ ГБ, и я не уверен, правильно ли я его кодирую.
a)
Я замечаю, что следующее заявление появлялось почти в течение большей части двух часов.
18/02/24 22:46:56 INFO Client: отчет о приложении для application_1519512218639_0001 (состояние: РАБОТАЕТ)
18/02/24 22:46:56 DEBUG Client: токен клиента: н / д диагностика: н / д ApplicationMaster host: 172.31.58.135 ApplicationMaster RPC порт: 0 очередь: время начала по умолчанию: 1519512404681 конечный статус: UNDEFINED URL отслеживания: http://ip-172-31-62-4.ec2.internal:20888/proxy/application_1519512218639_0001/ пользователь: root
Означает ли это, что задание действительно выполняется и требует времени для обработки (или) ожидает ресурсов?
б) В моем коде я также пробовал использовать .cache (), предполагая, что это выполнит логику в памяти. Но это не влияет на затраченное время.
c) Журналы показывают, что данные копируются на узлы hdfs и задачи выполняются. Насколько это отличается от выполнения аналогичного кода на EMR?
г) Есть ли другие предложения по улучшению работы?