You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ai...@apache.org on 2016/05/23 14:25:53 UTC
hive git commit: HIVE-13502: Beeline doesnt support session
parameters in JDBC URL as documentation states. (Naveen Gangam,
reviewed by Aihua Xu)
Repository: hive
Updated Branches:
refs/heads/master fedd6596c -> b84154be3
HIVE-13502: Beeline doesnt support session parameters in JDBC URL as documentation states. (Naveen Gangam, reviewed by Aihua Xu)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/b84154be
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/b84154be
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/b84154be
Branch: refs/heads/master
Commit: b84154be3ca8120062ebc14851e5860521716da1
Parents: fedd659
Author: Aihua Xu <ai...@apache.org>
Authored: Mon May 23 10:25:13 2016 -0400
Committer: Aihua Xu <ai...@apache.org>
Committed: Mon May 23 10:25:13 2016 -0400
----------------------------------------------------------------------
.../java/org/apache/hive/beeline/BeeLine.java | 14 +++-
.../java/org/apache/hive/beeline/Commands.java | 72 +++++++++++++-------
.../hive/beeline/TestBeeLineWithArgs.java | 24 ++++++-
jdbc/src/java/org/apache/hive/jdbc/Utils.java | 54 +++++++++------
4 files changed, 116 insertions(+), 48 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/b84154be/beeline/src/java/org/apache/hive/beeline/BeeLine.java
----------------------------------------------------------------------
diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLine.java b/beeline/src/java/org/apache/hive/beeline/BeeLine.java
index 734eeb8..9138613 100644
--- a/beeline/src/java/org/apache/hive/beeline/BeeLine.java
+++ b/beeline/src/java/org/apache/hive/beeline/BeeLine.java
@@ -93,6 +93,9 @@ import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.io.IOUtils;
import org.apache.hive.beeline.cli.CliOptionsProcessor;
+import org.apache.hive.jdbc.Utils;
+import org.apache.hive.jdbc.Utils.JdbcConnectionParams;
+
/**
* A console SQL shell with command completion.
* <p>
@@ -139,7 +142,6 @@ public class BeeLine implements Closeable {
private static final Options options = new Options();
public static final String BEELINE_DEFAULT_JDBC_DRIVER = "org.apache.hive.jdbc.HiveDriver";
- public static final String BEELINE_DEFAULT_JDBC_URL = "jdbc:hive2://";
public static final String DEFAULT_DATABASE_NAME = "default";
private static final String SCRIPT_OUTPUT_PREFIX = ">>>";
@@ -766,6 +768,14 @@ public class BeeLine implements Closeable {
*/
if (url != null) {
+ if (user == null) {
+ user = Utils.parsePropertyFromUrl(url, JdbcConnectionParams.AUTH_USER);
+ }
+
+ if (pass == null) {
+ pass = Utils.parsePropertyFromUrl(url, JdbcConnectionParams.AUTH_PASSWD);
+ }
+
String com = constructCmd(url, user, pass, driver, false);
String comForDebug = constructCmd(url, user, pass, driver, true);
debug("issuing: " + comForDebug);
@@ -894,7 +904,7 @@ public class BeeLine implements Closeable {
}
private int embeddedConnect() {
- if (!execCommandWithPrefix("!connect " + BEELINE_DEFAULT_JDBC_URL + " '' ''")) {
+ if (!execCommandWithPrefix("!connect " + Utils.URL_PREFIX + " '' ''")) {
return ERRNO_OTHER;
} else {
return ERRNO_OK;
http://git-wip-us.apache.org/repos/asf/hive/blob/b84154be/beeline/src/java/org/apache/hive/beeline/Commands.java
----------------------------------------------------------------------
diff --git a/beeline/src/java/org/apache/hive/beeline/Commands.java b/beeline/src/java/org/apache/hive/beeline/Commands.java
index 80703ff..3a204c0 100644
--- a/beeline/src/java/org/apache/hive/beeline/Commands.java
+++ b/beeline/src/java/org/apache/hive/beeline/Commands.java
@@ -61,6 +61,8 @@ import java.util.TreeSet;
import org.apache.hadoop.hive.common.cli.ShellCmdExecutor;
import org.apache.hive.jdbc.HiveStatement;
+import org.apache.hive.jdbc.Utils;
+import org.apache.hive.jdbc.Utils.JdbcConnectionParams;
public class Commands {
@@ -1314,18 +1316,41 @@ public class Commands {
Properties props = new Properties();
if (url != null) {
String saveUrl = getUrlToUse(url);
- props.setProperty("url", saveUrl);
+ props.setProperty(JdbcConnectionParams.PROPERTY_URL, url);
}
+
+ String value = null;
if (driver != null) {
- props.setProperty("driver", driver);
+ props.setProperty(JdbcConnectionParams.PROPERTY_DRIVER, driver);
+ } else {
+ value = Utils.parsePropertyFromUrl(url, JdbcConnectionParams.PROPERTY_DRIVER);
+ if (value != null) {
+ props.setProperty(JdbcConnectionParams.PROPERTY_DRIVER, value);
+ }
}
+
if (user != null) {
- props.setProperty("user", user);
+ props.setProperty(JdbcConnectionParams.AUTH_USER, user);
+ } else {
+ value = Utils.parsePropertyFromUrl(url, JdbcConnectionParams.AUTH_USER);
+ if (value != null) {
+ props.setProperty(JdbcConnectionParams.AUTH_USER, value);
+ }
}
+
if (pass != null) {
- props.setProperty("password", pass);
+ props.setProperty(JdbcConnectionParams.AUTH_PASSWD, pass);
+ } else {
+ value = Utils.parsePropertyFromUrl(url, JdbcConnectionParams.AUTH_PASSWD);
+ if (value != null) {
+ props.setProperty(JdbcConnectionParams.AUTH_PASSWD, value);
+ }
}
+ value = Utils.parsePropertyFromUrl(url, JdbcConnectionParams.AUTH_TYPE);
+ if (value != null) {
+ props.setProperty(JdbcConnectionParams.AUTH_TYPE, value);
+ }
return connect(props);
}
@@ -1378,26 +1403,25 @@ public class Commands {
public boolean connect(Properties props) throws IOException {
String url = getProperty(props, new String[] {
- "url",
+ JdbcConnectionParams.PROPERTY_URL,
"javax.jdo.option.ConnectionURL",
"ConnectionURL",
});
String driver = getProperty(props, new String[] {
- "driver",
+ JdbcConnectionParams.PROPERTY_DRIVER,
"javax.jdo.option.ConnectionDriverName",
"ConnectionDriverName",
});
String username = getProperty(props, new String[] {
- "user",
+ JdbcConnectionParams.AUTH_USER,
"javax.jdo.option.ConnectionUserName",
"ConnectionUserName",
});
String password = getProperty(props, new String[] {
- "password",
+ JdbcConnectionParams.AUTH_PASSWD,
"javax.jdo.option.ConnectionPassword",
"ConnectionPassword",
});
- String auth = getProperty(props, new String[] {"auth"});
if (url == null || url.length() == 0) {
return beeLine.error("Property \"url\" is required");
@@ -1408,23 +1432,25 @@ public class Commands {
}
}
- beeLine.info("Connecting to " + url);
-
- if (username == null) {
- username = beeLine.getConsoleReader().readLine("Enter username for " + url + ": ");
- }
- props.setProperty("user", username);
- if (password == null) {
- password = beeLine.getConsoleReader().readLine("Enter password for " + url + ": ",
- new Character('*'));
- }
- props.setProperty("password", password);
-
+ String auth = getProperty(props, new String[] {JdbcConnectionParams.AUTH_TYPE});
if (auth == null) {
auth = beeLine.getOpts().getAuthType();
+ if (auth != null) {
+ props.setProperty(JdbcConnectionParams.AUTH_TYPE, auth);
+ }
}
- if (auth != null) {
- props.setProperty("auth", auth);
+
+ beeLine.info("Connecting to " + url);
+ if (Utils.parsePropertyFromUrl(url, JdbcConnectionParams.AUTH_PRINCIPAL) == null) {
+ if (username == null) {
+ username = beeLine.getConsoleReader().readLine("Enter username for " + url + ": ");
+ }
+ props.setProperty(JdbcConnectionParams.AUTH_USER, username);
+ if (password == null) {
+ password = beeLine.getConsoleReader().readLine("Enter password for " + url + ": ",
+ new Character('*'));
+ }
+ props.setProperty(JdbcConnectionParams.AUTH_PASSWD, password);
}
try {
http://git-wip-us.apache.org/repos/asf/hive/blob/b84154be/itests/hive-unit/src/test/java/org/apache/hive/beeline/TestBeeLineWithArgs.java
----------------------------------------------------------------------
diff --git a/itests/hive-unit/src/test/java/org/apache/hive/beeline/TestBeeLineWithArgs.java b/itests/hive-unit/src/test/java/org/apache/hive/beeline/TestBeeLineWithArgs.java
index f9909ad..ecfeddb 100644
--- a/itests/hive-unit/src/test/java/org/apache/hive/beeline/TestBeeLineWithArgs.java
+++ b/itests/hive-unit/src/test/java/org/apache/hive/beeline/TestBeeLineWithArgs.java
@@ -39,6 +39,7 @@ import java.util.List;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.conf.HiveConf;
+import org.apache.hive.jdbc.Utils;
import org.apache.hive.jdbc.miniHS2.MiniHS2;
import org.junit.AfterClass;
import org.junit.Assert;
@@ -175,6 +176,7 @@ public class TestBeeLineWithArgs {
// Put the script content in a temp file
File scriptFile = File.createTempFile(this.getClass().getSimpleName(), "temp");
+ System.out.println("script file is " + scriptFile.getAbsolutePath());
scriptFile.deleteOnExit();
PrintStream os = new PrintStream(new FileOutputStream(scriptFile));
os.print(scriptText);
@@ -655,7 +657,7 @@ public class TestBeeLineWithArgs {
@Test
public void testEmbeddedBeelineConnection() throws Throwable{
- String embeddedJdbcURL = BeeLine.BEELINE_DEFAULT_JDBC_URL+"/Default";
+ String embeddedJdbcURL = Utils.URL_PREFIX+"/Default";
List<String> argList = getBaseArgs(embeddedJdbcURL);
argList.add("--hivevar");
argList.add("DUMMY_TBL=embedded_table");
@@ -770,7 +772,7 @@ public class TestBeeLineWithArgs {
@Test
public void testEmbeddedBeelineOutputs() throws Throwable{
- String embeddedJdbcURL = BeeLine.BEELINE_DEFAULT_JDBC_URL+"/Default";
+ String embeddedJdbcURL = Utils.URL_PREFIX+"/Default";
List<String> argList = getBaseArgs(embeddedJdbcURL);
// Set to non-zk lock manager to avoid trying to connect to zookeeper
final String SCRIPT_TEXT =
@@ -843,4 +845,22 @@ public class TestBeeLineWithArgs {
}
+ /**
+ * Attempt to execute a simple script file with the usage of user & password variables in URL.
+ * Test for presence of an expected pattern
+ * in the output (stdout or stderr), fail if not found
+ * Print PASSED or FAILED
+ */
+ @Test
+ public void testConnectionWithURLParams() throws Throwable {
+ final String EXPECTED_PATTERN = " hivetest ";
+ List<String> argList = new ArrayList<String>();
+ argList.add("-d");
+ argList.add(BeeLine.BEELINE_DEFAULT_JDBC_DRIVER);
+ argList.add("-u");
+ argList.add(miniHS2.getBaseJdbcURL() + ";user=hivetest;password=hive");
+ String SCRIPT_TEXT = "select current_user();";
+
+ testScriptFile( SCRIPT_TEXT, EXPECTED_PATTERN, true, argList);
+ }
}
http://git-wip-us.apache.org/repos/asf/hive/blob/b84154be/jdbc/src/java/org/apache/hive/jdbc/Utils.java
----------------------------------------------------------------------
diff --git a/jdbc/src/java/org/apache/hive/jdbc/Utils.java b/jdbc/src/java/org/apache/hive/jdbc/Utils.java
index 42181d7..7ea6309 100644
--- a/jdbc/src/java/org/apache/hive/jdbc/Utils.java
+++ b/jdbc/src/java/org/apache/hive/jdbc/Utils.java
@@ -37,12 +37,12 @@ import org.apache.http.cookie.Cookie;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-class Utils {
+public class Utils {
static final Logger LOG = LoggerFactory.getLogger(Utils.class.getName());
/**
* The required prefix for the connection URL.
*/
- static final String URL_PREFIX = "jdbc:hive2://";
+ public static final String URL_PREFIX = "jdbc:hive2://";
/**
* If host is provided, without a port.
@@ -63,7 +63,7 @@ class Utils {
static final String HIVE_SERVER2_RETRY_TRUE = "true";
static final String HIVE_SERVER2_RETRY_FALSE = "false";
- static class JdbcConnectionParams {
+ public static class JdbcConnectionParams {
// Note on client side parameter naming convention:
// Prefer using a shorter camelCase param name instead of using the same name as the
// corresponding
@@ -76,31 +76,33 @@ class Utils {
// Retry setting
static final String RETRIES = "retries";
- static final String AUTH_TYPE = "auth";
+ public static final String AUTH_TYPE = "auth";
// We're deprecating this variable's name.
- static final String AUTH_QOP_DEPRECATED = "sasl.qop";
- static final String AUTH_QOP = "saslQop";
- static final String AUTH_SIMPLE = "noSasl";
- static final String AUTH_TOKEN = "delegationToken";
- static final String AUTH_USER = "user";
- static final String AUTH_PRINCIPAL = "principal";
- static final String AUTH_PASSWD = "password";
- static final String AUTH_KERBEROS_AUTH_TYPE = "kerberosAuthType";
- static final String AUTH_KERBEROS_AUTH_TYPE_FROM_SUBJECT = "fromSubject";
- static final String ANONYMOUS_USER = "anonymous";
- static final String ANONYMOUS_PASSWD = "anonymous";
- static final String USE_SSL = "ssl";
- static final String SSL_TRUST_STORE = "sslTrustStore";
- static final String SSL_TRUST_STORE_PASSWORD = "trustStorePassword";
+ public static final String AUTH_QOP_DEPRECATED = "sasl.qop";
+ public static final String AUTH_QOP = "saslQop";
+ public static final String AUTH_SIMPLE = "noSasl";
+ public static final String AUTH_TOKEN = "delegationToken";
+ public static final String AUTH_USER = "user";
+ public static final String AUTH_PRINCIPAL = "principal";
+ public static final String AUTH_PASSWD = "password";
+ public static final String AUTH_KERBEROS_AUTH_TYPE = "kerberosAuthType";
+ public static final String AUTH_KERBEROS_AUTH_TYPE_FROM_SUBJECT = "fromSubject";
+ public static final String ANONYMOUS_USER = "anonymous";
+ public static final String ANONYMOUS_PASSWD = "anonymous";
+ public static final String USE_SSL = "ssl";
+ public static final String SSL_TRUST_STORE = "sslTrustStore";
+ public static final String SSL_TRUST_STORE_PASSWORD = "trustStorePassword";
// We're deprecating the name and placement of this in the parsed map (from hive conf vars to
// hive session vars).
static final String TRANSPORT_MODE_DEPRECATED = "hive.server2.transport.mode";
- static final String TRANSPORT_MODE = "transportMode";
+ public static final String TRANSPORT_MODE = "transportMode";
// We're deprecating the name and placement of this in the parsed map (from hive conf vars to
// hive session vars).
static final String HTTP_PATH_DEPRECATED = "hive.server2.thrift.http.path";
- static final String HTTP_PATH = "httpPath";
- static final String SERVICE_DISCOVERY_MODE = "serviceDiscoveryMode";
+ public static final String HTTP_PATH = "httpPath";
+ public static final String SERVICE_DISCOVERY_MODE = "serviceDiscoveryMode";
+ public static final String PROPERTY_DRIVER = "driver";
+ public static final String PROPERTY_URL = "url";
// Don't use dynamic service discovery
static final String SERVICE_DISCOVERY_MODE_NONE = "none";
// Use ZooKeeper for indirection while using dynamic service discovery
@@ -631,4 +633,14 @@ class Utils {
}
return true;
}
+
+ public static String parsePropertyFromUrl(final String url, final String key) {
+ String[] tokens = url.split(";");
+ for (String token : tokens) {
+ if (token.trim().startsWith(key.trim() + "=")) {
+ return token.trim().substring((key.trim() + "=").length());
+ }
+ }
+ return null;
+ }
}