pentaho/pentaho-kettle · error · KettleException

No master server was specified in cluster schema [" +…

Error message

No master server was specified in cluster schema [" + clusterSchema + "]

What it means

TransSplitter.checkClusterConfiguration() iterates every cluster schema used by the transformation and throws KettleException 'No master server was specified in cluster schema [<schema>]' when clusterSchema.findMaster() returns null. Unlike error 1226 (dynamic resolution at split time), this is the upfront validation of static cluster configuration.

Solutions

  1. Designate exactly one master server in the cluster schema (SlaveServer.setMaster(true) or the master checkbox in Spoon).
  2. Re-check the cluster schema used by the transformation's clustered steps and re-save the metadata.
  3. Run checkClusterConfiguration() in a pre-flight validation before cluster submission to fail fast.
  4. If the environment has no master (e.g. testing), switch to local/standalone execution instead of clustering.

Example fix

// before
ClusterSchema cs = new ClusterSchema("cs1", Arrays.asList(slaveA, slaveB), socketsBuf);
// after
slaveA.setMaster(true);
ClusterSchema cs = new ClusterSchema("cs1", Arrays.asList(slaveA, slaveB), socketsBuf);
Defensive patterns

Strategy: validation

Validate before calling

for (ClusterSchema cs : usedClusterSchemas) {
  if (cs.findMaster() == null)
    throw new IllegalStateException("Cluster schema '" + cs.getName() + "' has no master server");
}

Try / catch

try {
  splitter.splitOriginalTransformation();
} catch (KettleException e) {
  if (e.getMessage().startsWith("No master server was specified")) {
    // fix cluster schema, then retry
  }
}

Prevention

When it happens

Trigger: checkClusterConfiguration(), invoked from splitOriginalTransformation(), encountering a (non-empty) ClusterSchema in the transformation whose slave-server list has no server with isMaster()==true.

Common situations: Creating a cluster schema and adding only slave servers; forgetting to designate a master after editing cluster members; schema referenced by steps but configured with stale/removed master entry.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/5ed5515bbba9974b. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/cluster/TransSplitter.java:181

   *          the originalTransformation to set
   */
  public void setOriginalTransformation( TransMeta originalTransformation ) {
    this.originalTransformation = originalTransformation;
  }

  private void checkClusterConfiguration() throws KettleException {
    Map<String, ClusterSchema> map = new Hashtable<String, ClusterSchema>();
    List<StepMeta> steps = originalTransformation.getSteps();
    for ( int i = 0; i < steps.size(); i++ ) {
      StepMeta step = steps.get( i );
      ClusterSchema clusterSchema = step.getClusterSchema();
      if ( clusterSchema != null ) {
        map.put( clusterSchema.getName(), clusterSchema );

        // Make sure we have at least one master to work with.
        //
        if ( clusterSchema.findMaster() == null ) {
          throw new KettleException( "No master server was specified in cluster schema [" + clusterSchema + "]" );
        }

        // Remember cluster details while we have the cluster handy
        //
        socketsBufferSize =
          Const.toInt(
            originalTransformation.environmentSubstitute( clusterSchema.getSocketsBufferSize() ), 50000 );
        compressingSocketStreams = clusterSchema.isSocketsCompressed();

        // Validate the number of slaves. We need at least one to have a valid cluster
        //
        List<SlaveServer> slaves = clusterSchema.getSlaveServersFromMasterOrLocal();
        int count = 0;
        for ( int s = 0; s < slaves.size(); s++ ) {
          if ( !slaves.get( s ).isMaster() ) {
            count++;
          }
        }

View on GitHub (pinned to f3058517a1)