apache/seatunnel · error · IllegalArgumentException

SeaTunnel job on st-engine submitted target only support the

Error message

SeaTunnel job on st-engine submitted target only support these options: [local, cluster]

What it means

SeaTunnelMasterTargetConverter.convert() throws this IllegalArgumentException when the --master value maps to a MasterType that is not in the whitelist [local, cluster]. The MasterType enum may contain more values (e.g. other deploy targets), but st-engine submission accepts only these two.

Source

Thrown at seatunnel-core/seatunnel-starter/src/main/java/org/apache/seatunnel/core/starter/seatunnel/args/ClientCommandArgs.java:338

            }
        }
    }

    public static class SeaTunnelMasterTargetConverter implements IStringConverter<MasterType> {
        private static final List<MasterType> MASTER_TYPE_LIST = new ArrayList<>();

        static {
            MASTER_TYPE_LIST.add(MasterType.LOCAL);
            MASTER_TYPE_LIST.add(MasterType.CLUSTER);
        }

        @Override
        public MasterType convert(String value) {
            MasterType masterType = MasterType.valueOf(value.toUpperCase());
            if (MASTER_TYPE_LIST.contains(masterType)) {
                return masterType;
            } else {
                throw new IllegalArgumentException(
                        "SeaTunnel job on st-engine submitted target only "
                                + "support these options: [local, cluster]");
            }
        }
    }

    @Slf4j
    public static class MasterTypeValidator implements IParameterValidator {
        @Override
        public void validate(String name, String value) throws ParameterException {
            if (name.equals("-e") || name.equals("--deploy-mode")) {
                log.warn(
                        "\n******************************************************************************************"
                                + "\n-e and --deploy-mode deprecated in 2.3.1, please use -m and --master instead of it"
                                + "\n******************************************************************************************");
            }
        }
    }

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Use --master local or --master cluster
  2. Remove --master if the default (client/cluster per your setup) is acceptable
  3. Validate the value against [local, cluster] before invoking the CLI

Example fix

// before
--master yarn
// after
--master cluster
Defensive patterns

Strategy: validation

Validate before calling

const master = value.toUpperCase();
if (master !== 'LOCAL' && master !== 'CLUSTER') {
  throw new Error(`st-engine --master supports only local|cluster, got: ${value}`);
}

Type guard

const isZetaMaster = (v) => ['local','cluster'].includes(String(v).toLowerCase());

Try / catch

try {
  seatunnel.run(args);
} catch (IllegalArgumentException e) {
  if (e.getMessage().contains('[local, cluster]')) {
    args.set('--master', 'cluster');
  }
}

Prevention

When it happens

Trigger: Running `--master standalone`, `--master k8s`, or any value that uppercases to a valid MasterType outside the whitelist; also `--master` with a value not in the enum at all (which fails earlier in valueOf with a different message).

Common situations: Copying Flink/Spark deploy-mode values (yarn, k8s) into a Zeta/st-engine command; confusing st-engine's master options with those of other engines.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/4218fbeed4ea321e. Report an issue: GitHub.