This is an automated email from the ASF dual-hosted git repository.

liyang pushed a commit to branch sync
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit 25b4b3bc06b30a4030f4949d97a05566bcbddca4
Author: ycq <y...@meitu.com>
AuthorDate: Wed Mar 7 17:10:38 2018 +0800

    KYLIN-3277 Kylin should override hiveconf settings when connecting to hive 
using jdbc
    
    Signed-off-by: nichunen <chunen...@kyligence.io>
---
 .../apache/kylin/common/util/HiveCmdBuilder.java   |  47 +---------
 .../kylin/common/util/HiveConfigurationUtil.java   | 101 +++++++++++++++++++++
 .../kylin/source/hive/BeelineHiveClient.java       |  16 +++-
 3 files changed, 115 insertions(+), 49 deletions(-)

diff --git 
a/core-common/src/main/java/org/apache/kylin/common/util/HiveCmdBuilder.java 
b/core-common/src/main/java/org/apache/kylin/common/util/HiveCmdBuilder.java
index fcfc598..9a9c65b 100644
--- a/core-common/src/main/java/org/apache/kylin/common/util/HiveCmdBuilder.java
+++ b/core-common/src/main/java/org/apache/kylin/common/util/HiveCmdBuilder.java
@@ -46,12 +46,12 @@ public class HiveCmdBuilder {
     }
 
     private KylinConfig kylinConfig;
-    final private Map<String, String> hiveConfProps = new HashMap<>();
+    final private Map<String, String> hiveConfProps;
     final private ArrayList<String> statements = Lists.newArrayList();
 
     public HiveCmdBuilder() {
         kylinConfig = KylinConfig.getInstanceFromEnv();
-        loadHiveConfiguration();
+        hiveConfProps = HiveConfigurationUtil.loadHiveConfiguration();
     }
 
     public String build() {
@@ -153,47 +153,4 @@ public class HiveCmdBuilder {
         return build();
     }
 
-    private void loadHiveConfiguration() {
-
-        File hiveConfFile;
-        String hiveConfFileName = (HIVE_CONF_FILENAME + ".xml");
-        String path = System.getProperty(KylinConfig.KYLIN_CONF);
-
-        if (StringUtils.isNotEmpty(path)) {
-            hiveConfFile = new File(path, hiveConfFileName);
-        } else {
-            path = KylinConfig.getKylinHome();
-            if (StringUtils.isEmpty(path)) {
-                logger.error("KYLIN_HOME is not set, can not locate hive conf: 
{}.xml", HIVE_CONF_FILENAME);
-                return;
-            }
-            hiveConfFile = new File(path + File.separator + "conf", 
hiveConfFileName);
-        }
-
-        if (!hiveConfFile.exists()) {
-            throw new RuntimeException("Missing config file: " + 
hiveConfFile.getAbsolutePath());
-        }
-
-        String fileUrl = 
OptionsHelper.convertToFileURL(hiveConfFile.getAbsolutePath());
-
-        try {
-            File file = new File(fileUrl);
-            if (file.exists()) {
-                DocumentBuilderFactory factory = 
DocumentBuilderFactory.newInstance();
-                DocumentBuilder builder = factory.newDocumentBuilder();
-                Document doc = builder.parse(file);
-                NodeList nl = doc.getElementsByTagName("property");
-                hiveConfProps.clear();
-                for (int i = 0; i < nl.getLength(); i++) {
-                    String key = 
doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue();
-                    String value = 
doc.getElementsByTagName("value").item(i).getFirstChild().getNodeValue();
-                    if (!key.equals("tmpjars")) {
-                        hiveConfProps.put(key, value);
-                    }
-                }
-            }
-        } catch (Exception e) {
-            throw new RuntimeException("Failed to parse hive conf file ", e);
-        }
-    }
 }
\ No newline at end of file
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/util/HiveConfigurationUtil.java
 
b/core-common/src/main/java/org/apache/kylin/common/util/HiveConfigurationUtil.java
new file mode 100644
index 0000000..a8cba61
--- /dev/null
+++ 
b/core-common/src/main/java/org/apache/kylin/common/util/HiveConfigurationUtil.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.kylin.common.util;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.kylin.common.KylinConfig;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.apache.kylin.common.util.HiveCmdBuilder.HIVE_CONF_FILENAME;
+
+/**
+ * @author ycq
+ * @since 2018-03-05
+ */
+public class HiveConfigurationUtil {
+
+    private static final org.slf4j.Logger logger = 
LoggerFactory.getLogger(HiveConfigurationUtil.class);
+    private static final String HIVE_CONF_PREFIX = "hiveconf:";
+
+    public static Properties loadHiveJDBCProperties() {
+        Map<String, String> hiveConfiguration = loadHiveConfiguration();
+        Properties ret = new Properties();
+        for (Map.Entry<String, String> entry : hiveConfiguration.entrySet()) {
+            ret.put(HIVE_CONF_PREFIX + entry.getKey(), entry.getValue());
+        }
+        return ret;
+    }
+
+    public static Map<String, String> loadHiveConfiguration() {
+        Map<String, String> hiveConfProps = new HashMap<>();
+        File hiveConfFile;
+        String hiveConfFileName = (HIVE_CONF_FILENAME + ".xml");
+        String path = System.getProperty(KylinConfig.KYLIN_CONF);
+
+        if (StringUtils.isNotEmpty(path)) {
+            hiveConfFile = new File(path, hiveConfFileName);
+        } else {
+            path = KylinConfig.getKylinHome();
+            if (StringUtils.isEmpty(path)) {
+                logger.error("KYLIN_HOME is not set, can not locate hive conf: 
{}.xml", HIVE_CONF_FILENAME);
+                return hiveConfProps;
+            }
+            hiveConfFile = new File(path + File.separator + "conf", 
hiveConfFileName);
+        }
+
+        if (!hiveConfFile.exists()) {
+            throw new RuntimeException("Failed to read " + HIVE_CONF_FILENAME 
+ ".xml");
+        }
+
+        String fileUrl = 
OptionsHelper.convertToFileURL(hiveConfFile.getAbsolutePath());
+
+        try {
+            File file = new File(fileUrl);
+            if (file.exists()) {
+                DocumentBuilderFactory factory = 
DocumentBuilderFactory.newInstance();
+                DocumentBuilder builder = factory.newDocumentBuilder();
+                Document doc = builder.parse(file);
+                NodeList nl = doc.getElementsByTagName("property");
+                hiveConfProps.clear();
+                for (int i = 0; i < nl.getLength(); i++) {
+                    String key = 
doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue();
+                    String value = 
doc.getElementsByTagName("value").item(i).getFirstChild().getNodeValue();
+                    if (!key.equals("tmpjars")) {
+                        hiveConfProps.put(key, value);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            throw new RuntimeException("Failed to parse hive conf file ", e);
+        }
+        return hiveConfProps;
+    }
+
+}
+
+
diff --git 
a/source-hive/src/main/java/org/apache/kylin/source/hive/BeelineHiveClient.java 
b/source-hive/src/main/java/org/apache/kylin/source/hive/BeelineHiveClient.java
index 747b1bb..593ad96 100644
--- 
a/source-hive/src/main/java/org/apache/kylin/source/hive/BeelineHiveClient.java
+++ 
b/source-hive/src/main/java/org/apache/kylin/source/hive/BeelineHiveClient.java
@@ -26,25 +26,30 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.List;
+import java.util.Properties;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.common.util.DBUtils;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
+import org.apache.kylin.common.util.HiveConfigurationUtil;
 
 public class BeelineHiveClient implements IHiveClient {
 
+    private static final String HIVE_AUTH_USER = "user";
+    private static final String HIVE_AUTH_PASSWD = "password";
     private Connection cnct;
     private Statement stmt;
     private DatabaseMetaData metaData;
 
+
     public BeelineHiveClient(String beelineParams) {
         if (StringUtils.isEmpty(beelineParams)) {
             throw new IllegalArgumentException("BeelineParames cannot be 
empty");
         }
         String[] splits = StringUtils.split(beelineParams);
-        String url = null, username = null, password = null;
+        String url = "", username = "", password = "";
         for (int i = 0; i < splits.length; i++) {
             if ("-u".equals(splits[i])) {
                 url = stripQuotes(splits[i + 1]);
@@ -56,13 +61,16 @@ public class BeelineHiveClient implements IHiveClient {
                 password = stripQuotes(splits[i + 1]);
             }
         }
-        this.init(url, username, password);
+        Properties jdbcProperties = 
HiveConfigurationUtil.loadHiveJDBCProperties();
+        jdbcProperties.put(HIVE_AUTH_PASSWD, password);
+        jdbcProperties.put(HIVE_AUTH_USER, username);
+        this.init(url, jdbcProperties);
     }
 
-    private void init(String url, String username, String password) {
+    private void init(String url, Properties hiveProperties) {
         try {
             Class.forName("org.apache.hive.jdbc.HiveDriver");
-            cnct = DriverManager.getConnection(url, username, password);
+            cnct = DriverManager.getConnection(url, hiveProperties);
             stmt = cnct.createStatement();
             metaData = cnct.getMetaData();
         } catch (SQLException | ClassNotFoundException e) {

-- 
To stop receiving notification emails like this one, please contact
liy...@apache.org.

Reply via email to