как сделать данные высокодоступными при записи искровых заданий в S3 и при запросе athena - PullRequest
1 голос
/ 07 февраля 2020

Я храню поток данных, поступающих через пожарный шланг на S3, и создал таблицы в Афине, которые запрашивают эти данные. Данные в S3 разделены на основе таких полей, как clientID, date. Задание искры обрабатывает эти входящие данные, которые поступают с регулярным интервалом. При каждом запуске задание spark получает данные (дельта - для этого интервала), объединяет их с базовыми данными, уже имеющимися в этом разделе (к последнему измененному времени в случае наличия дублирующих записей) в S3, и перезаписывает раздел для сохранения. когда коммиттер S3A записывает эти файлы, он удаляет существующие файлы и копирует вновь созданные файлы. Возможно ли, что при запросе данных из таблиц athena он не возвращает никаких данных, поскольку старые файлы удаляются, а новые файлы еще не записаны полностью. Если да, как вы справляетесь с этим.

1 Ответ

1 голос
/ 07 февраля 2020

Да, если базовый объект S3 будет удален, запрос athena вернет ноль строк. Коммиттер S3A удалит объекты перед загрузкой, и поэтому всегда будет рисковать в течение некоторого периода времени, когда данные поддержки таблиц отсутствуют или неполны.

Чтобы запросы Athena были в высокой степени доступны для данных, которые обновляются, напишите запрашивать данные в пакетном режиме по версионному пути в S3 (например, s3://my-data/2020-02-07) с соответствующей частотой. Когда пакет завершен, отправьте ALTER TABLE SET LOCATION DDL в базу данных Athena, указав путь к новейшему версионному пути. Затем очистите старые пути (самая новая версия - n) в соответствии с политикой хранения.

...