Мы уже писали о том, как Trino работает с удаленными объектными хранилищами и файловыми системами. Сегодня поговорим о том, какие изменения выпущены в февральском релизе 2025 года, почему в Trino удалена поддержка доступа к Azure Storage, Google Cloud Storage, S3 и S3-совместимым файловым системам через Hive и что использовать вместо нее.
Новинки 470-го выпуска Trino
Изначально Trino поддерживал запросы к данным Hive и использовал библиотеки из экосистемы Hadoop. В частности, ранее Trino позволял использовать коннектор Hive для доступа к данным, хранящимся в облачных объектных хранилищах (Azure Storage, Google Cloud Storage, Amazon S3 и S3-совместимые системы типа MinIO). Это достигалось за счет интеграции Hive-коннектора с библиотеками, которые обеспечивали доступ к этим облачным хранилищам. Однако, в свежем релизе 470 от этого было решено отказаться из-за морального устаревания HDFS и растущей популярности более гибких архитектур хранения данных, таких как Data LakeHouse. Вообще Trino уже давно может читать такие форматы файлов, как Apache ORC и Parquet, а также включает библиотеки сжатия и распаковки файлов из объектного хранилища. Кроме того, движок имеет коннекторы к Apache Iceberg, Hudi и Delta Lake, а также к объектным хранилищам Amazon S3, Azure Storage, Google Cloud Storage и пр. Наконец, поддержка множества облачных хранилищ через Hive-коннектор добавляла сложность в код и его поддержку. Поэтому от него было решено отказаться в пользу нативных коннекторов для работы с внешними хранилищами. Использование специализированных коннекторов позволяет лучше интегрироваться с API облачных провайдеров и поддерживать их новые функции. Это также упрощает процесс обновления и поддержки, поскольку каждый коннектор развивается независимо.
Отказ от HDFS по умолчанию привел к тому, что теперь в Trino необходимо указывать, какую файловую систему включить в каждом каталоге. Например, fs.native-azure.enabled=true, fs.native-gcs.enabled=true или fs.native-s3.enabled=true. Для HDFS надо настроить fs.hadoop.enabled=true. Начиная с выпуска Trino 470 от февраля 2025 года все свойства конфигурации каталога для использования устаревшей поддержки доступа к Azure Storage, Google Cloud Storage, S3 и S3-совместимым файловым системам теперь устарели. К ним относятся конфигурации, начинающиеся с hive.azure, hive.cos, hive.gcs, и hive.s3. Теперь при использовании этих свойств Trino выдает предупреждения во время запуска в журнале сервера.
Кроме того, в выпуске Trino 470 внедрены следующие изменения:
- добавлены коннекторы к DuckDB – резидентной колоночной аналитической СУБД и Loki — системе сбора и хранения лог-сообщений с открытым исходным кодом от Grafana Labs для централизованного сбора, индексации и анализа логов в распределенных системах и контейнерных средах;
- добавлена поддержка для установки свойств сеанса для каждого запроса с помощью запросов WITH SESSION SELECT. Это позволяет индивидуально настраивать параметры сеанса для каждого конкретного запроса, чтобы оптимизировать его выполнение в зависимости от специфических требований без изменения глобальных настроек сервера. Кроме того, установка свойств сеанса на уровне запроса гарантирует, что изменения не повлияют на другие параллельно выполняемые запросы. Это обеспечивает стабильность и предсказуемость поведения системы при одновременной работе множества пользователей.
- улучшена совместимость отказоустойчивого хранилища обмена с объектными S3-хранилищами;
- разрешен пропуск проверки схемы каталога для улучшения совместимости отказоустойчивого хранилища обмена с файловыми системами типа HDFS. Это настраивается с помощью свойства hdfs.skip-directory-scheme-validation.
- Добавлен экспорт JMX-метрик для заблокированных запросов, что помогает отслеживать количество и причины блокировок в реальном времени, чтобы выявлять узкие места и оперативно реагировать на возникающие проблемы. Анализируя эти метрики, можно оптимизировать конфигурацию Trino, настроив параметры памяти, количество рабочих процессов и настройки сети, чтобы уменьшить вероятность блокировок и повысить общую эффективность обработки SQL-запросов.
- удалена поддержка свойства сеанса optimize_hash_generation и параметра конфигурации optimize-hash-generation – это критическое изменение;
- исправлена ошибка при использовании имен переменных в верхнем регистре в пользовательских функциях SQL;
- добавлено предотвращение сбоев функции array_histogram(), если входные данные содержат нулевые значения;
- минимальная версия Java, необходимая для работы Trino – 11;
- реализовано предотвращение утечки соединения при использовании файловой системы хранилища Azure;
- исправлено возможное повреждение таблицы при использовании процедуры очистки vacuum;
- исправлена ошибка NullPointerException при перечислении таблиц в Glue;
- в коннектор Iceberg добавлена процедура таблицы optimize_manifests и возможность настройки количества повторных попыток фиксации с помощью свойства таблицы max_commit_retry;
- для коннектора MySQL добавлена поддержка MERGE-выражения и проверка попытки записи недопустимых отрицательных значений даты;
- при использовании метахранилища Hive разрешено кэширование метаданных таблиц.
Таким образом, с каждым выпуском Trino становится все более мощным инструментом выполнения аналитических запросов к большим объемам различных данных во внешних хранилищах.
Подробнее познакомиться с Trino вы сможете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники