AMBARI-18437. Hive view not working on LLAP enabled cluster. (dipayanb)

Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e7074eca
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e7074eca
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e7074eca

Branch: refs/heads/branch-dev-patch-upgrade
Commit: e7074ecab2960ea3b8ab9396156413529cff3085
Parents: e0d4a87
Author: Dipayan Bhowmick <dipayan.bhowm...@gmail.com>
Authored: Sat Oct 8 01:05:04 2016 +0530
Committer: Dipayan Bhowmick <dipayan.bhowm...@gmail.com>
Committed: Sat Oct 8 01:07:32 2016 +0530

----------------------------------------------------------------------
 .../ambari/view/hive2/ConnectionFactory.java    | 37 +++++++++++++-------
 .../ambari/view/hive2/PropertyValidator.java    |  8 +++++
 .../views/hive-next/src/main/resources/view.xml |  9 +++++
 3 files changed, 42 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/e7074eca/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/ConnectionFactory.java
----------------------------------------------------------------------
diff --git 
a/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/ConnectionFactory.java
 
b/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/ConnectionFactory.java
index 7295f3a..8fefe15 100644
--- 
a/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/ConnectionFactory.java
+++ 
b/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/ConnectionFactory.java
@@ -33,7 +33,7 @@ public class ConnectionFactory {
   private static final String ZK_HIVE_NAMESPACE_KEY = 
"hive.server2.zookeeper.namespace";
   private static final String ZK_HIVE_QUORUM = "hive.zookeeper.quorum";
 
-  private static final  String AMBARI_HIVE_SERVICE_NAME = "HIVE";
+  private static final String AMBARI_HIVE_SERVICE_NAME = "HIVE";
   private static final String AMBARI_HIVESERVER_COMPONENT_NAME = "HIVE_SERVER";
 
   private static final String HIVE_SITE = "hive-site";
@@ -47,6 +47,7 @@ public class ConnectionFactory {
   private static final String HIVE_TRANSPORT_MODE_KEY = 
"hive.server2.transport.mode";
   private static final String HTTP_PATH_KEY = "hive.server2.thrift.http.path";
   private static final String HS2_PROXY_USER = "hive.server2.proxy.user";
+  private static final String USE_HIVE_INTERACTIVE_MODE = 
"use.hive.interactive.mode";
 
 
   public static ConnectionConfig create(ViewContext context) {
@@ -66,9 +67,16 @@ public class ConnectionFactory {
   }
 
   private static String getFromHiveConfiguration(ViewContext context) {
+    boolean useLLAP = 
Boolean.valueOf(context.getProperties().get(USE_HIVE_INTERACTIVE_MODE));
     String transportMode = 
context.getCluster().getConfigurationValue(HIVE_SITE, HIVE_TRANSPORT_MODE_KEY);
     String binaryPort = context.getCluster().getConfigurationValue(HIVE_SITE, 
BINARY_PORT_KEY);
     String httpPort = context.getCluster().getConfigurationValue(HIVE_SITE, 
HTTP_PORT_KEY);
+    if (useLLAP) {
+      binaryPort = 
context.getCluster().getConfigurationValue(HIVE_INTERACTIVE_SITE, 
BINARY_PORT_KEY);
+      httpPort = 
context.getCluster().getConfigurationValue(HIVE_INTERACTIVE_SITE, 
HTTP_PORT_KEY);
+    }
+
+
     String pathKey = context.getCluster().getConfigurationValue(HIVE_SITE, 
HTTP_PATH_KEY);
     List<String> hiveHosts = 
context.getCluster().getHostsForServiceComponent(AMBARI_HIVE_SERVICE_NAME, 
AMBARI_HIVESERVER_COMPONENT_NAME);
     String sessionParams = context.getProperties().get(HIVE_SESSION_PARAMS);
@@ -87,9 +95,10 @@ public class ConnectionFactory {
 
     StringBuilder builder = new StringBuilder();
     builder.append("jdbc:hive2://")
-      .append(concatHostPorts)
-      .append(";")
-      .append(sessionParams);
+        .append(concatHostPorts);
+    if(!Strings.isNullOrEmpty(sessionParams)) {
+      builder.append(";").append(sessionParams);
+    }
 
     if (!isBinary) {
       
builder.append(";").append("transportMode=http;httpPath=").append(pathKey);
@@ -99,27 +108,31 @@ public class ConnectionFactory {
   }
 
   private static String getFromClusterZookeeperConfig(ViewContext context) {
+    boolean useLLAP = 
Boolean.valueOf(context.getProperties().get(USE_HIVE_INTERACTIVE_MODE));
     String quorum = context.getCluster().getConfigurationValue(HIVE_SITE, 
ZK_HIVE_QUORUM);
-    if (quorum == null) {
-      quorum = 
context.getCluster().getConfigurationValue(HIVE_INTERACTIVE_SITE, 
ZK_HIVE_QUORUM);
-    }
 
     String namespace = context.getCluster().getConfigurationValue(HIVE_SITE, 
ZK_HIVE_NAMESPACE_KEY);
-    if (namespace == null) {
+    if (useLLAP) {
       namespace = 
context.getCluster().getConfigurationValue(HIVE_INTERACTIVE_SITE, 
ZK_HIVE_NAMESPACE_KEY);
     }
 
     String sessionParams = context.getProperties().get(HIVE_SESSION_PARAMS);
 
     String formatted = 
String.format("jdbc:hive2://%s/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=%s",
 quorum, namespace);
-    if(Strings.isNullOrEmpty(sessionParams)){
+    if (Strings.isNullOrEmpty(sessionParams)) {
       sessionParams = "";
     }
 
-    if(!sessionParams.contains(HS2_PROXY_USER)) {
-      sessionParams = sessionParams + ";" + HS2_PROXY_USER + "=" + 
context.getUsername();
+    if (!sessionParams.contains(HS2_PROXY_USER)) {
+      if (!sessionParams.isEmpty()) {
+        sessionParams += ";";
+      }
+      sessionParams = sessionParams + HS2_PROXY_USER + "=" + 
context.getUsername();
+    }
+
+    if (sessionParams.isEmpty()) {
+      return formatted;
     }
-    
     return formatted + ";" + sessionParams;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/e7074eca/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/PropertyValidator.java
----------------------------------------------------------------------
diff --git 
a/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/PropertyValidator.java
 
b/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/PropertyValidator.java
index 779e950..ad59e34 100644
--- 
a/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/PropertyValidator.java
+++ 
b/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/PropertyValidator.java
@@ -30,6 +30,7 @@ public class PropertyValidator implements Validator {
   public static final String HIVE_PORT = "hive.port";
   public static final String YARN_ATS_URL = "yarn.ats.url";
   public static final String HIVE_SESSION_PARAMS = "hive.session.params";
+  public static final String USE_HIVE_INTERACTIVE_MODE = 
"use.hive.interactive.mode";
 
   @Override
   public ValidationResult validateInstance(ViewInstanceDefinition 
viewInstanceDefinition, ValidationContext validationContext) {
@@ -52,6 +53,13 @@ public class PropertyValidator implements Validator {
       }
     }
 
+    if (property.equals(USE_HIVE_INTERACTIVE_MODE)) {
+      String value = 
viewInstanceDefinition.getPropertyMap().get(USE_HIVE_INTERACTIVE_MODE);
+      if (!("true".equalsIgnoreCase(value) || 
"false".equalsIgnoreCase(value))) {
+        return new InvalidPropertyValidationResult(false, "Must be 'true' or 
'false'");
+      }
+    }
+
     // if associated with cluster(local or remote), no need to validate 
associated properties
     ClusterType clusterType = viewInstanceDefinition.getClusterType();
     if (clusterType == ClusterType.LOCAL_AMBARI || clusterType == 
ClusterType.REMOTE_AMBARI) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/e7074eca/contrib/views/hive-next/src/main/resources/view.xml
----------------------------------------------------------------------
diff --git a/contrib/views/hive-next/src/main/resources/view.xml 
b/contrib/views/hive-next/src/main/resources/view.xml
index 1754686..671591a 100644
--- a/contrib/views/hive-next/src/main/resources/view.xml
+++ b/contrib/views/hive-next/src/main/resources/view.xml
@@ -207,6 +207,15 @@
         <required>true</required>
     </parameter>
 
+
+    <parameter>
+        <name>use.hive.interactive.mode</name>
+        <description>Connects to the hive interactive server if set 
true</description>
+        <label>Use Interactive Mode(Tech Preview)</label>
+        <default-value>false</default-value>
+        <required>true</required>
+    </parameter>
+
     <parameter>
         <name>yarn.ats.url</name>
         <description>The URL to the YARN Application Timeline Server, used to 
provide Jobs information, typically, this is the 
yarn.timeline-service.webapp.address property in the yarn-site.xml 
configuration.</description>

Reply via email to