apache/hadoop · error · IOException

fetcher cannot be authenticated

Error message

fetcher cannot be authenticated

What it means

Error "fetcher cannot be authenticated" thrown in apache/hadoop.

Source

Thrown at hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-shuffle/src/main/java/org/apache/hadoop/mapred/ShuffleChannelHandler.java:461

    }
  }

  protected void verifyRequest(String appid, ChannelHandlerContext ctx,
                               HttpRequest request, HttpResponse response, URL requestUri)
      throws IOException {
    SecretKey tokenSecret = handlerCtx.secretManager.retrieveTokenSecret(appid);
    if (null == tokenSecret) {
      LOG.info("Request for unknown token {}, channel id: {}", appid, ctx.channel().id());
      throw new IOException("Could not find jobid");
    }
    // encrypting URL
    String encryptedURL = SecureShuffleUtils.buildMsgFrom(requestUri);
    // hash from the fetcher
    String urlHashStr =
        request.headers().get(SecureShuffleUtils.HTTP_HEADER_URL_HASH);
    if (urlHashStr == null) {
      LOG.info("Missing header hash for {}, channel id: {}", appid, ctx.channel().id());
      throw new IOException("fetcher cannot be authenticated");
    }
    if (LOG.isDebugEnabled()) {
      int len = urlHashStr.length();
      LOG.debug("Verifying request. encryptedURL:{}, hash:{}, channel id: " +
              "{}", encryptedURL,
          urlHashStr.substring(len - len / 2, len - 1), ctx.channel().id());
    }
    // verify - throws exception
    SecureShuffleUtils.verifyReply(urlHashStr, encryptedURL, tokenSecret);
    // verification passed - encode the reply
    String reply = SecureShuffleUtils.generateHash(urlHashStr.getBytes(StandardCharsets.UTF_8),
        tokenSecret);
    response.headers().set(
        SecureShuffleUtils.HTTP_HEADER_REPLY_URL_HASH, reply);
    // Put shuffle version into http header
    response.headers().set(ShuffleHeader.HTTP_HEADER_NAME,
        ShuffleHeader.DEFAULT_HTTP_HEADER_NAME);
    response.headers().set(ShuffleHeader.HTTP_HEADER_VERSION,

View on GitHub (pinned to 2add963021)

Solutions

  1. Ensure the fetcher presents a valid shuffle secret/token: enable security consistently (hadoop.security.authentication) on both reducer and NodeManager.
  2. Check that the shuffle secret key used by the JobHistory/token matches the NodeManager's; restart stale NodeManagers if keys rotated.

When it happens

Trigger: Thrown by ShuffleChannelHandler when the shuffle secret/hash from the fetching reducer fails verification against the stored job credentials. Indicates a stale or forged shuffle token; the fetch is rejected and the reducer will fail and retry.

Common situations: Secure cluster with mismatched shuffle secret; clock skew or stale tokens after AM restart.

Understand the failure class


AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22). Data as JSON: /api/errors/a41015aaa1d675c8. Report an issue: GitHub.