Pinot server: single big LV vs multiple mount poin...
# general
s
Pinot server: single big LV vs multiple mount points for segment storage?
Hi all, looking for guidance on disk layout for Pinot servers. Host has 9× ~2.8 TB disks mounted separately as
/data/1 … /data/9
(RHEL/XFS). We can either: 1. keep them as separate mount points and list all paths in
pinot-server.conf
, or 2. combine them into one big volume (LVM or mdadm RAID) and expose a single
/data
. Questions: • Does Pinot parallelize better with multiple data dirs (one per disk) vs a single large filesystem? • Any gotchas with listing many paths in
pinot.server.instance.dataDir
? • If you’ve tried both: observed differences in query/segment fetch performance or recovery times? • Recommended RAID/LVM setups (if any) for Pinot servers? Thanks!
m
Pinot does parallel reads, yes. So you should optimize for what gives you better read IOPS and throughput
s
Could you confirm if Pinot supports writing data across multiple disks, or if it requires configuration changes to handle that setup?
m
Unless you are looking for tiering, you should use a single data Dir.
s
Ok, I’ll try tiering and start with streaming from Kafka first. While creating the table, I’ll define both hot and cold directories. I still need to explore how to configure this properly, since I have 12 disks and would like to set up retention of data on each disk.
m
What is the use case you are trying to solve? Why do you have 12 disks attached to a single server (typically this is not how people deploy Pinot)?
s
We already have this hardware available. Our use case is that we’re ingesting around 15K TPS from Kafka (JSON format) into Pinot. The data volume is huge — we need to retain about 6 months of data (~40TB). Our cluster has 8 nodes, each with 128GB RAM and multiple CPU cores, and each node comes with 12 local disks. That’s why we’re looking at how best to configure Pinot storage across these disks for both performance and retention.
x
Suggestion: use a single dataDir on top of mdadm RAID0 (striped) across the local disks. Pinot parallelizes reads at the segment level; a striped FS will give you the best aggregate read IOPS/throughput and keeps ops simple vs juggling many mount points. Why RAID0 here • Pinot’s durability comes from replication across servers + deep store, not single-disk redundancy. With RF≥2, a node loss is tolerable; RAID0 maximizes performance per box. • Multiple dataDir paths work but tend to fill unevenly and complicate balancing/recovery. One big FS avoids hot-spotting and path management. • LVM concat/linear gives capacity but *no parallelism*; mdadm RAID0 stripes IO across all spindles. Gotchas / answers • Parallelism: Pinot already does parallel reads; striped FS ⇒ more devices servicing those reads. • Many paths in pinot.server.instance.dataDir: supported, just harder to operate (capacity fragmentation, rebalancing quirks). • Perf & recovery: RAID0 generally faster for segment fetch/serve. If a disk dies, the node is toast (as with any JBOD’d dataDir on that disk), but the cluster will *rebalance*; set RF≥2 (ideally 3) and use deep store (e.g., S3) for quick reloads. • If you need local redundancy: pick RAID10, but expect ~50% capacity hit.
➕ 1
z
With RF=2 and RAID0, ingest capacity should be calculated at half the nodes assuming a catastrophic loss of half the nodes in the cluster (over-simplifying). The rebuild will also consume existing capacity and will impact ingest imo,
x
To rebuild the node if comes up with empty, Pinot will be mainly download segments from deep store and only for the current consuming segments from Kafka
If local data are there then existing data will be loaded from disk only the data diff will be downloaded and consuming kafka again
z
Interesting
So a deepstore in this case is S3/GCS while the nodes are more for realtime ingest and processing?
x
nodes for data serving
deep store is for data backup
👍 1