apache/seatunnel · error · IllegalArgumentException

SeaTunnel job on flink engine submitted target only support…

Error message

SeaTunnel job on flink engine submitted target only support these options: [local, remote, yarn-session, yarn-per-job, kubernetes-session, yarn-application, kubernetes-application]

What it means

IllegalArgumentException thrown by FlinkCommandArgs' MasterTypeConverter.convert when the -m/--master (deploy target) CLI argument is not one of the supported Flink master types. The converter parses the value into the MasterType enum and then checks membership in MASTER_TYPE_LIST before accepting it.

Solutions

  1. Pass one of: local, remote, yarn-session, yarn-per-job, kubernetes-session, yarn-application, kubernetes-application
  2. Check `--help` output of the Flink client for accepted -m values
  3. Replace dashes with the documented spelling (conversion also tolerates dashes, e.g. yarn-per-job)

Example fix

# before
--master yarn-standalone
# after
--master yarn-session
Defensive patterns

Strategy: validation

Validate before calling

Set<String> allowed = Set.of("local","remote","yarn-session","yarn-per-job","kubernetes-session","yarn-application","kubernetes-application");
if (!allowed.contains(masterArg)) {
    throw new IllegalArgumentException("Unsupported --master: " + masterArg);
}

Try / catch

try {
    args = FlinkCommandArgsBuilder.build(rawArgs);
} catch (IllegalArgumentException e) {
    System.err.println("Invalid --master: " + e.getMessage());
}

Prevention

When it happens

Trigger: Running the Flink starter client with an unsupported master value, e.g. `seatunnel.sh --master local2` or `-m kubernetes` (instead of kubernetes-session/application); valueOf succeeds after dash normalization but the membership check fails.

Common situations: Typo in the master argument; copying Spark-style targets (e.g. yarn-standalone) to Flink; forgetting that Flink accepts session/application variants only.

Understand the failure class

Background: "Unknown argument", "Invalid value", and "must be one of": invalid CLI argument errors explained — this error's family across 35 libraries.

Related errors


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

Appendix: source

Thrown at seatunnel-core/seatunnel-flink-starter/seatunnel-flink-starter-common/src/main/java/org/apache/seatunnel/core/starter/flink/args/FlinkCommandArgs.java:110

        private static final List<MasterType> MASTER_TYPE_LIST = new ArrayList<>();

        static {
            MASTER_TYPE_LIST.add(MasterType.LOCAL);
            MASTER_TYPE_LIST.add(MasterType.REMOTE);
            MASTER_TYPE_LIST.add(MasterType.YARN_SESSION);
            MASTER_TYPE_LIST.add(MasterType.YARN_PER_JOB);
            MASTER_TYPE_LIST.add(MasterType.KUBERNETES_SESSION);
            MASTER_TYPE_LIST.add(MasterType.YARN_APPLICATION);
            MASTER_TYPE_LIST.add(MasterType.KUBERNETES_APPLICATION);
        }

        @Override
        public MasterType convert(String value) {
            MasterType masterType = MasterType.valueOf(value.toUpperCase().replaceAll("-", "_"));
            if (MASTER_TYPE_LIST.contains(masterType)) {
                return masterType;
            } else {
                throw new IllegalArgumentException(
                        "SeaTunnel job on flink engine submitted target only "
                                + "support these options: [local, remote, yarn-session, yarn-per-job, kubernetes-session, "
                                + "yarn-application, kubernetes-application]");
            }
        }
    }

    public static class FlinkDeployModeConverter implements IStringConverter<DeployMode> {
        private static final List<DeployMode> DEPLOY_MODE_TYPE_LIST = new ArrayList<>();

        static {
            DEPLOY_MODE_TYPE_LIST.add(DeployMode.RUN);
            DEPLOY_MODE_TYPE_LIST.add(DeployMode.RUN_APPLICATION);
        }

        @Override
        public DeployMode convert(String value) {
            DeployMode deployMode = DeployMode.valueOf(value.toUpperCase().replaceAll("-", "_"));

View on GitHub (pinned to cf67b549a7)