Search in sources :

Example 6 with Output

use of org.apache.flink.streaming.api.operators.Output in project flink by apache.

the class OperatorChain method createOutputCollector.

private <T> WatermarkGaugeExposingOutput<StreamRecord<T>> createOutputCollector(StreamTask<?, ?> containingTask, StreamConfig operatorConfig, Map<Integer, StreamConfig> chainedConfigs, ClassLoader userCodeClassloader, Map<StreamEdge, RecordWriterOutput<?>> streamOutputs, List<StreamOperatorWrapper<?, ?>> allOperatorWrappers, MailboxExecutorFactory mailboxExecutorFactory) {
    List<Tuple2<WatermarkGaugeExposingOutput<StreamRecord<T>>, StreamEdge>> allOutputs = new ArrayList<>(4);
    // create collectors for the network outputs
    for (StreamEdge outputEdge : operatorConfig.getNonChainedOutputs(userCodeClassloader)) {
        @SuppressWarnings("unchecked") RecordWriterOutput<T> output = (RecordWriterOutput<T>) streamOutputs.get(outputEdge);
        allOutputs.add(new Tuple2<>(output, outputEdge));
    }
    // Create collectors for the chained outputs
    for (StreamEdge outputEdge : operatorConfig.getChainedOutputs(userCodeClassloader)) {
        int outputId = outputEdge.getTargetId();
        StreamConfig chainedOpConfig = chainedConfigs.get(outputId);
        WatermarkGaugeExposingOutput<StreamRecord<T>> output = createOperatorChain(containingTask, chainedOpConfig, chainedConfigs, userCodeClassloader, streamOutputs, allOperatorWrappers, outputEdge.getOutputTag(), mailboxExecutorFactory);
        allOutputs.add(new Tuple2<>(output, outputEdge));
    }
    if (allOutputs.size() == 1) {
        return allOutputs.get(0).f0;
    } else {
        // send to N outputs. Note that this includes the special case
        // of sending to zero outputs
        @SuppressWarnings({ "unchecked" }) Output<StreamRecord<T>>[] asArray = new Output[allOutputs.size()];
        for (int i = 0; i < allOutputs.size(); i++) {
            asArray[i] = allOutputs.get(i).f0;
        }
        // otherwise multi-chaining would not work correctly.
        if (containingTask.getExecutionConfig().isObjectReuseEnabled()) {
            return closer.register(new CopyingBroadcastingOutputCollector<>(asArray));
        } else {
            return closer.register(new BroadcastingOutputCollector<>(asArray));
        }
    }
}
Also used : StreamRecord(org.apache.flink.streaming.runtime.streamrecord.StreamRecord) ArrayList(java.util.ArrayList) StreamEdge(org.apache.flink.streaming.api.graph.StreamEdge) StreamConfig(org.apache.flink.streaming.api.graph.StreamConfig) RecordWriterOutput(org.apache.flink.streaming.runtime.io.RecordWriterOutput) Tuple2(org.apache.flink.api.java.tuple.Tuple2) RecordWriterOutput(org.apache.flink.streaming.runtime.io.RecordWriterOutput) Output(org.apache.flink.streaming.api.operators.Output)

Example 7 with Output

use of org.apache.flink.streaming.api.operators.Output in project flink by apache.

the class MultipleInputStreamOperatorBase method createAllOperators.

/**
 * Create all sub-operators by corresponding operator factory in a multiple input operator from
 * <b>tail to head</b>.
 */
@SuppressWarnings("unchecked")
private void createAllOperators(StreamOperatorParameters<RowData> parameters) {
    final boolean isObjectReuseEnabled = parameters.getContainingTask().getExecutionConfig().isObjectReuseEnabled();
    final ExecutionConfig executionConfig = parameters.getContainingTask().getExecutionConfig();
    final Iterator<TableOperatorWrapper<?>> it = topologicalOrderingOperators.descendingIterator();
    while (it.hasNext()) {
        final TableOperatorWrapper<?> wrapper = it.next();
        final Output<StreamRecord<RowData>> output;
        if (wrapper == this.tailWrapper) {
            output = this.output;
        } else {
            final int numberOfOutputs = wrapper.getOutputEdges().size();
            final Output<StreamRecord<RowData>>[] outputs = new Output[numberOfOutputs];
            for (int i = 0; i < numberOfOutputs; ++i) {
                TableOperatorWrapper.Edge edge = wrapper.getOutputEdges().get(i);
                int inputId = edge.getInputId();
                StreamOperator<RowData> outputOperator = edge.getTarget().getStreamOperator();
                if (isObjectReuseEnabled) {
                    outputs[i] = createOutput(outputOperator, inputId);
                } else {
                    // the source's output type info is equal to the target's type info for the
                    // corresponding index
                    TypeSerializer<RowData> serializer = (TypeSerializer<RowData>) edge.getSource().getOutputType().createSerializer(executionConfig);
                    outputs[i] = createCopyingOutput(serializer, outputOperator, inputId);
                }
            }
            if (outputs.length == 1) {
                output = outputs[0];
            } else {
                // Because user's operator may change the record passed to it.
                if (isObjectReuseEnabled) {
                    output = new CopyingBroadcastingOutput(outputs);
                } else {
                    output = new BroadcastingOutput(outputs);
                }
            }
        }
        final StreamOperatorParameters<RowData> newParameters = createSubOperatorParameters(parameters, output, wrapper);
        wrapper.createOperator(newParameters);
    }
}
Also used : StreamRecord(org.apache.flink.streaming.runtime.streamrecord.StreamRecord) ExecutionConfig(org.apache.flink.api.common.ExecutionConfig) BroadcastingOutput(org.apache.flink.table.runtime.operators.multipleinput.output.BroadcastingOutput) CopyingBroadcastingOutput(org.apache.flink.table.runtime.operators.multipleinput.output.CopyingBroadcastingOutput) RowData(org.apache.flink.table.data.RowData) CopyingBroadcastingOutput(org.apache.flink.table.runtime.operators.multipleinput.output.CopyingBroadcastingOutput) OneInputStreamOperatorOutput(org.apache.flink.table.runtime.operators.multipleinput.output.OneInputStreamOperatorOutput) BroadcastingOutput(org.apache.flink.table.runtime.operators.multipleinput.output.BroadcastingOutput) Output(org.apache.flink.streaming.api.operators.Output) CopyingSecondInputOfTwoInputStreamOperatorOutput(org.apache.flink.table.runtime.operators.multipleinput.output.CopyingSecondInputOfTwoInputStreamOperatorOutput) CopyingOneInputStreamOperatorOutput(org.apache.flink.table.runtime.operators.multipleinput.output.CopyingOneInputStreamOperatorOutput) FirstInputOfTwoInputStreamOperatorOutput(org.apache.flink.table.runtime.operators.multipleinput.output.FirstInputOfTwoInputStreamOperatorOutput) CopyingFirstInputOfTwoInputStreamOperatorOutput(org.apache.flink.table.runtime.operators.multipleinput.output.CopyingFirstInputOfTwoInputStreamOperatorOutput) CopyingBroadcastingOutput(org.apache.flink.table.runtime.operators.multipleinput.output.CopyingBroadcastingOutput) SecondInputOfTwoInputStreamOperatorOutput(org.apache.flink.table.runtime.operators.multipleinput.output.SecondInputOfTwoInputStreamOperatorOutput) TypeSerializer(org.apache.flink.api.common.typeutils.TypeSerializer)

Aggregations

Output (org.apache.flink.streaming.api.operators.Output)7 StreamRecord (org.apache.flink.streaming.runtime.streamrecord.StreamRecord)5 StreamConfig (org.apache.flink.streaming.api.graph.StreamConfig)4 ArrayList (java.util.ArrayList)3 Collection (java.util.Collection)3 HashMap (java.util.HashMap)3 AbstractTest (org.apache.flink.storm.util.AbstractTest)3 Test (org.junit.Test)3 Tuple2 (org.apache.flink.api.java.tuple.Tuple2)2 StreamEdge (org.apache.flink.streaming.api.graph.StreamEdge)2 RecordWriterOutput (org.apache.flink.streaming.runtime.io.RecordWriterOutput)2 SuppressFBWarnings (edu.umd.cs.findbugs.annotations.SuppressFBWarnings)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 OutputStream (java.io.OutputStream)1 Serializable (java.io.Serializable)1 ByteBuffer (java.nio.ByteBuffer)1 HashSet (java.util.HashSet)1 Iterator (java.util.Iterator)1 LinkedHashMap (java.util.LinkedHashMap)1