[SPARK-55469][CORE] Fallback storage reads block data lazily #54268
+220
−33
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What changes were proposed in this pull request?
This introduces a generic
FileSystemSegmentManagedBuffer, which wraps a segment of a file on an HadoopFileSystem. This is then used by theFallbackStorageto read block data lazily.Why are the changes needed?
The
ShuffleBlockFetcherIteratoriterates over various sources of block data: local, host-local, push-merged local, remote and fallback storage blocks. It makes large efforts to keep the memory consumed during iteration low. On creation of the iterator,ShuffleBlockFetcherIterator.initialize()createsManagedBuffers for each local, host-local and push-merged local block. Only onShuffleBlockFetcherIterator.next(), theManagedBufferactually reads the block data of the next block.Remote blocks are fetched synchronously and only up to a specific amount of bytes.
Currently, method
FallbackStorage.readreturns aManagedBufferthat already stores the data. Therefore, fallback storage blocks are fully read inShuffleBlockFetcherIterator.initialize(). The entire shuffle data of the iterator that originates on the fallback storage is hold in memory before the iteration starts.Does this PR introduce any user-facing change?
No.
How was this patch tested?
Unit tests for
FileSystemSegmentManagedBufferandShuffleBlockFetcherIterator.This now explicitly tests
ShuffleBlockFetcherIteratorwith fallback storage blocks.Was this patch authored or co-authored using generative AI tooling?
No.