Технологии

Что такое Presto

Что такое Presto

Presto — это распределённый SQL-движок запросов с открытым исходным кодом, который позволяет анализировать большие объёмы данных в разных источниках без предварительного переноса в одно хранилище. Его используют, когда данные лежат в нескольких системах, а доступ к ним нужен через привычный SQL.

Presto часто применяют для работы с Hadoop, объектными хранилищами, реляционными базами данных и другими платформами. Главная идея проста: запрос приходит к движку, а сам движок обращается к нужным источникам через коннекторы и собирает результат.

Содержание статьи

Зачем нужен Presto

Presto нужен для быстрого SQL-анализа данных из разных систем без копирования этих данных в отдельное аналитическое хранилище. Это удобно там, где информация уже распределена между несколькими платформами.

Во многих командах данные хранятся не в одном месте. Часть находится в Hadoop, часть — в PostgreSQL или MySQL, часть — в Kafka, Cassandra или облачном хранилище. Если каждый раз переносить всё в единую систему, растут задержки, усложняется архитектура и появляется лишняя нагрузка на инфраструктуру.

Presto решает эту задачу иначе. Он отделяет слой запросов от слоя хранения и работает поверх существующих источников. За счёт этого аналитики, инженеры и BI-команды могут использовать один SQL-интерфейс для доступа к данным из разных сред.

Как Presto работает в общих чертах

Presto принимает SQL-запрос, разбивает его на части, распределяет выполнение между узлами кластера и возвращает результат клиенту. При этом данные остаются в исходных системах, а движок выполняет вычисления поверх них.

Архитектура Presto построена по распределённой модели. В ней есть узел-координатор, рабочие узлы и сервер управления ресурсами. Каждый компонент отвечает за свою часть обработки запроса.

Координатор

Координатор — это узел, который разбирает SQL-запрос, строит план выполнения и управляет работой остальных узлов. Он также собирает результат и отдаёт его клиенту.

Именно координатор получает запрос первым. Он определяет, какие источники данных нужны, как разбить задачу на стадии и какие рабочие узлы будут участвовать в обработке.

Рабочие узлы

Рабочие узлы выполняют основную вычислительную работу. Они обрабатывают фрагменты запроса, получают данные через коннекторы и передают промежуточные результаты дальше по плану выполнения.

Если запрос большой, нагрузка распределяется между несколькими узлами. Это и даёт масштабирование: вместо одного сервера работает группа машин.

Сервер управления ресурсами

Сервер управления ресурсами собирает сведения о координаторах и рабочих узлах и формирует общее представление о кластере Presto. Это помогает распределять нагрузку и контролировать состояние среды.

Почему Presto считают удобным инструментом для аналитики

Presto ценят за скорость интерактивных запросов, единый SQL-интерфейс и работу поверх разных хранилищ. Он подходит для сценариев, где нужна аналитика на больших объёмах данных без лишнего перемещения информации.

У движка есть несколько свойств, из-за которых его часто выбирают для аналитических задач.

  • Поддержка ANSI SQL. Пользователю не нужно осваивать отдельный язык запросов для каждой системы.
  • Работа с разными источниками. Presto умеет подключаться к нескольким типам хранилищ через коннекторы.
  • Распределённая обработка. Запросы исполняются параллельно на нескольких узлах.
  • Открытый исходный код. За сам движок не требуется лицензия как за проприетарный продукт.
  • Гибкость архитектуры. Движок не привязан к одному поставщику инфраструктуры.

Есть и ещё одна практическая причина. Если в компании уже накопилось много систем хранения, Presto помогает не строить отдельный тяжёлый контур только ради того, чтобы объединить доступ к данным на уровне запросов.

В чём преимущества Presto

Главные преимущества Presto — масштабируемость, гибкость подключения источников и высокая скорость выполнения интерактивных SQL-запросов. Особенно заметны эти свойства на больших наборах данных и в смешанной инфраструктуре.

Меньше затрат на перемещение данных

Presto не хранит данные сам и не требует сначала загружать их в отдельную систему ради каждого аналитического сценария. Это снижает объём лишних копий и упрощает обработку уже существующих данных.

Когда число пользователей и запросов растёт, затраты часто увеличиваются вместе с объёмом данных в хранилищах. Подход Presto позволяет анализировать данные там, где они уже лежат, а не строить ещё один обязательный слой хранения под каждую задачу.

Масштабирование под разные нагрузки

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

Это полезно в ситуациях, когда запросы становятся тяжелее, а число аналитиков, инженеров и сервисов, обращающихся к данным, увеличивается. Один и тот же движок остаётся точкой входа для SQL-доступа.

Быстрое выполнение интерактивных запросов

Presto ориентирован на интерактивную аналитику, когда результат нужен без долгого ожидания. Его распределённая модель и обработка в памяти помогают уменьшать задержку по сравнению с системами, которые сильнее завязаны на запись промежуточных результатов на диск.

Движок использует подход MPP, то есть массово-параллельную обработку. За счёт этого один запрос может выполняться сразу на нескольких узлах, а данные между стадиями обрабатываются потоково в памяти.

Гибкость за счёт коннекторов

Presto подключается к источникам через коннекторы. Это даёт возможность работать с Cassandra, Kafka, MySQL, HDFS, PostgreSQL и другими системами в рамках одной платформы запросов.

Такой подход особенно полезен там, где данные исторически распределены между несколькими хранилищами и уже встроены в рабочие процессы. Не нужно ломать существующую схему хранения, чтобы получить единый слой аналитического доступа.

Чем Presto отличается от обычной базы данных

Presto — это не хранилище данных, а движок выполнения запросов. Он не заменяет базу данных или озеро данных, а работает поверх них.

Обычная база данных хранит таблицы, индексы, транзакционные данные и сама отвечает за сохранность информации. Presto действует иначе: он получает запрос, обращается к внешним системам и возвращает результат. Поэтому его чаще сравнивают не с СУБД в чистом виде, а с аналитическим запросным слоем.

Параметр Presto Классическая база данных
Основная роль Выполнение распределённых SQL-запросов Хранение и обработка данных
Где лежат данные Во внешних источниках Внутри самой системы
Подключение к разным хранилищам Да, через коннекторы Обычно ограничено собственной моделью хранения
Типовые задачи Интерактивная аналитика, объединение доступа к данным Транзакции, хранение, прикладные операции, аналитика

Какие источники данных поддерживает Presto

Presto работает с разными типами источников данных через коннекторы. Это могут быть реляционные базы данных, файловые системы, озёра данных, потоковые платформы и NoSQL-системы.

В исходном примере упоминаются Cassandra, Kafka, MySQL, HDFS и PostgreSQL. На практике идея здесь одна: Presto строит единый слой SQL-доступа поверх разнородной инфраструктуры.

Именно из-за этого его часто используют в средах, где одна команда хранит данные в реляционной СУБД, другая — в Hadoop, а третья работает с потоками событий. Вместо набора разных интерфейсов появляется общий способ задавать аналитические запросы.

Как проходит выполнение запроса в Presto

Выполнение запроса в Presto начинается с координатора, который разбирает SQL, строит план и распределяет задачи по рабочим узлам. После этого узлы получают данные из источников, обрабатывают их и возвращают итог клиенту.

  1. Пользователь или приложение отправляет SQL-запрос.
  2. Координатор разбирает запрос и строит распределённый план выполнения.
  3. План делится на стадии и задачи для рабочих узлов.
  4. Рабочие узлы обращаются к источникам данных через коннекторы.
  5. Промежуточные результаты обрабатываются и передаются между стадиями.
  6. Координатор собирает итоговый результат и отдаёт его клиенту.

Для взаимодействия с сервером используется REST API. Через него можно отправлять запросы на выполнение и получать результаты.

Где Presto применяют чаще всего

Presto используют там, где нужно быстро анализировать большие наборы данных из нескольких систем. Чаще всего речь идёт о BI-нагрузках, аналитике поверх Hadoop, озёр данных и смешанных хранилищ.

Если упростить, Presto подходит для случаев, когда организация хочет задавать SQL-вопросы к данным без долгой подготовки отдельной витрины под каждый сценарий. Это может быть анализ событий, отчётность, исследовательские запросы и объединение данных из нескольких платформ.

Он также удобен в средах с разными командами и разными технологическими стеками. Один источник может быть удобен для транзакций, другой — для потоков, третий — для архивного хранения, а Presto помогает работать с ними как с единой аналитической поверхностью.

Краткая история Presto

Presto изначально разработали в Facebook для интерактивных запросов к крупному хранилищу данных на Apache Hadoop. Позже проект выложили в открытый доступ на GitHub по лицензии Apache.

Позднее часть первоначальной команды развития покинула проект и создала ответвление, известное как PrestoSQL. История развития Presto часто упоминается именно в этом контексте: есть исходный проект и отдельная ветка, которая дальше развивалась самостоятельно.

Когда Presto подходит лучше всего

Presto особенно уместен, когда данные уже распределены по нескольким системам, а пользователям нужен единый SQL-доступ для аналитики. Он полезен в тех случаях, где перенос данных в отдельную платформу создаёт лишнюю задержку или дополнительную нагрузку.

Если задача сводится к транзакционной обработке, постоянному хранению данных или обычной работе прикладной базы, Presto не заменит СУБД. Его сильная сторона другая: распределённые аналитические запросы поверх существующих источников.

Проще говоря, Presto закрывает вопрос доступа и вычислений, а не вопрос хранения. Именно поэтому его обычно рассматривают как часть аналитической архитектуры, а не как единственную систему для работы с данными.