Browse Source

AMBARI-14951. Tez Ambari View: Add protocol configuration for YARN. (Sreenath Somarajapuram via yusaku)

Yusaku Sako 9 năm trước cách đây
mục cha
commit
4cd5ad4e61

+ 1 - 1
contrib/views/capacity-scheduler/pom.xml

@@ -81,7 +81,7 @@
         <dependency>
             <groupId>org.apache.ambari.contrib.views</groupId>
             <artifactId>ambari-views-utils</artifactId>
-            <version>0.0.1.0-SNAPSHOT</version>
+            <version>2.0.0.0-SNAPSHOT</version>
         </dependency>
         <dependency>
             <groupId>org.easymock</groupId>

+ 1 - 1
contrib/views/files/pom.xml

@@ -94,7 +94,7 @@
     <dependency>
       <groupId>org.apache.ambari.contrib.views</groupId>
       <artifactId>ambari-views-utils</artifactId>
-      <version>0.0.1.0-SNAPSHOT</version>
+      <version>2.0.0.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>com.google.code.gson</groupId>

+ 1 - 1
contrib/views/hive/pom.xml

@@ -199,7 +199,7 @@
     <dependency>
       <groupId>org.apache.ambari.contrib.views</groupId>
       <artifactId>ambari-views-utils</artifactId>
-      <version>0.0.1.0-SNAPSHOT</version>
+      <version>2.0.0.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>commons-validator</groupId>

+ 1 - 1
contrib/views/pig/pom.xml

@@ -138,7 +138,7 @@
     <dependency>
       <groupId>org.apache.ambari.contrib.views</groupId>
       <artifactId>ambari-views-utils</artifactId>
-      <version>0.0.1.0-SNAPSHOT</version>
+      <version>2.0.0.0-SNAPSHOT</version>
     </dependency>
   </dependencies>
 

+ 1 - 1
contrib/views/pom.xml

@@ -34,13 +34,13 @@
     <hadoop.version>2.7.1</hadoop.version>
   </properties>
   <modules>
+    <module>utils</module>
     <module>files</module>
     <module>jobs</module>
     <module>pig</module>
     <module>slider</module>
     <module>capacity-scheduler</module>
     <module>tez</module>
-    <module>utils</module>
     <module>storm</module>
   </modules>
   <build>

+ 1 - 1
contrib/views/slider/pom.xml

@@ -129,7 +129,7 @@
     <dependency>
       <groupId>org.apache.ambari.contrib.views</groupId>
       <artifactId>ambari-views-utils</artifactId>
-      <version>0.0.1.0-SNAPSHOT</version>
+      <version>2.0.0.0-SNAPSHOT</version>
     </dependency>
   </dependencies>
 

+ 1 - 1
contrib/views/tez/pom.xml

@@ -210,7 +210,7 @@
     <dependency>
       <groupId>org.apache.ambari.contrib.views</groupId>
       <artifactId>ambari-views-utils</artifactId>
-      <version>0.0.1.0-SNAPSHOT</version>
+      <version>2.0.0.0-SNAPSHOT</version>
     </dependency>
 
   </dependencies>

+ 6 - 0
contrib/views/tez/src/main/java/org/apache/ambari/view/tez/ViewController.java

@@ -28,6 +28,7 @@ public interface ViewController {
 
   public static final String PARAM_YARN_ATS_URL = "yarn.timeline-server.url";
   public static final String PARAM_YARN_RESOURCEMANAGER_URL = "yarn.resourcemanager.url";
+  public static final String PARAM_YARN_PROTOCOL = "yarn.protocol";
 
   /**
    * @return Get the properties that any user is allowed to see, even non-admin users.
@@ -45,4 +46,9 @@ public interface ViewController {
    * @return The active resource manager URL.
    */
   String getActiveRMUrl();
+
+  /**
+   * @return The protocol used by YARN daemons.
+   */
+  String getYARNProtocol();
 }

+ 6 - 0
contrib/views/tez/src/main/java/org/apache/ambari/view/tez/ViewControllerImpl.java

@@ -61,6 +61,7 @@ public class ViewControllerImpl implements ViewController {
     Map<String, String> parameters = new HashMap<String, String>();
     parameters.put(ViewController.PARAM_YARN_ATS_URL, getActiveATSUrl());
     parameters.put(ViewController.PARAM_YARN_RESOURCEMANAGER_URL, getActiveRMUrl());
+    parameters.put(ViewController.PARAM_YARN_PROTOCOL, getYARNProtocol());
     status.setParameters(parameters);
     return status;
   }
@@ -82,5 +83,10 @@ public class ViewControllerImpl implements ViewController {
       throw new ActiveRMFetchException(ex);
     }
   }
+
+  @Override
+  public String getYARNProtocol() {
+    return ambariApi.getServices().getYARNProtocol();
+  }
 }
 

+ 38 - 2
contrib/views/tez/src/main/resources/ui/scripts/init-ambari-view.js

@@ -20,6 +20,32 @@ App.deferReadiness();
 
 var PATH_PARAM_NAME = "viewPath";
 
+/**
+ * Constructs URL for fetching Ambari view instance parameters.
+ * @return {String}
+ */
+function getStatusURL() {
+  var urlParts = location.pathname.split('/');
+
+  return "/api/v1/views/%@/versions/%@/instances/%@/resources/status".fmt(
+    urlParts[2],
+    urlParts[3],
+    urlParts[4]
+  );
+}
+
+function getStatus() {
+  var hashArray = location.pathname.split('/');
+
+  return $.ajax({
+    type: 'GET',
+    dataType: 'json',
+    async: true,
+    context: this,
+    url: getStatusURL(),
+  });
+}
+
 /**
  * Creates an object from query string
  * @param getQueryObject {String}
@@ -142,7 +168,7 @@ function scheduleChangeHandler(arguments) {
   setTimeout(onPathChange, 100);
 }
 
-function setConfigs() {
+function setConfigs(parameters) {
   var host = window.location.protocol +
       "//" +
       window.location.hostname +
@@ -154,11 +180,14 @@ function setConfigs() {
         urlParts[4]
       );
 
+  parameters = parameters || {};
+
   $.extend(true, App.Configs, {
     envDefaults: {
       isStandalone: false,
       timelineBaseUrl: host,
       RMWebUrl: host,
+      yarnProtocol: parameters["yarn.protocol"]
     },
     restNamespace: {
       timeline: '%@atsproxy/ws/v1/timeline'.fmt(resourcesPrefix),
@@ -180,6 +209,13 @@ function setConfigs() {
   App.advanceReadiness();
 }
 
+function loadParams() {
+  getStatus().always(function(status) {
+    status = status || {};
+    setConfigs(status.parameters);
+  });
+}
+
 if(!redirectionCheck()) {
   App.ApplicationRoute.reopen({
     actions: {
@@ -189,5 +225,5 @@ if(!redirectionCheck()) {
   });
 
   allowFullScreen();
-  setConfigs();
+  loadParams();
 }

+ 1 - 1
contrib/views/utils/pom.xml

@@ -19,7 +19,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.ambari.contrib.views</groupId>
   <artifactId>ambari-views-utils</artifactId>
-  <version>0.0.1.0-SNAPSHOT</version>
+  <version>2.0.0.0-SNAPSHOT</version>
   <name>Ambari View Utils</name>
 
   <parent>

+ 15 - 0
contrib/views/utils/src/main/java/org/apache/ambari/view/utils/ambari/Services.java

@@ -267,6 +267,21 @@ public class Services {
     }
   }
 
+  /**
+   * @return Returns the protocol used by YARN daemons, the value is always taken from the
+   * yarn-site.xml.
+   */
+  public String getYARNProtocol() {
+    String httpPolicy = getYarnConfig(YARN_HTTP_POLICY);
+
+    if (!(HTTP_ONLY.equals(httpPolicy) || HTTPS_ONLY.equals(httpPolicy))) {
+      LOG.error(String.format("RA030 Unknown value %s of yarn-site/yarn.http.policy. HTTP_ONLY assumed.", httpPolicy));
+      httpPolicy = HTTP_ONLY;
+    }
+
+    return getProtocol(httpPolicy);
+  }
+
   private String getATSUrlFromCluster() {
     String url;
 

+ 16 - 0
contrib/views/utils/src/test/java/org/apache/ambari/view/utils/ambari/ServicesTest.java

@@ -377,6 +377,22 @@ public class ServicesTest extends EasyMockSupport {
     assertEquals(HTTPS_RM_URL2, services.getRMUrl());
   }
 
+  @Test
+  public void basicGetYARNProtocol() throws Exception {
+    ViewContext viewContext = getViewContext(new HashMap<String, String>());
+    AmbariApi ambariApi = createNiceMock(AmbariApi.class);
+    Cluster cluster = createNiceMock(Cluster.class);
+
+    expect(ambariApi.isClusterAssociated()).andReturn(true).anyTimes();
+    setClusterExpectationWithEmptyWebappConfig(cluster, "HTTP_ONLY");
+    expect(ambariApi.getCluster()).andReturn(cluster).anyTimes();
+
+    Services services = new Services(ambariApi, viewContext);
+
+    replayAll();
+    assertEquals("http", services.getYARNProtocol());
+  }
+
   private void setClusterExpectation(Cluster cluster, String httpPolicy) {
     expect(cluster.getConfigurationValue("yarn-site", "yarn.resourcemanager.ha.enabled")).andReturn("false");
     expect(cluster.getConfigurationValue("yarn-site", "yarn.http.policy")).andReturn(httpPolicy);