Serverless data lake on AWS
Art of DWH, @bryzgaloffМикро-батч процессинг
Процессят с помощью AWS Lambda, разбивая данные по партициям. То есть не каждую отдельную запись, но и не всю поставку, а с детализацией до партиции. Партицирование обычно привязано к дате поставке данных.
Постановка задач реализована через AWS SQS. Очередь триггерит Lambda на выполнение.
Оркестрация
Workflow событийно-ориентированный и реализован на AWS SNS + Lambda + Step Functions. Одного только Step Functions не достаточно: State Machines получаются слишком разветвленными и недостаточно гибкими в управлении и поддержке. Собственная связка с SNS также решает некоторые коммуникационные сложности внутри команды.
AWS Redshift
Использовать Redshift Spectrum просто для обеспечения SQL-интерфейса к S3, не используя сам Redshift как базу, не стоит: слишком дорого. Но с перспективой построить полноценный DWH Spectrum может быть лучше, чем AWS Athena. Кроме того, Redshift поддерживает рекурсивные запросы, а Athena — нет.
Еще один рассмотренный сценарий: использовать Spectrum для поставки данных из AWS S3 в Redshift.
Прим. автора. Я рассматриваю Spectrum как инструмент для доступа к «холодным» данным, которые хранятся в S3. «Теплые» данные при этом хранятся в самом Redshift.
AWS Glue Crawler
В компании докладчика Crawler используется разово при поставке данных, чтобы выявить схему данных и наполнить Data Catalog. Затем его рекомендуется периодически перезапускать для верификации схемы.
Особенности работы инструмента:
- Минимальное оплачиваемое время — 10 минут. Если данных мало — это невыгодно.
- Однако можно натравить Crawler на целый бакет, и это может быть выгодно даже для небольшого объема.
- Важно не держать в одной папке данные с разной схемой, иначе схема будет распознана как unknown.
- Crawler понимает паттерны именования, заложенный в Key (пути) файла. То есть можно в ключ объекта вкладывать партиционирование, и Crawler это поймет.
- Умеет работать с большим разнообразием форматов, включая JSON и Parquet.
AWS Glue ETL Jobs
Используются для процессинга между слоями.
Особенности инструмента:
- Умеет в Spark 2.2 с Python, но только версии 2.7, и Scala.
- Умеет в shell-скрипты на Python (в том числе версии ≥3).
- В beta доступен Spark 2.4.
Именование слоев
Особенно полезным считаю то, что докладчик поделился своей версией названия слоев: landing → trusty → enriched → data product. Landing — мой фаворит :)