Package org.apache.orc.impl
Class MemoryManagerImpl
java.lang.Object
org.apache.orc.impl.MemoryManagerImpl
- All Implemented Interfaces:
MemoryManager
- Direct Known Subclasses:
MemoryManager
Implements a memory manager that keeps a global context of how many ORC
writers there are and manages the memory between them. For use cases with
dynamic partitions, it is easy to end up with many writers in the same task.
By managing the size of each allocation, we try to cut down the size of each
allocation and keep the task from running out of memory.
This class is not thread safe, but is re-entrant - ensure creation and all invocations are triggered from the same thread.
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.apache.orc.MemoryManager
MemoryManager.Callback -
Constructor Summary
ConstructorsConstructorDescriptionMemoryManagerImpl(long poolSize) Create the memory managerCreate the memory manager. -
Method Summary
Modifier and TypeMethodDescriptionvoidaddedRow(int rows) Give the memory manager an opportunity for doing a memory check.voidaddWriter(Path path, long requestedAllocation, MemoryManager.Callback callback) Add a new writer's memory allocation to the pool.longcheckMemory(long previous, MemoryManager.Callback writer) As part of adding rows, the writer calls this method to determine if the scale factor has changed.doubleThe scaling factor for each allocation to ensure that the pool isn't oversubscribed.longGet the total pool size that is available for ORC writers.voidDeprecated.remove this methodvoidremoveWriter(Path path) Remove the given writer from the pool.
-
Constructor Details
-
MemoryManagerImpl
Create the memory manager.- Parameters:
conf- use the configuration to find the maximum size of the memory pool.
-
MemoryManagerImpl
public MemoryManagerImpl(long poolSize) Create the memory manager- Parameters:
poolSize- the size of memory to use
-
-
Method Details
-
addWriter
public void addWriter(Path path, long requestedAllocation, MemoryManager.Callback callback) throws IOException Add a new writer's memory allocation to the pool. We use the path as a unique key to ensure that we don't get duplicates.- Specified by:
addWriterin interfaceMemoryManager- Parameters:
path- the file that is being writtenrequestedAllocation- the requested buffer size- Throws:
IOException
-
removeWriter
Remove the given writer from the pool.- Specified by:
removeWriterin interfaceMemoryManager- Parameters:
path- the file that has been closed- Throws:
IOException
-
getTotalMemoryPool
public long getTotalMemoryPool()Get the total pool size that is available for ORC writers.- Returns:
- the number of bytes in the pool
-
getAllocationScale
public double getAllocationScale()The scaling factor for each allocation to ensure that the pool isn't oversubscribed.- Returns:
- a fraction between 0.0 and 1.0 of the requested size that is available for each writer.
-
addedRow
Description copied from interface:MemoryManagerGive the memory manager an opportunity for doing a memory check.- Specified by:
addedRowin interfaceMemoryManager- Parameters:
rows- number of rows added- Throws:
IOException
-
notifyWriters
Deprecated.remove this methodObsolete method left for Hive, which extends this class.- Throws:
IOException
-
checkMemory
Description copied from interface:MemoryManagerAs part of adding rows, the writer calls this method to determine if the scale factor has changed. If it has changed, the Callback will be called.- Specified by:
checkMemoryin interfaceMemoryManager- Parameters:
previous- the previous allocationwriter- the callback to call back into if we need to- Returns:
- the current allocation
- Throws:
IOException
-