public final PipeProcessor getConfiguredProcessor(
      String pipeProcessorName,
      PipeParameters processorParameters,
      PipeProcessorRuntimeConfiguration runtimeConfigurations) {
    final HashMap<String, String> processorKeyMap = new HashMap<>();
    if (Objects.nonNull(pipeProcessorName)) {
      processorKeyMap.put(PipeProcessorConstant.PROCESSOR_KEY, pipeProcessorName);
    }
    final PipeParameters replacedParameters =
        processorParameters.addOrReplaceEquivalentAttributesWithClone(
            new PipeParameters(processorKeyMap));
    final PipeProcessor processor = reflectProcessor(replacedParameters);
    // Validate and customize should be called to expose exceptions in advance
    // and configure the processor.
    try {
      processor.validate(new PipeParameterValidator(replacedParameters));
      processor.customize(replacedParameters, runtimeConfigurations);
      return processor;
    } catch (Exception e) {
      try {
        processor.close();
      } catch (Exception closeException) {
        LOGGER.warn(
            "Failed to close processor after failed to initialize processor. "
                + "Ignore this exception.",
            closeException);
      }
      throw new PipeException(e.getMessage(), e);
    }
  }
Use the pipeProcessorName, {@link PipeParameters} and {@link PipeProcessorRuntimeConfiguration}
to construct a fully prepared {@link PipeProcessor}. Note that the {@link PipeParameters} with
the processor's name will be used to validate and customize the {@link PipeProcessor}
regardless of its original processor name k-v pair, yet the original {@link PipeParameters} is
left unchanged.

@param pipeProcessorName the processor's pluginName
@param processorParameters the parameters
@param runtimeConfigurations the runtimeConfigurations
@return the customized {@link PipeProcessor}
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/agent/plugin/PipePluginAgent.java