org.apache.hadoop.yarn.client.api

## Class NMTokenCache

- java.lang.Object
- - org.apache.hadoop.yarn.client.api.NMTokenCache

-     @InterfaceAudience.Public
       @InterfaceStability.Evolving
      public class NMTokenCache
      extends Object

  NMTokenCache manages NMTokens required for an Application Master communicating with individual NodeManagers.

  By default YARN client libraries `AMRMClient` and `NMClient` use `getSingleton()` instance of the cache.

  - Using the singleton instance of the cache is appropriate when running a single ApplicationMaster in the same JVM.
  - When using the singleton, users don't need to do anything special, `AMRMClient` and `NMClient` are already set up to use the default singleton `NMTokenCache`
  If running multiple Application Masters in the same JVM, a different cache instance should be used for each Application Master.
  - If using the `AMRMClient` and the `NMClient`, setting up and using an instance cache is as follows:

           NMTokenCache nmTokenCache = new NMTokenCache();
           AMRMClient rmClient = AMRMClient.createAMRMClient();
           NMClient nmClient = NMClient.createNMClient();
           nmClient.setNMTokenCache(nmTokenCache);
           ...

  - If using the `AMRMClientAsync` and the `NMClientAsync`, setting up and using an instance cache is as follows:

           NMTokenCache nmTokenCache = new NMTokenCache();
           AMRMClient rmClient = AMRMClient.createAMRMClient();
           NMClient nmClient = NMClient.createNMClient();
           nmClient.setNMTokenCache(nmTokenCache);
           AMRMClientAsync rmClientAsync = new AMRMClientAsync(rmClient, 1000, [AMRM_CALLBACK]);
           NMClientAsync nmClientAsync = new NMClientAsync("nmClient", nmClient, [NM_CALLBACK]);
           ...

  - If using `ApplicationMasterProtocol` and `ContainerManagementProtocol` directly, setting up and using an instance cache is as follows:

           NMTokenCache nmTokenCache = new NMTokenCache();
           ...
           ApplicationMasterProtocol amPro = ClientRMProxy.createRMProxy(conf, ApplicationMasterProtocol.class);
           ...
           AllocateRequest allocateRequest = ...
           ...
           AllocateResponse allocateResponse = rmClient.allocate(allocateRequest);
           for (NMToken token : allocateResponse.getNMTokens()) {
             nmTokenCache.setToken(token.getNodeId().toString(), token.getToken());
           }
           ...
           ContainerManagementProtocolProxy nmPro = ContainerManagementProtocolProxy(conf, nmTokenCache);
           ...
           nmPro.startContainer(container, containerContext);
           ...

  It is also possible to mix the usage of a client (`AMRMClient` or `NMClient`, or the async versions of them) with a protocol proxy (`ContainerManagementProtocolProxy` or `ApplicationMasterProtocol`).

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `NMTokenCache()` Creates a NM token cache instance.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `static Token` | `getNMToken(String nodeAddr)` Returns NMToken, null if absent.
    `static NMTokenCache` | `getSingleton()` Returns the singleton NM token cache.
    `Token` | `getToken(String nodeAddr)` Returns NMToken, null if absent
    `static void` | `setNMToken(String nodeAddr, Token token)` Sets the NMToken for node address only in the singleton obtained from `getSingleton()`.
    `void` | `setToken(String nodeAddr, Token token)` Sets the NMToken for node address

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### NMTokenCache

          public NMTokenCache()

      Creates a NM token cache instance.

  - ### Method Detail

    - #### getSingleton

          public static NMTokenCache getSingleton()

      Returns the singleton NM token cache.
      Returns:
        the singleton NM token cache.

    - #### getNMToken

          @InterfaceAudience.Public
          public static Token getNMToken(String nodeAddr)

      Returns NMToken, null if absent. Only the singleton obtained from `getSingleton()` is looked at for the tokens. If you are using your own NMTokenCache that is different from the singleton, use `getToken(String)`
      Parameters:
        `nodeAddr` -
      Returns:
        `Token` NMToken required for communicating with node manager

    - #### setNMToken

          @InterfaceAudience.Public
          public static void setNMToken(String nodeAddr,
                                                                  Token token)

      Sets the NMToken for node address only in the singleton obtained from `getSingleton()`. If you are using your own NMTokenCache that is different from the singleton, use `setToken(String, Token)`
      Parameters:
        `nodeAddr` - node address (host:port)
        `token` - NMToken

    - #### getToken

          @InterfaceAudience.Public
           @InterfaceStability.Evolving
          public Token getToken(String nodeAddr)

      Returns NMToken, null if absent
      Parameters:
        `nodeAddr` -
      Returns:
        `Token` NMToken required for communicating with node manager

    - #### setToken

          @InterfaceAudience.Public
           @InterfaceStability.Evolving
          public void setToken(String nodeAddr,
                                                                                       Token token)

      Sets the NMToken for node address
      Parameters:
        `nodeAddr` - node address (host:port)
        `token` - NMToken

Copyright © 2022 Apache Software Foundation. All rights reserved.