FAQ
Author: vgumashta
Date: Tue Jun 10 17:29:15 2014
New Revision: 1601696

URL: http://svn.apache.org/r1601696
Log:
HIVE-7196 : Configure session by single open session call (Navis Ryu via Vaibhav Gumashta)

Modified:
     hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java
     hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java
     hive/trunk/jdbc/src/java/org/apache/hive/jdbc/Utils.java
     hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java
     hive/trunk/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java

Modified: hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java
URL: http://svn.apache.org/viewvc/hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java?rev=1601696&r1=1601695&r2=1601696&view=diff
==============================================================================
--- hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java (original)
+++ hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java Tue Jun 10 17:29:15 2014
@@ -60,7 +60,6 @@ import org.apache.hive.service.cli.opera
  import org.apache.hive.service.cli.operation.ClassicTableTypeMapping.ClassicTableTypes;
  import org.apache.hive.service.cli.operation.HiveTableTypeMapping;
  import org.apache.hive.service.cli.operation.TableTypeMappingFactory.TableTypeMappings;
-import org.apache.hive.service.server.HiveServer2;
  import org.junit.After;
  import org.junit.Before;
  import org.junit.BeforeClass;
@@ -105,7 +104,7 @@ public class TestJdbcDriver2 {
    @BeforeClass
    public static void setUpBeforeClass() throws SQLException, ClassNotFoundException{
      Class.forName(driverName);
- Connection con1 = getConnection();
+ Connection con1 = getConnection("default");

      Statement stmt1 = con1.createStatement();
      assertNotNull("Statement is null", stmt1);
@@ -130,7 +129,7 @@ public class TestJdbcDriver2 {

    @Before
    public void setUp() throws Exception {
- con = getConnection();
+ con = getConnection("default");

      Statement stmt = con.createStatement();
      assertNotNull("Statement is null", stmt);
@@ -214,14 +213,14 @@ public class TestJdbcDriver2 {
          +"' as select * from "+ tableName);
    }

- private static Connection getConnection() throws SQLException {
+ private static Connection getConnection(String postfix) throws SQLException {
      Connection con1;
      if (standAloneServer) {
        // get connection
- con1 = DriverManager.getConnection("jdbc:hive2://localhost:10000/default",
+ con1 = DriverManager.getConnection("jdbc:hive2://localhost:10000/" + postfix,
            "", "");
      } else {
- con1 = DriverManager.getConnection("jdbc:hive2://", "", "");
+ con1 = DriverManager.getConnection("jdbc:hive2:///" + postfix, "", "");
      }
      assertNotNull("Connection is null", con1);
      assertFalse("Connection should not be closed", con1.isClosed());
@@ -535,13 +534,26 @@ public class TestJdbcDriver2 {
      // execute() of Prepared statement
      ps.setString(1, val1);
      ps.execute();
- verifyConfValue(key, val1);
+ verifyConfValue(con, key, val1);

      // executeUpdate() of Prepared statement
      ps.clearParameters();
      ps.setString(1, val2);
      ps.executeUpdate();
- verifyConfValue(key, val2);
+ verifyConfValue(con, key, val2);
+ }
+
+ @Test
+ public void testSetOnConnection() throws Exception {
+ Connection connection = getConnection("test?conf1=conf2;conf3=conf4#var1=var2;var3=var4");
+ try {
+ verifyConfValue(connection, "conf1", "conf2");
+ verifyConfValue(connection, "conf3", "conf4");
+ verifyConfValue(connection, "var1", "var2");
+ verifyConfValue(connection, "var3", "var4");
+ } catch (Exception e) {
+ connection.close();
+ }
    }

    /**
@@ -551,14 +563,17 @@ public class TestJdbcDriver2 {
     * @param expectedVal
     * @throws Exception
     */
- private void verifyConfValue(String key, String expectedVal) throws Exception {
+ private void verifyConfValue(Connection con, String key, String expectedVal) throws Exception {
      Statement stmt = con.createStatement();
      ResultSet res = stmt.executeQuery("set " + key);
      assertTrue(res.next());
- String resultValues[] = res.getString(1).split("="); // "key = 'val'"
- assertEquals("Result not in key = val format", 2, resultValues.length);
- String result = resultValues[1].substring(1, resultValues[1].length() -1); // remove '
- assertEquals("Conf value should be set by execute()", expectedVal, result);
+ String value = res.getString(1);
+ String resultValues[] = value.split("="); // "key = 'val'"
+ assertEquals("Result not in key = val format: " + value, 2, resultValues.length);
+ if (resultValues[1].startsWith("'") && resultValues[1].endsWith("'")) {
+ resultValues[1] = resultValues[1].substring(1, resultValues[1].length() -1); // remove '
+ }
+ assertEquals("Conf value should be set by execute()", expectedVal, resultValues[1]);
    }

    @Test

Modified: hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java
URL: http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java?rev=1601696&r1=1601695&r2=1601696&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java (original)
+++ hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java Tue Jun 10 17:29:15 2014
@@ -52,7 +52,6 @@ import javax.security.sasl.SaslException

  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hive.ql.session.SessionState;
  import org.apache.hadoop.hive.shims.ShimLoader;
  import org.apache.hive.service.auth.HiveAuthFactory;
  import org.apache.hive.service.auth.KerberosSaslHelper;
@@ -190,9 +189,7 @@ public class HiveConnection implements j
      supportedProtocols.add(TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V7);

      // open client session
- openSession(connParams.getSessionVars());
-
- configureConnection(connParams.getDbName());
+ openSession(connParams);
    }

    private void openTransport() throws SQLException {
@@ -400,16 +397,28 @@ public class HiveConnection implements j
      return tokenStr;
    }

- private void openSession(Map<String, String> sessVars) throws SQLException {
+ private void openSession(Utils.JdbcConnectionParams connParams) throws SQLException {
      TOpenSessionReq openReq = new TOpenSessionReq();

+ Map<String, String> openConf = new HashMap<String, String>();
+ // for remote JDBC client, try to set the conf var using 'set foo=bar'
+ for (Entry<String, String> hiveConf : connParams.getHiveConfs().entrySet()) {
+ openConf.put("set:hiveconf:" + hiveConf.getKey(), hiveConf.getValue());
+ }
+ // For remote JDBC client, try to set the hive var using 'set hivevar:key=value'
+ for (Entry<String, String> hiveVar : connParams.getHiveVars().entrySet()) {
+ openConf.put("set:hivevar:" + hiveVar.getKey(), hiveVar.getValue());
+ }
+ // switch the database
+ openConf.put("use:database", connParams.getDbName());
+
      // set the session configuration
+ Map<String, String> sessVars = connParams.getSessionVars();
      if (sessVars.containsKey(HiveAuthFactory.HS2_PROXY_USER)) {
- Map<String, String> openConf = new HashMap<String, String>();
        openConf.put(HiveAuthFactory.HS2_PROXY_USER,
            sessVars.get(HiveAuthFactory.HS2_PROXY_USER));
- openReq.setConfiguration(openConf);
      }
+ openReq.setConfiguration(openConf);

      try {
        TOpenSessionResp openResp = client.OpenSession(openReq);
@@ -429,31 +438,6 @@ public class HiveConnection implements j
      isClosed = false;
    }

- private void configureConnection(String dbName) throws SQLException {
- // set the hive variable in session state for local mode
- if (isEmbeddedMode) {
- if (!hiveVarMap.isEmpty()) {
- SessionState.get().setHiveVariables(hiveVarMap);
- }
- } else {
- // for remote JDBC client, try to set the conf var using 'set foo=bar'
- Statement stmt = createStatement();
- for (Entry<String, String> hiveConf : hiveConfMap.entrySet()) {
- stmt.execute("set " + hiveConf.getKey() + "=" + hiveConf.getValue());
- }
-
- // For remote JDBC client, try to set the hive var using 'set hivevar:key=value'
- for (Entry<String, String> hiveVar : hiveVarMap.entrySet()) {
- stmt.execute("set hivevar:" + hiveVar.getKey() + "=" + hiveVar.getValue());
- }
- // if the client is setting a non-default db, then switch the database
- if (!Utils.DEFAULT_DATABASE.equalsIgnoreCase(dbName)) {
- stmt.execute("use " + dbName);
- }
- stmt.close();
- }
- }
-
    /**
     * @return username from sessConfMap
     */

Modified: hive/trunk/jdbc/src/java/org/apache/hive/jdbc/Utils.java
URL: http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/Utils.java?rev=1601696&r1=1601695&r2=1601696&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hive/jdbc/Utils.java (original)
+++ hive/trunk/jdbc/src/java/org/apache/hive/jdbc/Utils.java Tue Jun 10 17:29:15 2014
@@ -20,8 +20,7 @@ package org.apache.hive.jdbc;

  import java.net.URI;
  import java.sql.SQLException;
-import java.sql.Types;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
  import java.util.Map;
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;
@@ -51,9 +50,9 @@ public class Utils {
      private String host = null;
      private int port;
      private String dbName = DEFAULT_DATABASE;
- private Map<String,String> hiveConfs = new HashMap<String,String>();
- private Map<String,String> hiveVars = new HashMap<String,String>();
- private Map<String,String> sessionVars = new HashMap<String,String>();
+ private Map<String,String> hiveConfs = new LinkedHashMap<String,String>();
+ private Map<String,String> hiveVars = new LinkedHashMap<String,String>();
+ private Map<String,String> sessionVars = new LinkedHashMap<String,String>();
      private boolean isEmbeddedMode = false;

      public JdbcConnectionParams() {

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java?rev=1601696&r1=1601695&r2=1601696&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java Tue Jun 10 17:29:15 2014
@@ -103,42 +103,39 @@ public class SetProcessor implements Com
    public void init() {
    }

- private CommandProcessorResponse setVariable(String varname, String varvalue){
+ public CommandProcessorResponse executeSetVariable(String varname, String varvalue) {
+ try {
+ return new CommandProcessorResponse(setVariable(varname, varvalue));
+ } catch (Exception e) {
+ return new CommandProcessorResponse(1, e.getMessage(), "42000");
+ }
+ }
+
+ public static int setVariable(String varname, String varvalue) throws IllegalArgumentException {
      SessionState ss = SessionState.get();
      if (varvalue.contains("\n")){
        ss.err.println("Warning: Value had a \\n character in it.");
      }
      if (varname.startsWith(SetProcessor.ENV_PREFIX)){
        ss.err.println("env:* variables can not be set.");
- return new CommandProcessorResponse(1);
+ return 1;
      } else if (varname.startsWith(SetProcessor.SYSTEM_PREFIX)){
        String propName = varname.substring(SetProcessor.SYSTEM_PREFIX.length());
        System.getProperties().setProperty(propName, new VariableSubstitution().substitute(ss.getConf(),varvalue));
- return new CommandProcessorResponse(0);
      } else if (varname.startsWith(SetProcessor.HIVECONF_PREFIX)){
        String propName = varname.substring(SetProcessor.HIVECONF_PREFIX.length());
- try {
- setConf(varname, propName, varvalue, false);
- return new CommandProcessorResponse(0);
- } catch (IllegalArgumentException e) {
- return new CommandProcessorResponse(1, e.getMessage(), "42000");
- }
+ setConf(varname, propName, varvalue, false);
      } else if (varname.startsWith(SetProcessor.HIVEVAR_PREFIX)) {
        String propName = varname.substring(SetProcessor.HIVEVAR_PREFIX.length());
        ss.getHiveVariables().put(propName, new VariableSubstitution().substitute(ss.getConf(),varvalue));
- return new CommandProcessorResponse(0);
      } else {
- try {
- setConf(varname, varname, varvalue, true);
- return new CommandProcessorResponse(0);
- } catch (IllegalArgumentException e) {
- return new CommandProcessorResponse(1, e.getMessage(), "42000");
- }
+ setConf(varname, varname, varvalue, true);
      }
+ return 0;
    }

    // returns non-null string for validation fail
- private void setConf(String varname, String key, String varvalue, boolean register)
+ private static void setConf(String varname, String key, String varvalue, boolean register)
          throws IllegalArgumentException {
      HiveConf conf = SessionState.get().getConf();
      String value = new VariableSubstitution().substitute(conf, varvalue);
@@ -265,7 +262,7 @@ public class SetProcessor implements Com
          ss.setIsSilent(getBoolean(part[1]));
          return new CommandProcessorResponse(0);
        }
- return setVariable(part[0],part[1]);
+ return executeSetVariable(part[0],part[1]);
      } else {
        return getVariable(nwcmd);
      }

Modified: hive/trunk/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java
URL: http://svn.apache.org/viewvc/hive/trunk/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java?rev=1601696&r1=1601695&r2=1601696&view=diff
==============================================================================
--- hive/trunk/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java (original)
+++ hive/trunk/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java Tue Jun 10 17:29:15 2014
@@ -34,6 +34,7 @@ import org.apache.hadoop.hive.metastore.
  import org.apache.hadoop.hive.ql.exec.FetchFormatter;
  import org.apache.hadoop.hive.ql.exec.ListSinkOperator;
  import org.apache.hadoop.hive.ql.history.HiveHistory;
+import org.apache.hadoop.hive.ql.processors.SetProcessor;
  import org.apache.hadoop.hive.ql.session.SessionState;
  import org.apache.hive.common.util.HiveVersionInfo;
  import org.apache.hive.service.auth.HiveAuthFactory;
@@ -88,12 +89,6 @@ public class HiveSessionImpl implements
      this.hiveConf = new HiveConf(serverhiveConf);
      this.ipAddress = ipAddress;

- //set conf properties specified by user from client side
- if (sessionConfMap != null) {
- for (Map.Entry<String, String> entry : sessionConfMap.entrySet()) {
- hiveConf.verifyAndSet(entry.getKey(), entry.getValue());
- }
- }
      // set an explicit session name to control the download directory name
      hiveConf.set(ConfVars.HIVESESSIONID.varname,
          sessionHandle.getHandleIdentifier().toString());
@@ -101,9 +96,28 @@ public class HiveSessionImpl implements
      hiveConf.set(ListSinkOperator.OUTPUT_FORMATTER,
          FetchFormatter.ThriftFormatter.class.getName());
      hiveConf.setInt(ListSinkOperator.OUTPUT_PROTOCOL, protocol.getValue());
+
      sessionState = new SessionState(hiveConf, username);
      sessionState.setIsHiveServerQuery(true);
      SessionState.start(sessionState);
+
+ //set conf properties specified by user from client side
+ if (sessionConfMap != null) {
+ configureSession(sessionConfMap);
+ }
+ }
+
+ private void configureSession(Map<String, String> sessionConfMap) {
+ for (Map.Entry<String, String> entry : sessionConfMap.entrySet()) {
+ String key = entry.getKey();
+ if (key.startsWith("set:")) {
+ SetProcessor.setVariable(key.substring(4), entry.getValue());
+ } else if (key.startsWith("use:")) {
+ SessionState.get().setCurrentDatabase(entry.getValue());
+ } else {
+ hiveConf.verifyAndSet(key, entry.getValue());
+ }
+ }
    }

    @Override

Search Discussions

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupcommits @
categorieshive, hadoop
postedJun 10, '14 at 5:29p
activeJun 10, '14 at 5:29p
posts1
users1
websitehive.apache.org

1 user in discussion

Vgumashta: 1 post

People

Translate

site design / logo © 2021 Grokbase