umbra: the server crashes while loading a billion-row Parquet file with a large footer

未關閉
#3,292 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

維護者通常 1 天內回覆

還沒有人認領這個 Issue。

評估

難度
4/5
預估耗時
3-5 天
新手友好度
25/100
Issue 類型
缺陷
描述清晰度
基本清楚
活躍度
活躍
技術堆疊
shell, sql
領域
data, database

研究方向

The crash happens during the COPY in umbra/create.sql (around line 216) when umbra/load reads a Parquet file with about 2,360 row groups and a 31.6 MB footer. Start by rebuilding the reduced-row-group file with the clickhouse local command in the issue, then load it with umbra/load and capture the Umbra server log, which the report did not include. Done means the crash reproduces or is ruled out, with the footer size and row-group count recorded.

由索引模型根據 Issue 內容生成。

描述

The Umbra server crashed while loading a Parquet file of a billion rows: the client lost the connection during the COPY of umbra/create.sql:

CREATE TABLE
psql:create.sql:216: SSL SYSCALL error: EOF detected
psql:create.sql:216: error: connection to server was lost

This happened in the randomized benchmark (https://github.com/ClickHouse/ClickBench/pull/3271), which loads a generated dataset with the same schema as hits.parquet, a billion rows in one file, using umbra/install and umbra/load unchanged (image umbradb/umbra:26.10, machine c6a.metal with 384 GiB of memory). The file was written by ClickHouse 26.10 with its default row group size limit of 512 MB: more than a thousand row groups, and a footer of 35 MB. Hyper refused the same file because of its footer size (https://github.com/ClickHouse/ClickBench/issues/3291), so the size of the footer is a likely cause here too; the other systems of the benchmark loaded the same file. The log of the server was not collected.

Possible reproduction with the standard dataset: rewriting hits.parquet (100M rows, 226 row groups, a footer of 2.4 MB) with smaller row groups gives 2360 row groups and a footer of 31.6 MB:

clickhouse local --output_format_parquet_row_group_size 40000 --output_format_parquet_row_group_size_bytes 100000000000 \
    --query "SELECT * FROM file('hits.parquet') INTO OUTFILE 'hits-small-groups.parquet' TRUNCATE FORMAT Parquet"
clickhouse local --query "SELECT num_row_groups, metadata_size FROM file('hits-small-groups.parquet', ParquetMetadata)"
# 2360	31626081

then load it instead of hits.parquet with umbra/load.

The next run of the randomized benchmark writes about 250 row groups per file, as the original file has; its result will show whether Umbra loads a billion rows with a small footer, and I will add it here.

@toschmidt

🤖 Generated with Claude Code

主要語言
Shell
星號
1.2k
分支
334
平均合併
3 小時 50 分鐘
30 天內合併 PR
710

環境準備

  • 沒有 Dockerfile 或 Docker Compose 檔案
  • 有 Pull Request 範本
  • 沒有貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

ClickHouse/ClickBench 的其他 Issue

查看 ClickHouse/ClickBench 的全部 Issue

相似的 Issue

更多 Shell/Bash Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。