BI Consult Desktop Logo BI Consult Mobile Logo
  • Russian BI Исследование российских bi
  • Перейти на Fine BI
  • Контакты
  • +7 812 334-08-01
    +7 499 608-13-06
  • Отправить сообщение
  • Главная
  • Продукты Эксперт-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Сельское хозяйство
    • Энергетика
    • FMCG
    • Девелоперы
    • Маркетплейсы
    • Пищевая промышленность
    • Фармацевтика
    • Построение Data Platform
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и FP&A
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • IBP
    • ИТ (CIO)
    • Закупки
  • Платформы
    • Системы бизнес-анализа (BI)
    • Интегрированное бизнес-планирование (IBP)
    • Хранилища данных (DWH / Lakehouse)
    • Каталоги данных (Data Catalog)
    • Системы ETL и ELT
    • AI / Исскуственный интеллект
    • Шина данных (ESB)
    • Система управления мастер-данными (MDM)
    • Семантический слой
  • Услуги
    • Переход на отечественные BI и DWH системы
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений и DWH
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Greenplum
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt (Data Build Tool)
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

BI

  • FineBI
  • FineReport
  • FineDataLink
  • FineChatBI (FineAI)
  • Коннекторы данных из 1С в BI
  • Airflow / Nifi
  • Visiology
  • PIX BI
  • Modus BI
  • Yandex.DataLens
  • Open-source BI: Superset/Metabase
  • Luxms BI
  • AW BI + Alpha BI
  • FlyBI + Форсайт. Аналитическая Платформа
  • Loginom
  • Триафлай
  • AI / Исскуственный интеллект
  • Optimacros
  • Навигатор BI
  • Семантический слой

СУБД

  • Arenadata
  • ClickHouse
  • Greenplum
  • Postgres Professional
  • TData

Другое

  • Построение Data Platform
    • Аналитическое хранилище данных
    • Data Lake и Data Engineering
    • Подробнее про Data Lake
    • Внедрение Lakehouse
      • Apache Doris
      • StarRocks
      • Trino
    • Миграция витрин из пропиетарных DWH на новый стек
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Решения Эксперт-BI на российских BI-платформах » Построение Data Platform: комплексный подход к современной работе с данными » Создание Data Lake и Data Engineering » Apache Iceberg: транзакционный Data Lake для аналитических систем » Apache Iceberg: транзакционный Data Lake для аналитических систем. Интеграции с аналитическими движками: Spark, Flink, Trino/Presto, Hive

Apache Iceberg: транзакционный Data Lake для аналитических систем. Интеграции с аналитическими движками: Spark, Flink, Trino/Presto, Hive

Iceberg выступает как транзакционный слой для Data Lake, обеспечивая атомарность операций, консистентность чтения и поддержку эволюции схем. Глава посвящена архитектурным принципам интеграции Iceberg с ведущими аналитическими движками: Spark, Flink, Trino/Presto и Hive. Рассматриваются механизмы транзакций, порядок обновления метаданных, совместимость версий форматов и стратегий организации данных, а также практические сценарии внедрения и оптимизации. В тексте приводятся архитектурные концепции, протоколы взаимодействия и ориентиры по выбору конфигураций для реальных заданий аналитики и обработки больших данных.

Iceberg реализует транзакционность на уровне метаданных, отделяя процесс записи от чтения и позволяя параллельному конвейеру обработки обеспечить согласованность без блокировок на уровне файловой системы. Ключевым элементом является метаданные таблицы, которые описывают Snapshot-версию данных, список манифестов и файлы данных. Каждое изменение таблицы приводит к созданию новой версии метаданных, читатели видят фиксированную, согласованную версию в момент своего запроса. Такой подход поддерживает MVCC, точку времени и эффективную схему эволюции схемы: добавление, удаление столбцов и изменение типов с ограниченной совместимостью, минимизируя переработку существующих файлов и ускоряя операции чтения.

  • Архитектура Iceberg: каталоги, метаданные и манифесты
  • Архитектура взаимодействий с движками: единая таблица, локальные/распределённые чтения, чтение из файлов и чтение из метаданных
  • Эволюция схемы и совместимость версий: подходы к добавлению столбцов, изменению типов, переупаковке файлов
  • Протоколы согласованности и GC: чистка устаревших данных, retention, компрекция и реорганизация файлов

 

Архитектура и принципы взаимодействия Iceberg с аналитическими движками

Iceberg реализует единый концептуальный информационный слой над Data Lake и предоставляет специализированные плагины-каталоги и драйверы для каждого движка. В основе лежат три слоя: каталог (catalog) — сервис по локализации и управлению таблицами, метаданные таблицы — версионированная структура, и файлы данных — Parquet/ORC и др. Каталог обеспечивает доступ к таблицам через единый интерфейс независимо от физического расположения файлов в объектном хранилище. Метаданные включают в себя sequence-версии, snapshots и manifest-файлы, которые описывают наборы физических файлов и их маппинг на логическую схему.

  • Каталоги: Iceberg поддерживает несколько реализаций каталога (Hive Metastore, Hadoop, Glue, Nessie и т. п.). Выбор подходящего каталога влияет на задержку доступа к таблице, согласование схемы и возможности миграции между средами.
  • Метаданные: многослойная структура metadata файлов, где каждый Snapshot фиксирует состояние таблицы на момент транзакции, а Manifest- файлы содержат списки данных файлов и их статистику. Такой подход обеспечивает точечное чтение и эффективную фильтрацию через Predicate Pushdown на уровне движков.
  • Файлы данных: данные хранятся в колоночном формате (обычно Parquet или ORC). Iceberg поддерживает столбцезависимую фильтрацию и статистику по файлам, что позволяет избежать чтения целого раздела.
  • Эволюция схемы: Iceberg хранит новую схему в метаданных и применяет ее к новым записям, сохраняя совместимость уже существующих файлов. Это позволяет одновременно поддерживать старые записи и постепенно внедрять изменения.

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

 

Интеграции Spark и Flink

Интеграции Spark и Flink через Iceberg строятся на одном принципе: оба движка воспринимают Iceberg как источник и получатель таблиц с поддержкой ACID, схемной эволюции и эффективного чтения. В рамках Spark Iceberg реализует собственную реализацию источника данных и выполнения операций через DataSource V2, обеспечивая:

  • эффективное прунинг partition- и file-level, основанное на метаданных;
  • поддержка операций INSERT, UPDATE, DELETE и MERGE через транзакции Iceberg;
  • гибкие стратегиции схемной эволюции без прерывания текущих аналитических запросов.

В Flink Iceberg-драйвер реализует таблицу API, которая интегрируется в Table API и SQL-процессы Flink. Основные принципы:

  • потоковые и пакетные режимы чтения и записи с единым деревом таблиц Iceberg;
  • поддержка точного времени видимости транзакций и мультиверсной согласованности;
  • управление жизненным циклом файлов через механизмы компакций и удаления устаревших данных;
  • эффективная обработка обновлений и удалений в streaming-потоках с сохранением консистентности.

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

  • Spark: настройка каталога Iceberg, выбор Hive-метастора или другого каталога, использование оптимизированных форматов файлов и фильтрации на уровне файлов.
  • Flink: использование Table API для конвейеров обработки, соответствие режимов пакетной и потоковой обработки, поддержка обработки обновлений и удалений в потоках.

Современные практики интеграции

  • Предварительный анализ схемы: перед миграцией целесообразно зафиксировать требования к схеме, например, какие столбцы будут поддаваться дополнительной эволюции, как будут обрабатываться изменения типов.
  • Разделение задач по этим трём направлениям: каталоги и хранение метаданных, чтение-обработка в движке, компакции и очистка устаревших файлов.
  • Тестирование совместимости: выполнять синхронные миграции в тестовых средах с повторяемыми наборами запросов, чтобы проверить корректность MERGE-операций и столбцезависимой фильтрации.
  • Мониторинг и аудит: регистрировать версии метаданных, частоту изменений и время отклика операций обновления, чтобы управлять SLA и обеспечивать traceability.

 

Интеграции Trino/Presto и Hive

Trino (Presto) и Hive выступают в роли слоя SQL-аналитики над Iceberg, предоставляя доступ к данным через коннекторы и каталоги. Основные особенности интеграций:

  • Read-у и обогащение запросов: Iceberg обеспечивает точную фильтрацию и чтение только необходимых файлов за счёт статистик файлов и метаданных, что ускоряет аналитические запросы на больших кластерах.
  • Поддержка транзакций и ACID: Iceberg обеспечивает консистентность данных во время чтения и записи через транзакционный слой, что позволяет множеству пользовательских процессов работать с одной и той же таблицей без столкновений.
  • Совместная работа с Hive Metastore: Hive выступает как каталог и метаданные-источник; Iceberg может использовать Hive Metastore для локализации таблиц и сохранения схем.

В рамках этих интеграций ключевые принципы следующие:

  • predicate pushdown и статистика по файлам: движки Trino/Presto и Hive могут отфильтровывать данные на уровне метаданных и файлов, что сокращает объем необходимого чтения данных.
  • поддержка схемной эволюции: добавление столбцов, изменение порядка полей и удаления столбцов обобщаются Iceberg-метаданными и автоматически применяются к новым записям без прерывания работы аналитических запросов.
  • управление версиями и временная видимость: читатели могут выбрать конкретную версию таблицы или временной точкой, что важно для аудита и ретроспективной аналитики.

Практические рекомендации по выбору движка для аналитики

  • Spark лучше подходит для сложной трансформации данных на стадии подготовки и пакетной обработки, где требуется тесная интеграция с экосистемой Hadoop и мощные механизмы ML/BI.
  • Flink — оптимален для стриминговой аналитики и сценариев с критическими задержками, где Iceberg обеспечивает согласованность и поддержку обновлений в режиме реального времени.
  • Trino/Presto и Hive лучше применяются для интерактивной аналитики и агрегаций, где скорость чтения и масштабируемость чтения из больших Data Lake критичны.
  • Вопрос совместимости версий инструментов и поддержки веток Iceberg требует детального планирования миграций и тестирования функциональности MERGE, UPDATE и DELETE.

 

Механизмы транзакций и консистентности: MVCC, видимость и обслуживание

Iceberg реализует транзакционность через управляемые метаданные и версионирование. Ключевые концепции:

  • Snapshot-based чтение: запросы видят только одну устойчивую версию таблицы, что исключает непредсказуемые эффекты от параллельных операций.
  • MVCC на уровне метаданных: несколько транзакций могут вносить изменения параллельно, каждый читатель видит непротиворечивую копию данных.
  • Манифесты и metadata: обновления записей приводят к созданию новых манифестов и обновленных metadata, а старые файлы могут быть помечены как устаревшие и удаляться по расписанию.
  • Эволюция схемы: добавление столбцов, изменение типов или удаление столбцов выполняются через метаданные и не требуют полного переписывания существующих файлов. Iceberg обеспечивает обратную совместимость и стратегию копирования файлов для изменений, чтобы минимизировать переработку данных.
  • Очистка устаревших данных: GC и ревизии выполняются на уровне набора манифестов и Snapshot-версий, что позволяет управлять хранением и поддерживать разумные лимиты по retention.

Эти принципы критично важны для аналитических нагрузок с высокой конкуренцией запросов: читатели могут работать на стабильной версии данных, а записи — на новой версии, не мешая друг другу. В архитектуре Iceberg отсутствуют жесткие блокировки на уровне файловой системы, что позволяет более эффективно масштабировать конвейеры обработки и снижает издержки задержек.

 

Практические сценарии внедрения и оптимизации

Задачи внедрения Iceberg в реальных проектах часто включают следующие шаги:

  • Определение каталога и стратегии хранения: выбор Hive Metastore, Glue Catalog или другого решения в зависимости от инфраструктуры и требований к аудитам.
  • Планирование схемной эволюции: фиксация правил по добавлению столбцов, обеспечению дефолтных значений и совместимости типов; создание политики миграции и тестирования схем.
  • Настройка движков под Iceberg: настройка Spark/Flink/Trino/Presto/Hive на использование Iceberg-каталога, обеспечение совместимости версий и каталогов, настройка predicate pushdown и статистик файлов.
  • Мониторинг и управление жизненным циклом: сбор метрик по времени отклика транзакций, частоте обновлений схем и объему удаляемых файлов; автоматизация компакций и очисток.
  • Безопасность и соответствие требованиям: внедрение механизмов аутентификации и авторизации на уровне каталога, аудит изменений схем и версий, управление доступом к файлам данных.

Оптимизация производительности строится на сочетании стратегий:

  • Префильтрация на уровне манифеста: ранняя фильтрация данных через статические статистики файлов и прунинг по разделам.
  • Уменьшение количества файлов на чтение: таргетированные компакции данных и агрессивная консолидирование маленьких файлов, чтобы минимизировать сетевой трафик и latency.
  • Правильная настройка retention и vacuum: баланс между хранением и доступностью, чтобы не перегружать хранилище устаревшими версиями.
  • Планирование миграций схем: одновременная поддержка старых и новых форматов данных, чтобы не нарушать текущие запросы.

 

Key takeaways

  • Apache Iceberg обеспечивает транзакционность и консистентность на уровне метаданных Data Lake, что позволяет масштабировать аналитику без сложной координации между движками.
  • Архитектура Iceberg строится вокруг каталогов, версионированных метаданных и файлов данных; MVCC и snapshot-based чтение позволяют безопасно поддерживать параллельные операции.
  • Интеграции Spark, Flink, Trino/Presto и Hive создают единое аналитическое пространство над Data Lake, где каждый движок на своей стороне сохраняет преимущества скорости и функциональности.
  • Э evolюция схемы и совместимость версий реализованы без прерываний в рабочих нагрузках, что особенно важно для крупных предприятий и продвинутых сценариев миграции.
  • Основные практические принципы внедрения включают выбор каталога, управление схемами, мониторинг транзакций и оптимизацию чтения через прунинг и компакцию.
  • Взаимодействие между движками требует учета особенностей каждого из них: Spark и Flink ориентированы на трансформацию и обработку потоков, Trino/Presto и Hive — на интерактивную аналитику и агрегации.
  • Правильная архитектура и процессы владения данными обеспечивают устойчивость к росту объемов, изменение требований к аналитике и требования по безопасности.

 

FAQ

  1. Что такое Apache Iceberg и какие проблемы он решает?
    Iceberg — это транзакционный слой поверх Data Lake, который обеспечивает атомарные операции, консистентность чтения и поддержку схемной эволюции. Он решает проблему неконсистентности файлов и операций над большими наборами данных, которую часто наблюдают в традиционных Data Lake, и позволяет проводить сложные аналитические запросы на уровне SQL без потери точности.

  2. Как Iceberg реализует транзакционность и согласованность данных?
    Транзакционность реализуется через MVCC на уровне метаданных и snapshot-based чтение. Каждая транзакция записывает новую версию метаданных, включая обновления манифестов и файлов. Читатель видит стабильную версию таблицы, пока не закончится его запрос, что исключает race-condition и блокировки на уровне файлов.

  3. Какие движки поддерживают Iceberg и как это влияет на архитектуру?
    Iceberg поддерживает Spark, Flink, Trino/Presto и Hive через соответствующие коннекторы и каталоги. Архитектура становится независимой от конкретного движка: каждый движок читает Iceberg через свой адаптер, но общая модель метаданных и файлов остается единой. Это облегчает миграцию между движками и обеспечивает единый уровень данных.

  4. Какие сценарии интеграции наиболее эффективны для Produktions-сред?

  • Spark хорошо подходит для ETL и пакетной обработки, где необходимы сложные преобразования и машинное обучение.
  • Flink эффективен для стриминговой аналитики, где важно быстрое обновление результатов и консистентность изменений.
  • Trino/Presto и Hive — для интерактивной аналитики и запросов к большим данным, требующих низкой задержки чтения и масштабирования.
  1. Как обеспечить эволюцию схемы без прерывания аналитики?
    Iceberg сохраняет старые версии схем в метаданных и применяет изменения к новым данным. Старые файлы остаются доступными, пока есть активные запросы, и новые версии становятся видимыми постепенно. Это позволяет осуществлять безопасные развёртывания и A/B тестирования схем.

  2. Какие операционные практики критичны для поддержки Iceberg в проде?
    Необходимо иметь четко определённую политику retention и vacuum, мониторинг транзакций и задержек, а также согласование версий с командами аналитики и разработчиками. Важно тестировать миграции схем на отдельных окружениях и планировать Rollback в случае проблем.

  3. Как мигрировать существующий Data Lake под Iceberg?
    Необходимо спланировать миграцию в несколько этапов: определить каталог, перенести схемы, создать Iceberg-таблицы поверх существующих данных и постепенно перенести операции на Iceberg. Важно обеспечить видимость обоих форматов в процессе миграции и поддерживать совместимость запросов на промежуточном этапе.

  4. Какие ограничения стоит учитывать при использовании Iceberg?
    Некоторые версии движков могут иметь ограничения в поддержке конкретных операций (например, некоторых видов MERGE или UPDATE). Необходимо внимательно изучать совместимость версий Iceberg, движков и каталогов в рамках инфраструктуры, чтобы избежать непредвиденных ограничений и обеспечивать стабильность.

  5. Какие стратегии мониторинга и аудита применимы к Iceberg?
    Необходимо регистрировать версионность метаданных, частоту изменений, время выполнения транзакций и их успешность. Мониторинг должен включать индикаторы по задержкам чтения, объему файлов и пропускной способности, а также аудит доступа к данным и изменениям схем.

  6. Что ожидается в будущих версиях Iceberg и движков?
    Ожидаются улучшения в производительности прунинга и фильтрации, расширение поддержки сложных операций обновления, усиление возможностей управления схемой и внедрение новых форматов файлов. Также возможно усиление интеграций с облачными каталожными сервисами и улучшение мониторов качества данных.

← Предыдущая статья
Метаданные, статистика и планы выполнения запросов
Следующая статья →
Каталоги данных и управление данными: Nessie, Glue, REST каталог

 

Современный Data Lake должен поддерживать ACID-транзакции, time travel и эволюцию схем. Посмотрите, как архитектура на базе Apache Iceberg превращает Data Lake в надежный фундамент для аналитики и AI.

 

Узнать стоимость решенияЗапросить видео презентацию

Запросить видео презентацию Запросить доступ к демо стенду online Узнать стоимость лицензий

Задать вопрос

loading...

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

Клиенты
  • «ПрофХолод» — крупнейший в России производитель сэндвич-панелей с пенополиуретаном. 

  • Розничный и интернет-магазин 12 Storeez один из лидеров на рынке женской одежды. С географией рынка не только на территории России, своя продукция представлена еще и в таких странах как Казахстан и Дубай.

  • ПАО «Банк Уралсиб» (Публичное акционерное общество «Банк Уралсиб») — российский коммерческий банк. В 2020 году входил в топ-20 банков РФ по размеру активов (рэнкинг рейтингового агентства Эксперт РА), в 2021 году — в топ-25 крупнейших банков страны по расчётам агрегатора Банки.ру

  • НПФ «Будущее» — один из крупнейших негосударственных пенсионных фондов России, предоставляющий услуги по пенсионному обеспечению и накоплениям. Фонд активно внедряет цифровые технологии для повышения качества обслуживания клиентов.

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Энергетика
    • Фармацевтика
  • Услуги
    • Переход на отечественные BI и DWH
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Техническая поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Платформы
    • FineBI
    • FineReport
    • FineDataLink
    • Коннекторы данных из 1С в BI
    • Airflow + NiFi
    • Visiology
    • Luxms BI
    • Modus BI
    • PIX BI
    • Arenadata
    • ClickHouse
    • Greenplum
    • Postgres Professional
    • Open-source BI: Superset/Metabase
    • Loginom
    • Yandex.DataLens
    • AI / Исскуственный интеллект
    • Optimacros
    • Шины данных
  • Курсы
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt
  • Функциональные решения
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • Сквозная аналитика
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
    • Политика конфиденциальности
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

 

 

 

 

 

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.