[REEF-1777] Pass IP address instead of empty string or host name when registering Application Master

This is required for Azure Data Lake containers and should be backward compatible for other YARN environments

JIRA: [REEF-1777](https://issues.apache.org/jira/browse/REEF-1777)

This closes #1291
diff --git a/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/driver/YarnContainerManager.java b/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/driver/YarnContainerManager.java
index 58df83a..1b99613 100644
--- a/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/driver/YarnContainerManager.java
+++ b/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/driver/YarnContainerManager.java
@@ -48,6 +48,7 @@
 import org.apache.reef.tang.InjectionFuture;
 import org.apache.reef.tang.annotations.Parameter;
 import org.apache.reef.util.Optional;
+import org.apache.reef.wake.remote.address.LocalAddressProvider;
 import org.apache.reef.wake.remote.impl.ObjectSerializableCodec;
 
 import javax.inject.Inject;
@@ -68,9 +69,6 @@
 
   private static final String RUNTIME_NAME = "YARN";
 
-  /** Default hostname to provide in the Application Master registration. */
-  private static final String AM_REGISTRATION_HOST = "";
-
   /** Default port number to provide in the Application Master registration. */
   private static final int AM_REGISTRATION_PORT = -1;
 
@@ -88,6 +86,7 @@
   private final ContainerRequestCounter containerRequestCounter;
   private final DriverStatusManager driverStatusManager;
   private final String trackingUrl;
+  private final String amRegistrationHost;
 
   private final String jobSubmissionDirectory;
   private final REEFFileNames reefFileNames;
@@ -107,6 +106,7 @@
       final DriverStatusManager driverStatusManager,
       final REEFFileNames reefFileNames,
       final TrackingURLProvider trackingURLProvider,
+      final LocalAddressProvider addressProvider,
       final RackNameFormatter rackNameFormatter,
       final InjectionFuture<ProgressProvider> progressProvider) throws IOException {
 
@@ -119,7 +119,9 @@
     this.yarnConf = yarnConf;
     this.yarnProxyUser = yarnProxyUser;
     this.rackNameFormatter = rackNameFormatter;
+
     this.trackingUrl = trackingURLProvider.getTrackingUrl();
+    this.amRegistrationHost = addressProvider.getLocalAddress();
 
     this.resourceManager = AMRMClientAsync.createAMRMClientAsync(yarnRMHeartbeatPeriod, this);
     this.nodeManager = new NMClientAsyncImpl(this);
@@ -334,10 +336,10 @@
           });
 
       LOG.log(Level.FINE, "YARN registration: register AM at \"{0}:{1}\" tracking URL \"{2}\"",
-          new Object[] {AM_REGISTRATION_HOST, AM_REGISTRATION_PORT, this.trackingUrl});
+          new Object[] {amRegistrationHost, AM_REGISTRATION_PORT, this.trackingUrl});
 
       this.registration.setRegistration(this.resourceManager.registerApplicationMaster(
-          AM_REGISTRATION_HOST, AM_REGISTRATION_PORT, this.trackingUrl));
+          amRegistrationHost, AM_REGISTRATION_PORT, this.trackingUrl));
 
       LOG.log(Level.FINE, "YARN registration: AM registered: {0}", this.registration);