You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-commits@hadoop.apache.org by ac...@apache.org on 2013/06/17 05:19:21 UTC

svn commit: r1493631 - in /hadoop/common/trunk/hadoop-yarn-project: ./ hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/ hadoop-yarn/hadoop-yarn-applicatio...

Author: acmurthy
Date: Mon Jun 17 03:19:21 2013
New Revision: 1493631

URL: http://svn.apache.org/r1493631
Log:
YARN-824. Added static factory methods to hadoop-yarn-client interfaces. Contributed by Jian He.

Modified:
    hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt
    hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/Client.java
    hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-unmanaged-am-launcher/src/main/java/org/apache/hadoop/yarn/applications/unmanagedamlauncher/UnmanagedAMLauncher.java
    hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClient.java
    hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClientAsync.java
    hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClientImpl.java
    hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/NMClient.java
    hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/NMClientImpl.java
    hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/YarnClient.java
    hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/YarnClientImpl.java
    hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/YarnCLI.java
    hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestAMRMClient.java
    hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestNMClient.java
    hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestYarnClient.java

Modified: hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt?rev=1493631&r1=1493630&r2=1493631&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt Mon Jun 17 03:19:21 2013
@@ -169,6 +169,9 @@ Release 2.1.0-beta - UNRELEASED
     YARN-831. Removed minimum resource from GetNewApplicationResponse as a
     follow-up to YARN-787. (Jian He via acmurthy)
 
+    YARN-824. Added static factory methods to hadoop-yarn-client interfaces. 
+    (Jian He via acmurthy)
+
   NEW FEATURES
 
     YARN-482. FS: Extend SchedulingMode to intermediate queues. 

Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/Client.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/Client.java?rev=1493631&r1=1493630&r2=1493631&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/Client.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/Client.java Mon Jun 17 03:19:21 2013
@@ -60,7 +60,7 @@ import org.apache.hadoop.yarn.api.record
 import org.apache.hadoop.yarn.api.records.Resource;
 import org.apache.hadoop.yarn.api.records.YarnApplicationState;
 import org.apache.hadoop.yarn.api.records.YarnClusterMetrics;
-import org.apache.hadoop.yarn.client.YarnClientImpl;
+import org.apache.hadoop.yarn.client.YarnClient;
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
 import org.apache.hadoop.yarn.exceptions.YarnException;
 import org.apache.hadoop.yarn.util.ConverterUtils;
@@ -99,13 +99,13 @@ import org.apache.hadoop.yarn.util.Recor
  */
 @InterfaceAudience.Public
 @InterfaceStability.Unstable
-public class Client extends YarnClientImpl {
+public class Client {
 
   private static final Log LOG = LogFactory.getLog(Client.class);
 
   // Configuration
   private Configuration conf;
-
+  private YarnClient yarnClient;
   // Application master specific info to register a new Application with RM/ASM
   private String appName = "";
   // App master priority
@@ -186,9 +186,10 @@ public class Client extends YarnClientIm
   /**
    */
   public Client(Configuration conf) throws Exception  {
-    super();
+    
     this.conf = conf;
-    init(conf);
+    yarnClient = YarnClient.createYarnClient();
+    yarnClient.init(conf);
     opts = new Options();
     opts.addOption("appname", true, "Application Name. Default value - DistributedShell");
     opts.addOption("priority", true, "Application Priority. Default 0");
@@ -317,13 +318,13 @@ public class Client extends YarnClientIm
   public boolean run() throws IOException, YarnException {
 
     LOG.info("Running Client");
-    start();
+    yarnClient.start();
 
-    YarnClusterMetrics clusterMetrics = super.getYarnClusterMetrics();
+    YarnClusterMetrics clusterMetrics = yarnClient.getYarnClusterMetrics();
     LOG.info("Got Cluster metric info from ASM" 
         + ", numNodeManagers=" + clusterMetrics.getNumNodeManagers());
 
-    List<NodeReport> clusterNodeReports = super.getNodeReports();
+    List<NodeReport> clusterNodeReports = yarnClient.getNodeReports();
     LOG.info("Got Cluster node info from ASM");
     for (NodeReport node : clusterNodeReports) {
       LOG.info("Got node report from ASM for"
@@ -333,7 +334,7 @@ public class Client extends YarnClientIm
           + ", nodeNumContainers" + node.getNumContainers());
     }
 
-    QueueInfo queueInfo = super.getQueueInfo(this.amQueue);		
+    QueueInfo queueInfo = yarnClient.getQueueInfo(this.amQueue);
     LOG.info("Queue info"
         + ", queueName=" + queueInfo.getQueueName()
         + ", queueCurrentCapacity=" + queueInfo.getCurrentCapacity()
@@ -341,7 +342,7 @@ public class Client extends YarnClientIm
         + ", queueApplicationCount=" + queueInfo.getApplications().size()
         + ", queueChildQueueCount=" + queueInfo.getChildQueues().size());		
 
-    List<QueueUserACLInfo> listAclInfo = super.getQueueAclsInfo();				
+    List<QueueUserACLInfo> listAclInfo = yarnClient.getQueueAclsInfo();
     for (QueueUserACLInfo aclInfo : listAclInfo) {
       for (QueueACL userAcl : aclInfo.getUserAcls()) {
         LOG.info("User ACL Info for Queue"
@@ -351,7 +352,7 @@ public class Client extends YarnClientIm
     }		
 
     // Get a new application id 
-    GetNewApplicationResponse newApp = super.getNewApplication();
+    GetNewApplicationResponse newApp = yarnClient.getNewApplication();
     ApplicationId appId = newApp.getApplicationId();
 
     // TODO get min/max resource capabilities from RM and change memory ask if needed
@@ -564,7 +565,7 @@ public class Client extends YarnClientIm
     // or an exception thrown to denote some form of a failure
     LOG.info("Submitting application to ASM");
 
-    super.submitApplication(appContext);
+    yarnClient.submitApplication(appContext);
 
     // TODO
     // Try submitting the same request again
@@ -596,7 +597,7 @@ public class Client extends YarnClientIm
       }
 
       // Get application report for the appId we are interested in 
-      ApplicationReport report = super.getApplicationReport(appId);
+      ApplicationReport report = yarnClient.getApplicationReport(appId);
 
       LOG.info("Got application report from ASM for"
           + ", appId=" + appId.getId()
@@ -656,7 +657,7 @@ public class Client extends YarnClientIm
 
     // Response can be ignored as it is non-null on success or 
     // throws an exception in case of failures
-    super.killApplication(appId);	
+    yarnClient.killApplication(appId);	
   }
 
 }

Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-unmanaged-am-launcher/src/main/java/org/apache/hadoop/yarn/applications/unmanagedamlauncher/UnmanagedAMLauncher.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-unmanaged-am-launcher/src/main/java/org/apache/hadoop/yarn/applications/unmanagedamlauncher/UnmanagedAMLauncher.java?rev=1493631&r1=1493630&r2=1493631&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-unmanaged-am-launcher/src/main/java/org/apache/hadoop/yarn/applications/unmanagedamlauncher/UnmanagedAMLauncher.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-unmanaged-am-launcher/src/main/java/org/apache/hadoop/yarn/applications/unmanagedamlauncher/UnmanagedAMLauncher.java Mon Jun 17 03:19:21 2013
@@ -48,6 +48,7 @@ import org.apache.hadoop.yarn.api.record
 import org.apache.hadoop.yarn.api.records.FinalApplicationStatus;
 import org.apache.hadoop.yarn.api.records.Priority;
 import org.apache.hadoop.yarn.api.records.YarnApplicationState;
+import org.apache.hadoop.yarn.client.YarnClient;
 import org.apache.hadoop.yarn.client.YarnClientImpl;
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
 import org.apache.hadoop.yarn.exceptions.YarnException;
@@ -72,7 +73,7 @@ public class UnmanagedAMLauncher {
   private Configuration conf;
 
   // Handle to talk to the Resource Manager/Applications Manager
-  private YarnClientImpl rmClient;
+  private YarnClient rmClient;
 
   // Application master specific info to register a new Application with RM/ASM
   private String appName = "";
@@ -160,7 +161,7 @@ public class UnmanagedAMLauncher {
     }
 
     YarnConfiguration yarnConf = new YarnConfiguration(conf);
-    rmClient = new YarnClientImpl();
+    rmClient = YarnClient.createYarnClient();
     rmClient.init(yarnConf);
 
     return true;

Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClient.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClient.java?rev=1493631&r1=1493630&r2=1493631&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClient.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClient.java Mon Jun 17 03:19:21 2013
@@ -24,22 +24,48 @@ import java.util.List;
 import java.util.concurrent.ConcurrentMap;
 
 import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceAudience.Private;
+import org.apache.hadoop.classification.InterfaceAudience.Public;
 import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.hadoop.yarn.api.protocolrecords.AllocateResponse;
 import org.apache.hadoop.yarn.api.protocolrecords.RegisterApplicationMasterResponse;
+import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
 import org.apache.hadoop.yarn.api.records.ContainerId;
 import org.apache.hadoop.yarn.api.records.FinalApplicationStatus;
 import org.apache.hadoop.yarn.api.records.Priority;
 import org.apache.hadoop.yarn.api.records.Resource;
 import org.apache.hadoop.yarn.api.records.Token;
 import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.hadoop.yarn.service.Service;
+import org.apache.hadoop.yarn.service.AbstractService;
 
 import com.google.common.collect.ImmutableList;
 
 @InterfaceAudience.Public
 @InterfaceStability.Unstable
-public interface AMRMClient<T extends AMRMClient.ContainerRequest> extends Service {
+public abstract class AMRMClient<T extends AMRMClient.ContainerRequest> extends
+    AbstractService {
+
+  /**
+   * Create a new instance of AMRMClient.
+   * For usage:
+   * <pre>
+   * {@code
+   * AMRMClient.<T>createAMRMClientContainerRequest(appAttemptId)
+   * }</pre>
+   * @param appAttemptId the appAttemptId associated with the AMRMClient
+   * @return the newly create AMRMClient instance.
+   */
+  @Public
+  public static <T extends ContainerRequest> AMRMClient<T> createAMRMClient(
+      ApplicationAttemptId appAttemptId) {
+    AMRMClient<T> client = new AMRMClientImpl<T>(appAttemptId);
+    return client;
+  }
+
+  @Private
+  protected AMRMClient(String name) {
+    super(name);
+  }
 
   /**
    * Object to represent container request for resources. Scheduler
@@ -132,7 +158,7 @@ public interface AMRMClient<T extends AM
    * @throws YarnException
    * @throws IOException
    */
-  public RegisterApplicationMasterResponse 
+  public abstract RegisterApplicationMasterResponse 
                registerApplicationMaster(String appHostName,
                                          int appHostPort,
                                          String appTrackingUrl) 
@@ -153,7 +179,7 @@ public interface AMRMClient<T extends AM
    * @throws YarnException
    * @throws IOException
    */
-  public AllocateResponse allocate(float progressIndicator) 
+  public abstract AllocateResponse allocate(float progressIndicator) 
                            throws YarnException, IOException;
   
   /**
@@ -164,7 +190,7 @@ public interface AMRMClient<T extends AM
    * @throws YarnException
    * @throws IOException
    */
-  public void unregisterApplicationMaster(FinalApplicationStatus appStatus,
+  public abstract void unregisterApplicationMaster(FinalApplicationStatus appStatus,
                                            String appMessage,
                                            String appTrackingUrl) 
                throws YarnException, IOException;
@@ -173,7 +199,7 @@ public interface AMRMClient<T extends AM
    * Request containers for resources before calling <code>allocate</code>
    * @param req Resource request
    */
-  public void addContainerRequest(T req);
+  public abstract void addContainerRequest(T req);
   
   /**
    * Remove previous container request. The previous container request may have 
@@ -182,7 +208,7 @@ public interface AMRMClient<T extends AM
    * even after the remove request
    * @param req Resource request
    */
-  public void removeContainerRequest(T req);
+  public abstract void removeContainerRequest(T req);
   
   /**
    * Release containers assigned by the Resource Manager. If the app cannot use
@@ -191,21 +217,21 @@ public interface AMRMClient<T extends AM
    * it still needs it. eg. it released non-local resources
    * @param containerId
    */
-  public void releaseAssignedContainer(ContainerId containerId);
+  public abstract void releaseAssignedContainer(ContainerId containerId);
   
   /**
    * Get the currently available resources in the cluster.
    * A valid value is available after a call to allocate has been made
    * @return Currently available resources
    */
-  public Resource getClusterAvailableResources();
+  public abstract Resource getClusterAvailableResources();
   
   /**
    * Get the current number of nodes in the cluster.
    * A valid values is available after a call to allocate has been made
    * @return Current number of nodes in the cluster
    */
-  public int getClusterNodeCount();
+  public abstract int getClusterNodeCount();
 
   /**
    * Get outstanding <code>StoredContainerRequest</code>s matching the given 
@@ -218,7 +244,7 @@ public interface AMRMClient<T extends AM
    * collection, requests will be returned in the same order as they were added.
    * @return Collection of request matching the parameters
    */
-  public List<? extends Collection<T>> getMatchingRequests(
+  public abstract List<? extends Collection<T>> getMatchingRequests(
                                            Priority priority, 
                                            String resourceName, 
                                            Resource capability);
@@ -231,5 +257,5 @@ public interface AMRMClient<T extends AM
    * communicating with NodeManager (ex. NMClient) using NMTokens. If a new
    * NMToken is received for the same node manager then it will be replaced. 
    */
-  public ConcurrentMap<String, Token> getNMTokens();
+  public abstract ConcurrentMap<String, Token> getNMTokens();
 }

Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClientAsync.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClientAsync.java?rev=1493631&r1=1493630&r2=1493631&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClientAsync.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClientAsync.java Mon Jun 17 03:19:21 2013
@@ -120,7 +120,7 @@ public class AMRMClientAsync<T extends C
   
   @Private
   @VisibleForTesting
-  public AMRMClientAsync(AMRMClient<T> client, int intervalMs,
+  protected AMRMClientAsync(AMRMClient<T> client, int intervalMs,
       CallbackHandler callbackHandler) {
     super(AMRMClientAsync.class.getName());
     this.client = client;

Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClientImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClientImpl.java?rev=1493631&r1=1493630&r2=1493631&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClientImpl.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/AMRMClientImpl.java Mon Jun 17 03:19:21 2013
@@ -64,18 +64,15 @@ import org.apache.hadoop.yarn.exceptions
 import org.apache.hadoop.yarn.factories.RecordFactory;
 import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
 import org.apache.hadoop.yarn.ipc.YarnRPC;
-import org.apache.hadoop.yarn.service.AbstractService;
 import org.apache.hadoop.yarn.util.RackResolver;
 
-import com.google.common.base.Joiner;
-
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Joiner;
 
 // TODO check inputs for null etc. YARN-654
 
 @Unstable
-public class AMRMClientImpl<T extends ContainerRequest> 
-                          extends AbstractService implements AMRMClient<T> {
+public class AMRMClientImpl<T extends ContainerRequest> extends AMRMClient<T> {
 
   private static final Log LOG = LogFactory.getLog(AMRMClientImpl.class);
   

Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/NMClient.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/NMClient.java?rev=1493631&r1=1493630&r2=1493631&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/NMClient.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/NMClient.java Mon Jun 17 03:19:21 2013
@@ -23,6 +23,8 @@ import java.nio.ByteBuffer;
 import java.util.Map;
 
 import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceAudience.Private;
+import org.apache.hadoop.classification.InterfaceAudience.Public;
 import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.hadoop.yarn.api.records.Container;
 import org.apache.hadoop.yarn.api.records.ContainerId;
@@ -31,11 +33,34 @@ import org.apache.hadoop.yarn.api.record
 import org.apache.hadoop.yarn.api.records.NodeId;
 import org.apache.hadoop.yarn.api.records.Token;
 import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.hadoop.yarn.service.Service;
+import org.apache.hadoop.yarn.service.AbstractService;
 
 @InterfaceAudience.Public
 @InterfaceStability.Unstable
-public interface NMClient extends Service {
+public abstract class NMClient extends AbstractService {
+
+  /**
+   * Create a new instance of NMClient.
+   */
+  @Public
+  public static NMClient createNMClient() {
+    NMClient client = new NMClientImpl();
+    return client;
+  }
+
+  /**
+   * Create a new instance of NMClient.
+   */
+  @Public
+  public static NMClient createNMClient(String name) {
+    NMClient client = new NMClientImpl(name);
+    return client;
+  }
+
+  @Private
+  protected NMClient(String name) {
+    super(name);
+  }
 
   /**
    * <p>Start an allocated container.</p>
@@ -54,7 +79,7 @@ public interface NMClient extends Servic
    * @throws YarnException
    * @throws IOException
    */
-  Map<String, ByteBuffer> startContainer(Container container,
+  public abstract Map<String, ByteBuffer> startContainer(Container container,
       ContainerLaunchContext containerLaunchContext)
           throws YarnException, IOException;
 
@@ -68,7 +93,7 @@ public interface NMClient extends Servic
    * @throws YarnException
    * @throws IOException
    */
-  void stopContainer(ContainerId containerId, NodeId nodeId,
+  public abstract void stopContainer(ContainerId containerId, NodeId nodeId,
       Token containerToken) throws YarnException, IOException;
 
   /**
@@ -82,7 +107,7 @@ public interface NMClient extends Servic
    * @throws YarnException
    * @throws IOException
    */
-  ContainerStatus getContainerStatus(ContainerId containerId, NodeId nodeId,
+  public abstract ContainerStatus getContainerStatus(ContainerId containerId, NodeId nodeId,
       Token containerToken) throws YarnException, IOException;
 
   /**
@@ -92,6 +117,6 @@ public interface NMClient extends Servic
    *
    * @param enabled whether the feature is enabled or not
    */
-  void cleanupRunningContainersOnStop(boolean enabled);
+  public abstract void cleanupRunningContainersOnStop(boolean enabled);
 
 }

Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/NMClientImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/NMClientImpl.java?rev=1493631&r1=1493630&r2=1493631&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/NMClientImpl.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/NMClientImpl.java Mon Jun 17 03:19:21 2013
@@ -42,8 +42,8 @@ import org.apache.hadoop.yarn.api.record
 import org.apache.hadoop.yarn.api.records.ContainerId;
 import org.apache.hadoop.yarn.api.records.ContainerLaunchContext;
 import org.apache.hadoop.yarn.api.records.ContainerStatus;
-import org.apache.hadoop.yarn.api.records.Token;
 import org.apache.hadoop.yarn.api.records.NodeId;
+import org.apache.hadoop.yarn.api.records.Token;
 import org.apache.hadoop.yarn.exceptions.YarnException;
 import org.apache.hadoop.yarn.ipc.RPCUtil;
 import org.apache.hadoop.yarn.ipc.YarnRPC;
@@ -76,7 +76,7 @@ import org.apache.hadoop.yarn.util.Recor
  * {@link #stopContainer}.
  * </p>
  */
-public class NMClientImpl extends AbstractService implements NMClient {
+public class NMClientImpl extends NMClient {
 
   private static final Log LOG = LogFactory.getLog(NMClientImpl.class);
 

Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/YarnClient.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/YarnClient.java?rev=1493631&r1=1493630&r2=1493631&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/YarnClient.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/YarnClient.java Mon Jun 17 03:19:21 2013
@@ -19,9 +19,12 @@
 package org.apache.hadoop.yarn.client;
 
 import java.io.IOException;
+import java.net.InetSocketAddress;
 import java.util.List;
 
 import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceAudience.Private;
+import org.apache.hadoop.classification.InterfaceAudience.Public;
 import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.hadoop.io.Text;
 import org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationResponse;
@@ -34,11 +37,44 @@ import org.apache.hadoop.yarn.api.record
 import org.apache.hadoop.yarn.api.records.Token;
 import org.apache.hadoop.yarn.api.records.YarnClusterMetrics;
 import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.hadoop.yarn.service.Service;
+import org.apache.hadoop.yarn.service.AbstractService;
 
 @InterfaceAudience.Public
 @InterfaceStability.Evolving
-public interface YarnClient extends Service {
+public abstract class YarnClient extends AbstractService {
+
+  /**
+   * Create a new instance of YarnClient.
+   */
+  @Public
+  public static YarnClient createYarnClient() {
+    YarnClient client = new YarnClientImpl();
+    return client;
+  }
+
+  /**
+   * Create a new instance of YarnClient.
+   */
+  @Public
+  public static YarnClient createYarnClient(InetSocketAddress rmAddress) {
+    YarnClient client = new YarnClientImpl(rmAddress);
+    return client;
+  }
+
+  /**
+   * Create a new instance of YarnClient.
+   */
+  @Public
+  public static YarnClient createYarnClient(String name,
+      InetSocketAddress rmAddress) {
+    YarnClient client = new YarnClientImpl(name, rmAddress);
+    return client;
+  }
+
+  @Private
+  protected YarnClient(String name) {
+    super(name);
+  }
 
   /**
    * <p>
@@ -61,7 +97,7 @@ public interface YarnClient extends Serv
    * @throws YarnException
    * @throws IOException
    */
-  GetNewApplicationResponse getNewApplication() throws YarnException,
+  public abstract GetNewApplicationResponse getNewApplication() throws YarnException,
       IOException;
 
   /**
@@ -79,7 +115,7 @@ public interface YarnClient extends Serv
    * @throws IOException
    * @see #getNewApplication()
    */
-  ApplicationId submitApplication(ApplicationSubmissionContext appContext)
+  public abstract ApplicationId submitApplication(ApplicationSubmissionContext appContext)
       throws YarnException, IOException;
 
   /**
@@ -95,7 +131,7 @@ public interface YarnClient extends Serv
    * @throws IOException
    * @see #getQueueAclsInfo()
    */
-  void killApplication(ApplicationId applicationId) throws YarnException,
+  public abstract void killApplication(ApplicationId applicationId) throws YarnException,
       IOException;
 
   /**
@@ -128,7 +164,7 @@ public interface YarnClient extends Serv
    * @throws YarnException
    * @throws IOException
    */
-  ApplicationReport getApplicationReport(ApplicationId appId)
+  public abstract ApplicationReport getApplicationReport(ApplicationId appId)
       throws YarnException, IOException;
 
   /**
@@ -146,7 +182,7 @@ public interface YarnClient extends Serv
    * @throws YarnException
    * @throws IOException
    */
-  List<ApplicationReport> getApplicationList() throws YarnException,
+  public abstract List<ApplicationReport> getApplicationList() throws YarnException,
       IOException;
 
   /**
@@ -158,7 +194,7 @@ public interface YarnClient extends Serv
    * @throws YarnException
    * @throws IOException
    */
-  YarnClusterMetrics getYarnClusterMetrics() throws YarnException,
+  public abstract YarnClusterMetrics getYarnClusterMetrics() throws YarnException,
       IOException;
 
   /**
@@ -170,7 +206,7 @@ public interface YarnClient extends Serv
    * @throws YarnException
    * @throws IOException
    */
-  List<NodeReport> getNodeReports() throws YarnException, IOException;
+  public abstract List<NodeReport> getNodeReports() throws YarnException, IOException;
 
   /**
    * <p>
@@ -184,7 +220,7 @@ public interface YarnClient extends Serv
    * @throws YarnException
    * @throws IOException
    */
-  Token getRMDelegationToken(Text renewer)
+  public abstract Token getRMDelegationToken(Text renewer)
       throws YarnException, IOException;
 
   /**
@@ -200,7 +236,7 @@ public interface YarnClient extends Serv
    *           access-control restrictions.
    * @throws IOException
    */
-  QueueInfo getQueueInfo(String queueName) throws YarnException,
+  public abstract QueueInfo getQueueInfo(String queueName) throws YarnException,
       IOException;
 
   /**
@@ -213,7 +249,7 @@ public interface YarnClient extends Serv
    * @throws YarnException
    * @throws IOException
    */
-  List<QueueInfo> getAllQueues() throws YarnException, IOException;
+  public abstract List<QueueInfo> getAllQueues() throws YarnException, IOException;
 
   /**
    * <p>
@@ -224,7 +260,7 @@ public interface YarnClient extends Serv
    * @throws YarnException
    * @throws IOException
    */
-  List<QueueInfo> getRootQueueInfos() throws YarnException, IOException;
+  public abstract List<QueueInfo> getRootQueueInfos() throws YarnException, IOException;
 
   /**
    * <p>
@@ -239,7 +275,7 @@ public interface YarnClient extends Serv
    * @throws YarnException
    * @throws IOException
    */
-  List<QueueInfo> getChildQueueInfos(String parent) throws YarnException,
+  public abstract List<QueueInfo> getChildQueueInfos(String parent) throws YarnException,
       IOException;
 
   /**
@@ -253,6 +289,6 @@ public interface YarnClient extends Serv
    * @throws YarnException
    * @throws IOException
    */
-  List<QueueUserACLInfo> getQueueAclsInfo() throws YarnException,
+  public abstract List<QueueUserACLInfo> getQueueAclsInfo() throws YarnException,
       IOException;
 }

Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/YarnClientImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/YarnClientImpl.java?rev=1493631&r1=1493630&r2=1493631&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/YarnClientImpl.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/YarnClientImpl.java Mon Jun 17 03:19:21 2013
@@ -59,12 +59,11 @@ import org.apache.hadoop.yarn.api.record
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
 import org.apache.hadoop.yarn.exceptions.YarnException;
 import org.apache.hadoop.yarn.ipc.YarnRPC;
-import org.apache.hadoop.yarn.service.AbstractService;
 import org.apache.hadoop.yarn.util.Records;
 
 @InterfaceAudience.Public
 @InterfaceStability.Evolving
-public class YarnClientImpl extends AbstractService implements YarnClient {
+public class YarnClientImpl extends YarnClient {
 
   private static final Log LOG = LogFactory.getLog(YarnClientImpl.class);
 

Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/YarnCLI.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/YarnCLI.java?rev=1493631&r1=1493630&r2=1493631&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/YarnCLI.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/YarnCLI.java Mon Jun 17 03:19:21 2013
@@ -36,7 +36,7 @@ public abstract class YarnCLI extends Co
 
   public YarnCLI() {
     super(new YarnConfiguration());
-    client = new YarnClientImpl();
+    client = YarnClient.createYarnClient();
     client.init(getConf());
     client.start();
   }

Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestAMRMClient.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestAMRMClient.java?rev=1493631&r1=1493630&r2=1493631&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestAMRMClient.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestAMRMClient.java Mon Jun 17 03:19:21 2013
@@ -74,7 +74,7 @@ import org.mockito.stubbing.Answer;
 public class TestAMRMClient {
   static Configuration conf = null;
   static MiniYARNCluster yarnCluster = null;
-  static YarnClientImpl yarnClient = null;
+  static YarnClient yarnClient = null;
   static List<NodeReport> nodeReports = null;
   static ApplicationAttemptId attemptId = null;
   static int nodeCount = 3;
@@ -95,7 +95,7 @@ public class TestAMRMClient {
     yarnCluster.start();
 
     // start rm client
-    yarnClient = new YarnClientImpl();
+    yarnClient = YarnClient.createYarnClient();
     yarnClient.init(conf);
     yarnClient.start();
 
@@ -169,10 +169,10 @@ public class TestAMRMClient {
   
   @Test (timeout=60000)
   public void testAMRMClientMatchingFit() throws YarnException, IOException {
-    AMRMClientImpl<StoredContainerRequest> amClient = null;
+    AMRMClient<StoredContainerRequest> amClient = null;
     try {
       // start am rm client
-      amClient = new AMRMClientImpl<StoredContainerRequest>(attemptId);
+      amClient = AMRMClient.<StoredContainerRequest>createAMRMClient(attemptId);
       amClient.init(conf);
       amClient.start();
       amClient.registerApplicationMaster("Host", 10000, "");
@@ -318,7 +318,9 @@ public class TestAMRMClient {
     AMRMClientImpl<StoredContainerRequest> amClient = null;
     try {
       // start am rm client
-      amClient = new AMRMClientImpl<StoredContainerRequest>(attemptId);
+      amClient =
+          (AMRMClientImpl<StoredContainerRequest>) AMRMClient
+            .<StoredContainerRequest> createAMRMClient(attemptId);
       amClient.init(conf);
       amClient.start();
       amClient.registerApplicationMaster("Host", 10000, "");
@@ -436,16 +438,16 @@ public class TestAMRMClient {
 
   @Test (timeout=60000)
   public void testAMRMClient() throws YarnException, IOException {
-    AMRMClientImpl<ContainerRequest> amClient = null;
+    AMRMClient<ContainerRequest> amClient = null;
     try {
       // start am rm client
-      amClient = new AMRMClientImpl<ContainerRequest>(attemptId);
+      amClient = AMRMClient.<ContainerRequest>createAMRMClient(attemptId);
       amClient.init(conf);
       amClient.start();
 
       amClient.registerApplicationMaster("Host", 10000, "");
 
-      testAllocation(amClient);
+      testAllocation((AMRMClientImpl<ContainerRequest>)amClient);
 
       amClient.unregisterApplicationMaster(FinalApplicationStatus.SUCCEEDED,
           null, null);

Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestNMClient.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestNMClient.java?rev=1493631&r1=1493630&r2=1493631&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestNMClient.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestNMClient.java Mon Jun 17 03:19:21 2013
@@ -82,7 +82,7 @@ public class TestNMClient {
     assertEquals(STATE.STARTED, yarnCluster.getServiceState());
 
     // start rm client
-    yarnClient = new YarnClientImpl();
+    yarnClient = (YarnClientImpl) YarnClient.createYarnClient();
     yarnClient.init(conf);
     yarnClient.start();
     assertNotNull(yarnClient);
@@ -136,14 +136,16 @@ public class TestNMClient {
     }
 
     // start am rm client
-    rmClient = new AMRMClientImpl<ContainerRequest>(attemptId);
+    rmClient =
+        (AMRMClientImpl<ContainerRequest>) AMRMClient
+          .<ContainerRequest> createAMRMClient(attemptId);
     rmClient.init(conf);
     rmClient.start();
     assertNotNull(rmClient);
     assertEquals(STATE.STARTED, rmClient.getServiceState());
 
     // start am nm client
-    nmClient = new NMClientImpl();
+    nmClient = (NMClientImpl) NMClient.createNMClient();
     nmClient.init(conf);
     nmClient.start();
     assertNotNull(nmClient);

Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestYarnClient.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestYarnClient.java?rev=1493631&r1=1493630&r2=1493631&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestYarnClient.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestYarnClient.java Mon Jun 17 03:19:21 2013
@@ -62,7 +62,7 @@ public class TestYarnClient {
     rm.init(conf);
     rm.start();
 
-    YarnClient client = new YarnClientImpl();
+    YarnClient client = YarnClient.createYarnClient();
     client.init(conf);
     client.start();
     client.stop();