hudi-table-layout
Analyzes the physical layout of an Apache Hudi table (partition and file size distribution, skew, micro-partitioning, small-file pile-up, hot partitions) by running the HoodieTableLayoutAnalyzer utility and interpreting its JSON report. Invoke when a user asks how big a Hudi table or its partitions are, whether a table has a small-file problem, whether it is over-partitioned, which partitions take most of the writes, or how skewed the partitions are.
- License 许可
- Apache-2.0
- 所属仓库
- apache/hudi
- 最近更新
- 2026-11-11
- Stars
- ★ 6.4k
- Forks
- 2.5k
01 前言 Front Matter
- name
- hudi-table-layout
- description
- Analyzes the physical layout of an Apache Hudi table (partition and file size distribution, skew, micro-partitioning, small-file pile-up, hot partitions) by running the HoodieTableLayoutAnalyzer utility and interpreting its JSON report. Invoke when a user asks how big a Hudi table or its partitions are, whether a table has a small-file problem, whether it is over-partitioned, which partitions take most of the writes, or how skewed the partitions are.
02 资源文件 2
- 参考文档README.md2.7 KB
- 参考文档references/detectors.md10.0 KB
03 SKILL.md 正文
<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -->
Hudi Table Layout
You are helping an operator understand how a Hudi table is laid out on storage and whether that
layout is hurting it. You do this by running HoodieTableLayoutAnalyzer — a read-only Spark
utility shipped in hudi-utilities — and reading its JSON report. You never guess at a table's
layout from memory; every number and verdict you give traces back to a field in that report.
What the tool answers
| Section | Question |
|---|---|
tableSizeStats, fileCountPerPartition |
How big are the base files, and how many does each partition hold? |
skew |
Is data spread evenly across partitions, or concentrated in a few? |
partitions |
Which partitions are largest, and what do their files look like? |
micro-partition detector |
Are there too many partitions, or do most partitions hold too little data to fill a base file? |
small-files detector |
What share of partitions is piling up small base files? |
hot-partitions detector |
Which partitions absorb most recent writes? |
Each detector reports a status: CLEAN or FLAGGED for micro-partition and hot-partitions;
CLEAN, MODERATE, SEVERE or SKIPPED for small-files (hot-partitions is also SKIPPED when
there are no ingest commits to scan). SKIPPED means the detector could not judge. It is silence,
not a pass.
Step 1 — collect what the tool needs
- The table base path. Local,
s3://,gs://orabfs://. - Which sections the user cares about. Map the question to flags:
| The user wants | Flags |
|---|---|
| Total size, file-size distribution | none (default) |
| Per-partition breakdown, largest partitions | --enable-partition-stats (add --top-n 20 for "top N") |
| Skew across partitions | --enable-partition-stats --enable-table-stats |
| Record counts, average row size | --enable-partition-stats --include-row-counts |
| Small files, over-partitioning, hot partitions | --enable-partition-stats --analyze-table-characteristics (add --print-top-k 5 for evidence) |
| Only the last N days of a date-partitioned table | --num-days N |
- Threshold overrides, only if the user has them. The detectors ship with defaults (50 MB
average file size, 10,000 partitions, 10% / 30% small-file tiers, 50-commit hot window at 50%
share). If the user's target file size or write pattern differs, pass the matching
--micro-partition-*,--small-files-*or--hot-*flag;references/detectors.mdlists them. Do not invent overrides; defaults are fine for a first look.
Two things to warn about before running:
--include-row-countsreads one Parquet footer per file when the table has nocolumn_statsmetadata partition. On a table with tens of thousands of files on object storage this is slow. Say so, and confirm before running it.- Date filters only work when partition names are
yyyy-M-d,yyyy/M/dorcolumn=<date>. On any other scheme the run fails fast; drop the date flags.
Step 2 — run it
The tool is a Spark application and needs spark-submit; a plain java -cp will not work.
spark-submit \
--master "local[2]" \
--driver-memory 4g \
--conf spark.log.level=WARN \
--class org.apache.hudi.utilities.HoodieTableLayoutAnalyzer \
"$HUDI_UTILITIES_BUNDLE" \
--base-path <table base path> \
--enable-partition-stats --analyze-table-characteristics \
--output JSON
Always request --output JSON. For object-store paths add the matching Hadoop connector
(--packages org.apache.hadoop:hadoop-aws:3.3.4 for S3, or the GCS / Azure equivalent). Raise
--driver-memory for tables with more than roughly 50,000 partitions. Show the user the full
command before running it.
If spark-submit is not available, say so and stop; there is no pure-Java fallback for this tool.
Step 3 — read the report
The JSON envelope is documented in references/detectors.md. Answer the user's question from the
fields, not from the whole dump:
- Size questions — answer from
totalBytes,totalFiles,numPartitionsandtableSizeStats. Quote the p50 and p95 file sizes; they say more than the mean. - Skew questions — lead with
largestPartitionShareandtop10Share, which are intuitive, then givecvandgini. Rule of thumb:cvunder 0.3 is uniform, 0.3–0.6 moderate, above 0.6 significant;giniunder 0.2 balanced, above 0.5 highly concentrated. Name theoutlierswhen there are any. - Detectors — dispatch on each detector's
status:FLAGGED,MODERATE,SEVERE— quote thesummary, then thefindingsverbatim. Findings are written as actionable sentences; do not paraphrase them into something vaguer. Then add the remedy fromreferences/detectors.md.SKIPPED— thesummarysays why (too few ingest commits, or no ingest commits in the window). Say so and do not treat it as clean.CLEAN— say so in one line. Do not pad.
When reporting, lead with overallStatus, then flagged detectors, then skipped, then clean.
Include the observed.* values from effectiveConfigs when they make a finding concrete
("47 of 280 qualifying partitions average under 50 MB"), and mention the effective.* threshold
the verdict was judged against, since a user with a different target file size may want to
re-run with an override.
Step 4 — recommend, don't act
This skill diagnoses. It does not run clustering, change writer configuration, or repartition a
table. For every flagged detector, give the operator the specific next step from
references/detectors.md — typically scheduling clustering with HoodieClusteringJob, tuning the
writer's small-file settings, or revisiting the partition key — and say what it costs: clustering
rewrites data and takes time and compute; changing the partition scheme means a new table.
Guardrails
- Every claim about the layout must come from the report. If you have not run the tool, say you have not, and do not speculate.
- On a Merge-on-Read table, say that log files are not counted and the small-file picture can be worse than reported; the report includes a finding to that effect.
- Never run
--include-row-countson a large table without warning about the cost. - If the user asks whether compaction, cleaning or archival is keeping up, that is a different tool — point them to the table health skill rather than stretching this report to cover it.
04 同仓库更多 Skills
hudi-table-health
Checks whether an Apache Hudi table's table services (compaction, cleaning, archival, savepoints) are keeping up with ingestion, by running the HoodieTableHealthChecker utility and interpreting its JSON report. Invoke when a user asks whether a Hudi table is healthy, whether compaction or cleaning is falling behind, why the active timeline keeps growing, or what to do about a savepoint blocking archival.
hudi-rca
Explains why an Apache Hudi job failed. Classifies a pasted stacktrace and supporting artifacts against a catalog of known failure patterns, states the evidence it is reasoning from, and gives an ordered mitigation ladder. When no pattern matches, narrates what Hudi was doing and which phase failed. Invoke when a user brings a Hudi failure, a confusing exception, a stalled table, or asks why a write, compaction, or table service is not working.
hudi-optimizer
Finds what an Apache Hudi deployment is leaving on the table. Reads writer properties, a Spark event log, and the table itself, corroborates observations across them, and recommends configuration and capability changes with risk tiers and verification steps. Invoke when a Hudi job works but is slow, expensive, or larger on storage than expected, or when a user asks whether a feature such as the record-level index or clustering would help their table.
hudi-mdt-health
Checks whether an Apache Hudi table's metadata table is healthy -- caught up with the data table, consistent with the files on storage, compacting on schedule, and with a record-level index sized for the table -- by running the HoodieTableHealthChecker utility's metadata-table checks and interpreting its JSON report. Invoke when a user asks whether the metadata table is in sync or lagging, whether file listings from the metadata table can be trusted, why metadata-table compaction is not running, whether the record index has too few file groups, or whether the metadata table needs to be rebuilt.
hudi-config-consultant
Answers questions about Apache Hudi `hoodie.*` configuration properties from a catalog generated out of the Hudi source tree — what a config does, its default and valid values, where in the code it is actually read, what gates it so that setting it can silently do nothing, and what else must be set alongside it. Invoke when a user asks what a config does, what to set for a goal, why a config they set had no effect, how two configs differ, or which configs go together.
hudi-architect
Interactive Apache Hudi table design advisor. Turns workload requirements into architecture guidance and an Architecture Decision Record through a tiered conversational flow, with configuration bundles on implemented executable routes. Invoke when a user wants help designing a new Hudi table or evaluating an existing design.