Source code for pyflink.common.execution_mode

################################################################################
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
# limitations under the License.
################################################################################
from pyflink.java_gateway import get_gateway

__all__ = ['ExecutionMode']


[docs]class ExecutionMode(object): """ The execution mode specifies how a batch program is executed in terms of data exchange: pipelining or batched. :data:`PIPELINED`: Executes the program in a pipelined fashion (including shuffles and broadcasts), except for data exchanges that are susceptible to deadlocks when pipelining. These data exchanges are performed in a batch manner. An example of situations that are susceptible to deadlocks (when executed in a pipelined manner) are data flows that branch (one data set consumed by multiple operations) and re-join later. :data:`PIPELINED_FORCED`: Executes the program in a pipelined fashion (including shuffles and broadcasts), **including** data exchanges that are susceptible to deadlocks when executed via pipelining. Usually, PIPELINED is the preferable option, which pipelines most data exchanges and only uses batch data exchanges in situations that are susceptible to deadlocks. This option should only be used with care and only in situations where the programmer is sure that the program is safe for full pipelining and that Flink was too conservative when choosing the batch exchange at a certain point. :data:`BATCH`: This mode executes all shuffles and broadcasts in a batch fashion, while pipelining data between operations that exchange data only locally between one producer and one consumer. :data:`BATCH_FORCED`: This mode executes the program in a strict batch way, including all points where data is forwarded locally from one producer to one consumer. This mode is typically more expensive to execute than the BATCH mode. It does guarantee that no successive operations are ever executed concurrently. """ PIPELINED = 0 PIPELINED_FORCED = 1 BATCH = 2 BATCH_FORCED = 3 @staticmethod def _from_j_execution_mode(j_execution_mode): gateway = get_gateway() JExecutionMode = gateway.jvm.org.apache.flink.api.common.ExecutionMode if j_execution_mode == JExecutionMode.PIPELINED: return ExecutionMode.PIPELINED elif j_execution_mode == JExecutionMode.PIPELINED_FORCED: return ExecutionMode.PIPELINED_FORCED elif j_execution_mode == JExecutionMode.BATCH: return ExecutionMode.BATCH elif j_execution_mode == JExecutionMode.BATCH_FORCED: return ExecutionMode.BATCH_FORCED else: raise Exception("Unsupported java exection mode: %s" % j_execution_mode) @staticmethod def _to_j_execution_mode(execution_mode): gateway = get_gateway() JExecutionMode = gateway.jvm.org.apache.flink.api.common.ExecutionMode if execution_mode == ExecutionMode.PIPELINED: return JExecutionMode.PIPELINED elif execution_mode == ExecutionMode.PIPELINED_FORCED: return JExecutionMode.PIPELINED_FORCED elif execution_mode == ExecutionMode.BATCH: return JExecutionMode.BATCH elif execution_mode == ExecutionMode.BATCH_FORCED: return JExecutionMode.BATCH_FORCED else: raise TypeError("Unsupported execution mode: %s, supported execution modes are: " "ExecutionMode.PIPELINED, ExecutionMode.PIPELINED_FORCED, " "ExecutionMode.BATCH and ExecutionMode.BATCH_FORCED." % execution_mode)