{"record":{"id":"c0ccd5e289d44781","repo":"apache/hadoop","slug":"unknown-committer-s","errorCode":null,"errorMessage":"Unknown committer: \"%s\"","messagePattern":"Unknown committer: \"(.+?)\"","errorType":"exception","errorClass":"PathCommitException","httpStatus":null,"severity":"error","filePath":"hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/commit/S3ACommitterFactory.java","lineNumber":139,"sourceCode":"    switch (name) {\n    case COMMITTER_NAME_FILE:\n    case \"\":\n      factory = null;\n      break;\n    case COMMITTER_NAME_DIRECTORY:\n      factory = new DirectoryStagingCommitterFactory();\n      break;\n    case COMMITTER_NAME_PARTITIONED:\n      factory = new PartitionedStagingCommitterFactory();\n      break;\n    case COMMITTER_NAME_MAGIC:\n      factory = new MagicS3GuardCommitterFactory();\n      break;\n    case InternalCommitterConstants.COMMITTER_NAME_STAGING:\n      factory = new StagingCommitterFactory();\n      break;\n    default:\n      throw new PathCommitException(outputPath,\n          \"Unknown committer: \\\"\" + name + \"\\\"\");\n    }\n    return factory;\n  }\n}\n","sourceCodeStart":121,"sourceCodeEnd":145,"githubUrl":"https://github.com/apache/hadoop/blob/2add9630210752f88ceb1bb74eb65e37bf41da8e/hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/commit/S3ACommitterFactory.java#L121-L145","documentation":"PathCommitException from S3ACommitterFactory when the configured committer name does not match any of the four factories: directory, partitioned, magic, or staging. The factory switch maps each name to a specific committer factory class, and any other token falls through to the default branch. The name is matched case-sensitively after trimming, so spelling must be exact.","triggerScenarios":"S3ACommitterFactory.createCommitter (invoked from the committer framework during job or task setup) with fs.s3a.committer.name set to an unknown value such as 'files', 'mutation', 'newStaging' or an empty string.","commonSituations":"Copy-pasted documentation examples with wrong names; setting the old experimental name instead of the released one; Spark jobs setting spark.hadoop.fs.s3a.committer.name to a value not supported by the hadoop-aws version in use; name left empty after a config migration.","solutions":["Set fs.s3a.committer.name to one of: directory, partitioned, magic, staging","Double-check spelling and case (lowercase, no quotes, no whitespace)","Verify the value on the actually-running job config (print conf.get(\"fs.s3a.committer.name\") or check the job XML) rather than only the source file"],"exampleFix":"# before\nspark.hadoop.fs.s3a.committer.name=Staging\n\n# after\nspark.hadoop.fs.s3a.committer.name=staging","handlingStrategy":"validation","validationCode":"Set<String> valid = new HashSet<>(Arrays.asList(\n    \"directory\", \"partitioned\", \"magic\", \"staging\"));\nString name = conf.getTrimmed(\"fs.s3a.committer.name\");\nif (!valid.contains(name)) {\n  throw new IOException(\"Invalid fs.s3a.committer.name='\" + name\n      + \"'; valid: \" + valid);\n}","typeGuard":null,"tryCatchPattern":"try {\n  OutputCommitter committer = S3ACommitterFactory.createCommitter(factoryConf, outputPath);\n} catch (PathCommitException e) {\n  // unknown committer name: check the job's effective config and resubmit\n  LOG.error(\"fs.s3a.committer.name invalid: {}\", e.getMessage(), e);\n}","preventionTips":["Centralize the committer name in one templated config value instead of repeating it per job","Validate fs.s3a.committer.name in job-submission tooling before the cluster spins up","After upgrading hadoop-aws, re-check the supported committer names for the new version"],"tags":["s3a","committer","configuration","factory"],"backgroundTag":"invalid-configuration-value","analyzedSha":"2add9630210752f88ceb1bb74eb65e37bf41da8e","analyzedAt":"2026-08-22T19:55:07.957Z","schemaVersion":2},"datasetVersion":"2026-08-22T20:17:22.307Z"}