Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[Enhancement] Arrow Stream Load decompresses record batches on Arrow's global thread pool

Aperta Adatta ai principianti
#68,891 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
Mezza giornata
Idoneità per principianti
70/100
Tipo di issue
Funzionalità
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
cpp
Ambito
backend

Direzione di ricerca

Inizia da be/src/format/arrow/arrow_stream_reader.cpp, dove il corpo di Stream Load viene letto con arrow::ipc::IpcReadOptions::Defaults(), e verifica come viene impostato use_threads in quel punto. Lo stesso schema compare in arrow_flight_batch_reader.cpp. Il lavoro è completo quando il percorso di lettura di Stream Load decomprime sul thread dello scanner, eventualmente dietro una configurazione BE, i test esistenti di caricamento Arrow continuano a passare e la variazione di throughput è confermata da un benchmark.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Search before asking
  • I had searched in the issues and found no similar issues.
Description

ArrowStreamReader reads Stream Load bodies with arrow::ipc::IpcReadOptions::Defaults() (be/src/format/arrow/arrow_stream_reader.cpp, master too), and that leaves use_threads = true. For compressed IPC streams (ZSTD/LZ4 record batches), Arrow then decompresses every record batch's buffers on Arrow's single process-wide CPU thread pool, not on the scanner thread doing the read.

Under many concurrent Arrow loads, scanner threads mostly wait on that one pool's mutex and condition variable. Off-CPU stacks show around 75 scanner threads per BE parked in pthread_cond_signal / arrow::internal::ThreadPool::SpawnReal, while the BE stays well below CPU saturation.

Measurements

4 BEs (192 vCPU each, arm64), cloud mode, many concurrent Stream Loads, ZSTD-compressed Arrow record batches:

  • default IpcReadOptions (global pool): plateau of about 5.7M rows/s total, BEs at about 64% CPU;
  • the same data sent uncompressed: about 7.1M rows/s;
  • ZSTD, with decompression inline on the scanner thread (use_threads = false): 8.15–8.45M rows/s.
Solution

Read Stream Load bodies with use_threads = false (optionally behind a BE config), so decompression runs on the scanner thread that already owns the load. Load concurrency comes from the scanner pool, so Arrow's internal pool adds only contention. arrow_flight_batch_reader.cpp uses the same pattern and may benefit too.

Are you willing to submit PR?
  • Yes I am willing to submit a PR!
Code of Conduct
Lingua principale
Java
Stelle
16k
Fork
4k
Merge medio
2g 16h
PR unite (30g)
643

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di apache/doris

Tutte le issue di apache/doris

Issue simili

Altre issue su Java

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.