public class SingleInputGate extends IndexedInputGate
Each intermediate result is partitioned over its producing parallel subtasks; each of these partitions is furthermore partitioned into one or more subpartitions.
As an example, consider a map-reduce program, where the map operator produces data and the reduce operator consumes the produced data.
+-----+ +---------------------+ +--------+
| Map | = produce => | Intermediate Result | <= consume = | Reduce |
+-----+ +---------------------+ +--------+
When deploying such a program in parallel, the intermediate result will be partitioned over its producing parallel subtasks; each of these partitions is furthermore partitioned into one or more subpartitions.
Intermediate result
+-----------------------------------------+
| +----------------+ | +-----------------------+
+-------+ | +-------------+ +=> | Subpartition 1 | | <=======+=== | Input Gate | Reduce 1 |
| Map 1 | ==> | | Partition 1 | =| +----------------+ | | +-----------------------+
+-------+ | +-------------+ +=> | Subpartition 2 | | <==+ |
| +----------------+ | | | Subpartition request
| | | |
| +----------------+ | | |
+-------+ | +-------------+ +=> | Subpartition 1 | | <==+====+
| Map 2 | ==> | | Partition 2 | =| +----------------+ | | +-----------------------+
+-------+ | +-------------+ +=> | Subpartition 2 | | <==+======== | Input Gate | Reduce 2 |
| +----------------+ | +-----------------------+
+-----------------------------------------+
In the above example, two map subtasks produce the intermediate result in parallel, resulting in two partitions (Partition 1 and 2). Each of these partitions is further partitioned into two subpartitions -- one for each parallel reduce subtask.
InputGate.InputWithData<INPUT,DATA>
PullingAsyncDataInput.EndOfDataStatus
AvailabilityProvider.AvailabilityHelper
availabilityHelper, priorityAvailabilityHelper
AVAILABLE
Constructor and Description |
---|
SingleInputGate(String owningTaskName,
int gateIndex,
IntermediateDataSetID consumedResultId,
ResultPartitionType consumedPartitionType,
int numberOfInputChannels,
PartitionProducerStateProvider partitionProducerStateProvider,
SupplierWithException<BufferPool,IOException> bufferPoolFactory,
BufferDecompressor bufferDecompressor,
MemorySegmentProvider memorySegmentProvider,
int segmentSize,
ThroughputCalculator throughputCalculator,
BufferDebloater bufferDebloater) |
blockConsumption, checkpointStarted, checkpointStopped, convertToPriorityEvent, getInputGateIndex
getAvailableFuture, getChannelInfos, getPriorityEventAvailableFuture, setChannelStateWriter
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getChannelInfos
and, isApproximatelyAvailable, isAvailable, or
public SingleInputGate(String owningTaskName, int gateIndex, IntermediateDataSetID consumedResultId, ResultPartitionType consumedPartitionType, int numberOfInputChannels, PartitionProducerStateProvider partitionProducerStateProvider, SupplierWithException<BufferPool,IOException> bufferPoolFactory, @Nullable BufferDecompressor bufferDecompressor, MemorySegmentProvider memorySegmentProvider, int segmentSize, ThroughputCalculator throughputCalculator, @Nullable BufferDebloater bufferDebloater)
protected PrioritizedDeque<InputChannel> getInputChannelsWithData()
public void setup() throws IOException
InputGate
setup
in class InputGate
IOException
public CompletableFuture<Void> getStateConsumedFuture()
getStateConsumedFuture
in class InputGate
public void requestPartitions()
requestPartitions
in class InputGate
@VisibleForTesting public void convertRecoveredInputChannels()
public void finishReadRecoveredState() throws IOException
finishReadRecoveredState
in class InputGate
IOException
public int getNumberOfInputChannels()
getNumberOfInputChannels
in interface CheckpointableInput
getNumberOfInputChannels
in class InputGate
public int getGateIndex()
IndexedInputGate
getGateIndex
in class IndexedInputGate
public List<InputChannelInfo> getUnfinishedChannels()
IndexedInputGate
getUnfinishedChannels
in class IndexedInputGate
@VisibleForTesting public void announceBufferSize(int newBufferSize)
public void triggerDebloating()
triggerDebloating
in class IndexedInputGate
public Duration getLastEstimatedTimeToConsume()
public ResultPartitionType getConsumedPartitionType()
public BufferPool getBufferPool()
public String getOwningTaskName()
public int getNumberOfQueuedBuffers()
public long getSizeOfQueuedBuffers()
public CompletableFuture<Void> getCloseFuture()
public InputChannel getChannel(int channelIndex)
InputGate
getChannel
in class InputGate
public void setBufferPool(BufferPool bufferPool)
@VisibleForTesting public void setupChannels() throws IOException
IOException
public void setInputChannels(InputChannel... channels)
public void setTieredStorageService(List<TieredStorageConsumerSpec> tieredStorageConsumerSpecs, TieredStorageConsumerClient client, TieredStorageNettyServiceImpl nettyService)
public void updateInputChannel(ResourceID localLocation, NettyShuffleDescriptor shuffleDescriptor) throws IOException, InterruptedException
IOException
InterruptedException
public void retriggerPartitionRequest(IntermediateResultPartitionID partitionId, InputChannelInfo inputChannelInfo) throws IOException
IOException
public void close() throws IOException
IOException
public boolean isFinished()
isFinished
in interface PullingAsyncDataInput<BufferOrEvent>
isFinished
in class InputGate
public PullingAsyncDataInput.EndOfDataStatus hasReceivedEndOfData()
PullingAsyncDataInput
Moreover it tells us the reason why there is no more data incoming. If any of the upstream
subtasks finished because of the stop-with-savepoint --no-drain, we should not drain the
input. See also StopMode
.
public Optional<BufferOrEvent> getNext() throws IOException, InterruptedException
InputGate
BufferOrEvent
.
Note: It should be guaranteed that the previous returned buffer has been recycled before getting next one.
getNext
in class InputGate
Optional.empty()
if InputGate.isFinished()
returns true.IOException
InterruptedException
public Optional<BufferOrEvent> pollNext() throws IOException, InterruptedException
InputGate
BufferOrEvent
.
Note: It should be guaranteed that the previous returned buffer has been recycled before polling next one.
pollNext
in interface PullingAsyncDataInput<BufferOrEvent>
pollNext
in class InputGate
Optional.empty()
if there is no data to return or if InputGate.isFinished()
returns true.IOException
InterruptedException
public void sendTaskEvent(TaskEvent event) throws IOException
sendTaskEvent
in class InputGate
IOException
public void resumeConsumption(InputChannelInfo channelInfo) throws IOException
resumeConsumption
in interface CheckpointableInput
resumeConsumption
in class InputGate
IOException
public void acknowledgeAllRecordsProcessed(InputChannelInfo channelInfo) throws IOException
acknowledgeAllRecordsProcessed
in class InputGate
IOException
@VisibleForTesting public Map<Tuple2<IntermediateResultPartitionID,InputChannelInfo>,InputChannel> getInputChannels()
public Iterable<InputChannel> inputChannels()
Copyright © 2014–2024 The Apache Software Foundation. All rights reserved.