Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

FLIP-379 introduces dynamic source parallelism inference, which, compared to static inference, utilizes runtime information to more accurately determine the source parallelism. The FileSource already possesses the capability for dynamic parallelism inference. As a follow-up task to FLIP-379, this FLIP plans to implement the dynamic parallelism inference interface for HiveSource, and also switches the default static parallelism inference to dynamic parallelism inference.

...

Code Block
languagejava
themeEclipse
titleTABLE_EXEC_HIVE_INFER_SOURCE_PARALLELISM_MODE
public static final ConfigOption<InferMode> TABLE_EXEC_HIVE_INFER_SOURCE_PARALLELISM_MODE =
           ConfigOptions.key("table.exec.hive.infer-source-parallelism.mode")
                   .enumType(InferMode.class)
                   .defaultValue(InferMode.DYNAMIC)
                   .withDescription(
                     "An option for selecting the hive source parallelism
                     inference mode: 'static' denotes static inference, where 
                     flink will determine source parallelism at plan
  job creation stage; 
                   generation time; 'dynamic' represents dynamic inference,
 which will decide 
                  which will determine parallelism at runtimejob execution dynamicallystage.
 In terms of functionality, 
                 In terms of functionality, the static mode is a subset
                     of the dynamic mode.
                     Note: it only works when the value of option 
                     'table.exec.hive.infer-source-parallelism.enabled' is 
                     true.");

...

After introducing this FLIP, the behavior changes are as follows:

  1. The default hive source parallelism inference mode will change to dynamic inference.
  2. Upon enabling dynamic inference mode, the logic for applying the upper bound of parallelism inference will change. In static inference mode, hive source takes the value of `table.exec.hive.infer-source-parallelism.max` as the upper bound for inference, if it is not set, the config option's default value 1024 will be used. However, in dynamic inference mode, if the user explicitly configures `table.exec.hive.infer-source-parallelism.max`, we will still use the user-configured value as the upper bound for parallelism inference. Otherwise, we will use `execution.batch.adaptive.auto-parallelism.default-source-parallelism` as the upper bound for parallelism inference. If neither of these configuration items is set, the upper bound for parallelism inference will follow the existing adaptive batch scheduler logic, falling back to `execution.batch.adaptive.auto-parallelism.max-parallelism` or `parallelism.default`. 

...

  1. Include optimizations of currently available in static parallelism inference (e.g. PartitionPushDown, LimitPushDown, etc.).     
  2. When dynamic partition pruning optimization is present, it should be able to calibrate parallelism based on the dynamically filtered dynamic  partition pruning information.


Currently, the logic for hive parallelism inference is primarily implemented in the HiveParallelismInference. Dynamic parallelism inference will also be based on the HiveParallelismInference to maximize the reuse of existing code logic. Additionally, the following logic needs to be added to the HiveParallelismInference:

  1. Add logic to evaluate the setting of `table.exec.hive.infer-source-parallelism.mode` and choose the appropriate inference mode accordingly.
  2. Determine the upper bound for parallelism inference under dynamic inference mode, as detailed in [Public Interfaces | Behavior Change].

...

Compatibility, Deprecation, and Migration Plan

A new configuration item `table.exec.hive.infer-source-parallelism.mode` will be introduced to distinguish between the static and dynamic modes. After this FLIP, users can still revert to static inference by setting `table.exec.hive.infer-source-parallelism.mode` to static, or they can disable parallelism inference altogether by using `table.exec.hive.infer-source-parallelism.enabled`.

Due to the non-compliance of the configuration item `table.exec.hive.infer-source-parallelism` with YAML standard specifications, a new configuration item with YAML standard specifications, a new configuration `table.exec.hive.infer-source-parallelism.enabled` will be introduced as a replacement. The old configuration will be marked as deprecated.

...