You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mapreduce-issues@hadoop.apache.org by "Yongjun Zhang (JIRA)" <ji...@apache.org> on 2015/01/09 01:33:36 UTC

[jira] [Commented] (MAPREDUCE-2764) Fix renewal of dfs delegation tokens

    [ https://issues.apache.org/jira/browse/MAPREDUCE-2764?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14270283#comment-14270283 ] 

Yongjun Zhang commented on MAPREDUCE-2764:
------------------------------------------

HI [~owen.omalley],

Thanks for your earlier work here. I have some questions, appreciate your time to answer, and hope I'm not taxing your memory too much because it has been quite long since this jira was resolved.

279	  private synchronized TokenRenewer getRenewer() throws IOException {
280	    if (renewer != null) {
281	      return renewer;
282	    }
283	    renewer = TRIVIAL_RENEWER;
284	    for (TokenRenewer canidate: renewers) {
285	      if (canidate.handleKind(this.kind)) {
286	        renewer = canidate;
287	        return renewer;
288	      }
289	    }
290	    LOG.warn("No TokenRenewer defined for token kind " + this.kind);
291	    return renewer;
292	  }

If the loop to find a candicate failes, we would be using TRIVIAL_RENEWER, whose {{isManaged()}} method returns false. When this happens, it means YARN will not try to renew the token. Is this intended?

I have a distcp case that I was hoping I could let distcp to pass an HDFS token with null renewer to YARN because I don't want YARN to renew the token. However,  looks like the above loop will always find a candicate renewer, thus the TRIVIAL_RENEWER will not be used. Is this expected?

Any suggestion on how to let YARN not to renew a token and let the client handle renewal? 

I guess the current way how YARN works is to always try to renew the job token before scheduling the job, to avoid invalid token to begin with (right?), then when the TRIVIAL_RENEWER will be used in the above code? Why the above method does return failure if it can't find a matching renewer (instead, it uses TRIVIAL_RENEWER)?

Sorry for quite a few questions, thanks again for your time!




> Fix renewal of dfs delegation tokens
> ------------------------------------
>
>                 Key: MAPREDUCE-2764
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-2764
>             Project: Hadoop Map/Reduce
>          Issue Type: Bug
>            Reporter: Daryn Sharp
>            Assignee: Owen O'Malley
>             Fix For: 0.20.205.0, 0.23.0, 0.24.0
>
>         Attachments: MAPREDUCE-2764-2.patch, MAPREDUCE-2764-3.patch, MAPREDUCE-2764-4.patch, MAPREDUCE-2764-trunk.patch, MAPREDUCE-2764-trunk.patch, MAPREDUCE-2764-trunk.patch, MAPREDUCE-2764.patch, delegation.patch, token-renew-trunk.patch, token-renew.patch, token-renew.patch
>
>
> The JT may have issues renewing hftp tokens which disrupt long distcp jobs.  The problem is the JT's delegation token renewal code is built on brittle assumptions.  The token's service field contains only the "ip:port" pair.  The renewal process assumes that the scheme must be hdfs.  If that fails due to a {{VersionMismatchException}}, it tries https based on another assumption that it must be hftp if it's not hdfs.  A number of other exceptions, most commonly {{IOExceptions}}, can be generated which fouls up the renewal since it won't fallback to https.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)