fix(trino): bound memory for the learning stack
This commit is contained in:
1 parent
21f3570b89
commit
863d658a5f
6 files changed
+177
-11
No files matched your search
@@ -0,0 +1,107 @@
|
||||
# Проверка лимита памяти Trino
|
||||
|
||||
Дата: 19 октября 2026 года. Это отчет о проверке; актуальная конфигурация
|
||||
находится в `docker-compose.yml` и `trino/jvm.config`, требования для учащегося —
|
||||
в `START_HERE.md`.
|
||||
|
||||
## Что проверяли
|
||||
|
||||
Trino 478 в контейнере с пределом 2 ГиБ RAM, без swap, с Java heap от 512 МиБ
|
||||
до 1 ГиБ. JVM сама подбирает размер регионов G1; вместо настройки образа
|
||||
`G1HeapRegionSize=32M` для большого heap получен регион 1 МиБ.
|
||||
|
||||
Среда: Linux x86_64, Docker Engine, cgroup v2, 6 CPU и 11,14 ГиБ памяти,
|
||||
видимых Docker. Остальные сервисы стенда работали одновременно. Общего лимита
|
||||
8 ГБ для проекта или виртуальной машины в этом прогоне не было.
|
||||
|
||||
Исходные файлы основного маршрута курса:
|
||||
|
||||
| Файл | Размер, байт |
|
||||
| --- | ---: |
|
||||
| `yellow_tripdata_2024-01.parquet` | 49 961 641 |
|
||||
| `yellow_tripdata_2024-02.parquet` | 50 349 284 |
|
||||
| `yellow_tripdata_2024-03.parquet` | 60 078 280 |
|
||||
| `taxi_zone_lookup.csv` | 12 331 |
|
||||
|
||||
Файлы взяты из уже скачанного учебного набора, без выборки или сокращения.
|
||||
|
||||
## Сценарий
|
||||
|
||||
1. Перед изменением проверены отсутствие активных Spark-приложений и запросов
|
||||
Trino, чтение существующей таблицы `lakehouse.default.spark_trino_smoke`.
|
||||
2. Пересоздан только Trino. Запуск до `SERVER STARTED` занял около 25 секунд,
|
||||
healthcheck прошел.
|
||||
3. Созданы отдельная временная схема `trino_memory_<id>` и собственный префикс
|
||||
`validation/trino_memory_<id>/raw/` в MinIO. Таблицы курса не перезаписывались.
|
||||
4. Spark подготовил bronze и справочник по SQL Модуля 4; фильтры, нормализации,
|
||||
два JOIN со справочником и silver выполнены кодом Модуля 5. Проверки качества
|
||||
этого модуля также прошли. Получены 9 554 778 строк bronze, 9 418 184 строк
|
||||
silver и 265 строк справочника.
|
||||
5. Через Python-клиент Trino выполнены 11 запросов из Модуля 6: просмотр схем,
|
||||
таблиц и колонок, выборки, подсчет строк, общие метрики, агрегаты по районам
|
||||
и топ-10 зон. Имена таблиц заменены на временные; SQL сохранен.
|
||||
6. Дополнительно дважды выполнен JOIN всей bronze со справочником зон и
|
||||
группировкой по району:
|
||||
|
||||
```sql
|
||||
SELECT z.Borough, count(*) AS trips, avg(b.fare_amount) AS avg_fare
|
||||
FROM <bronze> b
|
||||
LEFT JOIN <zones> z ON b.PULocationID = z.LocationID
|
||||
GROUP BY z.Borough
|
||||
ORDER BY trips DESC;
|
||||
```
|
||||
|
||||
7. Подсчет строк, общие метрики, агрегаты по районам, топ зон, чтение созданной
|
||||
Spark таблицы итогов и оба JOIN сверены с результатами Spark. Для чисел с
|
||||
плавающей точкой использован допуск `1e-8`. Ошибки Python-клиента Trino
|
||||
пробрасывались наружу, без обработчика исключений из ноутбука.
|
||||
8. Повторно прочитана прежняя smoke-таблица: результат `1 / from_spark` сохранен.
|
||||
Всего завершились успешно 14 запросов. Временные таблицы удалены с `PURGE`,
|
||||
затем удалены временная схема и собственный raw-префикс. После `PURGE`
|
||||
отдельно удалены восемь пустых маркеров каталогов в собственном warehouse-префиксе.
|
||||
Проверено отсутствие временных объектов; исходные Parquet/CSV на хосте сохранены.
|
||||
|
||||
## Измерения
|
||||
|
||||
| Показатель | Результат |
|
||||
| --- | ---: |
|
||||
| Лимит контейнера (`memory.max`) | 2 147 483 648 байт |
|
||||
| Лимит swap (`memory.swap.max`) | 0 |
|
||||
| Фактический `MaxHeapSize` через `jcmd 1 VM.flags` | 1 073 741 824 байта |
|
||||
| Пик контейнера Trino (`memory.peak`) | 1 340 874 752 байта, около 1,25 ГиБ |
|
||||
| События `oom`, `oom_kill`, `max` в `memory.events` | 0 |
|
||||
| Перезапуски Trino | 0 |
|
||||
| Пик суммы `memory.current` восьми контейнеров | около 5,89 ГиБ |
|
||||
| Пик той же суммы за вычетом `inactive_file` | около 5,44 ГиБ |
|
||||
|
||||
Суммарная память снималась раз в секунду, получено 165 отсчетов во время
|
||||
подготовки таблиц, запросов и очистки. Пик Trino взят из счетчика cgroup,
|
||||
который учитывает и запуск контейнера. Вычитание `inactive_file` приближает
|
||||
сумму к показателю памяти в `docker stats`; файловый кэш показан отдельно.
|
||||
|
||||
Агрегаты по silver обработали 9 418 184 строки каждый, что подтверждено
|
||||
статистикой запросов Trino. `count(*)` по bronze использовал метаданные Iceberg;
|
||||
проверкой чтения bronze служил также JOIN со справочником.
|
||||
|
||||
## Границы вывода
|
||||
|
||||
Бюджет Trino 2 ГиБ / heap 1 ГиБ достаточен для проверенных запросов на основном
|
||||
наборе курса при одном учащемся. Измерение не подтверждает работу всех восьми
|
||||
модулей под общим жестким лимитом 8 ГБ. В сумму контейнеров не входят Docker
|
||||
daemon, ядро и другие процессы Linux/WSL2. Docker Desktop, Windows, ARM64,
|
||||
параллельные занятия и расширенный набор Taxi за 12 месяцев не проверялись.
|
||||
|
||||
Для повторной проверки подними стенд с этой конфигурацией и пройди модули 3–6
|
||||
на трех месяцах Taxi, добавив JOIN выше. Временная схема нужна, если важно
|
||||
сохранить существующие учебные таблицы. Примененный лимит можно проверить
|
||||
с хоста:
|
||||
|
||||
```bash
|
||||
docker inspect --format '{{.HostConfig.Memory}} {{.HostConfig.MemorySwap}}' trino
|
||||
docker compose exec trino jcmd 1 VM.flags
|
||||
docker compose exec trino cat /sys/fs/cgroup/memory.peak
|
||||
docker compose exec trino cat /sys/fs/cgroup/memory.events
|
||||
```
|
||||
|
||||
Последние два пути относятся к cgroup v2; счетчики накапливаются с запуска
|
||||
контейнера. Числа нового прогона могут отличаться.
|
||||
Reference in new issue
Block a user