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

chengpan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kyuubi.git


The following commit(s) were added to refs/heads/master by this push:
     new ddf347ff7 [KYUUBI #6162] Cut out hive-common deps in beeline module
ddf347ff7 is described below

commit ddf347ff772120d4e3538439a3df5e2c3d94badd
Author: Cheng Pan <[email protected]>
AuthorDate: Tue Mar 12 11:23:10 2024 +0800

    [KYUUBI #6162] Cut out hive-common deps in beeline module
    
    # :mag: Description
    ## Issue References ๐Ÿ”—
    
    This PR removes the `hive-common` dep from the beeline module, and it is 
the final step of cutting out all Hive deps from the beeline module.
    
    ## Describe Your Solution ๐Ÿ”ง
    
    - Remove support of Hive CLI mode (a.k.a. `beelineMode == false`) on 
beeline.
    - Copy ~7 classes (~600 lines) from `org.apache.hive:hive-common:3.1.3`
    - Drop `org.apache.hive:hive-common:3.1.3` from beeline module
    
    Note: Hive CLI mode removal is necessary, because it is useless for Kyuubi 
cases and seriously coupled with `HiveConf`
    
    ## Types of changes :bookmark:
    
    - [ ] Bugfix (non-breaking change which fixes an issue)
    - [ ] New feature (non-breaking change which adds functionality)
    - [ ] Breaking change (fix or feature that would cause existing 
functionality to change)
    
    ## Test Plan ๐Ÿงช
    
    Pass GA, and manually tested.
    
    ```
    roothadoop-master1:/opt/kyuubi# beeline
    Connecting to 
jdbc:hive2://hadoop-master1.orb.local:10000/default;password=hive;user=hive
    Connected to: Apache Hive (version 2.3.9)
    Driver: Kyuubi Project Hive JDBC Client (version 1.9.0-SNAPSHOT)
    Beeline version 1.9.0-SNAPSHOT by Apache Kyuubi
    0: jdbc:hive2://hadoop-master1.orb.local:1000> select version();
    +--------------------------------------------------+
    |                       _c0                        |
    +--------------------------------------------------+
    | 2.3.9 r92dd0159f440ca7863be3232f3a683a510a62b9d  |
    +--------------------------------------------------+
    1 row selected (1.443 seconds)
    0: jdbc:hive2://hadoop-master1.orb.local:1000>
    ```
    
    ---
    
    # Checklist ๐Ÿ“
    
    - [x] This patch was not authored or co-authored using [Generative 
Tooling](https://www.apache.org/legal/generative-tooling.html)
    
    **Be nice. Be informative.**
    
    Closes #6162 from pan3793/beeline-3.
    
    Closes #6162
    
    e85f096b2 [Cheng Pan] relocate
    b2ce8ef61 [Cheng Pan] Cut out hive-common deps in beeline module
    
    Authored-by: Cheng Pan <[email protected]>
    Signed-off-by: Cheng Pan <[email protected]>
---
 NOTICE-binary                                      |   3 -
 kyuubi-hive-beeline/pom.xml                        |  12 --
 .../main/java/org/apache/hive/beeline/BeeLine.java | 141 +--------------
 .../java/org/apache/hive/beeline/BeeLineOpts.java  |  47 +----
 .../hive/beeline/ClientCommandHookFactory.java     |  48 +-----
 .../java/org/apache/hive/beeline/Commands.java     |  68 +-------
 .../org/apache/hive/beeline/KyuubiBeeLine.java     |   2 +-
 .../org/apache/hive/beeline/KyuubiCommands.java    |   7 +-
 .../main/java/org/apache/hive/beeline/Rows.java    |   2 +-
 .../hive/beeline/cli/CliOptionsProcessor.java      | 130 --------------
 .../hive/beeline/common/cli/EscapeCRLFHelper.java  |  78 +++++++++
 .../hive/beeline/common/cli/ShellCmdExecutor.java  |  53 ++++++
 .../hive/beeline/common/log/InPlaceUpdate.java     | 190 +++++++++++++++++++++
 .../hive/beeline/common/log/ProgressMonitor.java   |  69 ++++++++
 .../hive/beeline/common/util/HiveStringUtils.java  | 113 ++++++++++++
 .../beeline/common/util/ShutdownHookManager.java   | 125 ++++++++++++++
 .../hive/beeline/common/util/StreamPrinter.java    |  64 +++++++
 .../HiveSiteHS2ConnectionFileParser.java           | 120 ++++++++++---
 .../logs/KyuubiBeelineInPlaceUpdateStream.java     |   4 +-
 .../apache/hive/beeline/TestBeelineArgParsing.java |   2 +-
 .../hive/beeline/TestClientCommandHookFactory.java |  15 --
 .../java/org/apache/hive/beeline/TestCommands.java |   2 +-
 .../apache/hive/beeline/common/HiveTestUtils.java  | 104 +++++++++++
 .../TestUserHS2ConnectionFileParser.java           |   2 +-
 24 files changed, 923 insertions(+), 478 deletions(-)

diff --git a/NOTICE-binary b/NOTICE-binary
index a1b304dfa..237fdda56 100644
--- a/NOTICE-binary
+++ b/NOTICE-binary
@@ -189,9 +189,6 @@ JUnit (4.12)
 
 * License: Eclipse Public License
 
-Hive Common
-Copyright 2022 The Apache Software Foundation
-
 Apache HttpClient
 Copyright 1999-2020 The Apache Software Foundation
 
diff --git a/kyuubi-hive-beeline/pom.xml b/kyuubi-hive-beeline/pom.xml
index 0b3bbf48f..8a650015b 100644
--- a/kyuubi-hive-beeline/pom.xml
+++ b/kyuubi-hive-beeline/pom.xml
@@ -46,18 +46,6 @@
             <version>${project.version}</version>
         </dependency>
 
-        <dependency>
-            <groupId>org.apache.hive</groupId>
-            <artifactId>hive-common</artifactId>
-            <version>${hive.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>*</groupId>
-                    <artifactId>*</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-
         <dependency>
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-client-api</artifactId>
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/BeeLine.java 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/BeeLine.java
index b66dca26c..08760d39f 100644
--- a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/BeeLine.java
+++ b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/BeeLine.java
@@ -88,9 +88,7 @@ import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
 import org.apache.commons.io.IOUtils;
 import org.apache.hadoop.fs.FSDataInputStream;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hive.beeline.cli.CliOptionsProcessor;
+import org.apache.hive.beeline.common.util.ShutdownHookManager;
 import org.apache.hive.beeline.hs2connection.BeelineConfFileParseException;
 import org.apache.hive.beeline.hs2connection.BeelineSiteParseException;
 import org.apache.hive.beeline.hs2connection.BeelineSiteParser;
@@ -98,7 +96,6 @@ import 
org.apache.hive.beeline.hs2connection.HS2ConnectionFileParser;
 import org.apache.hive.beeline.hs2connection.HS2ConnectionFileUtils;
 import org.apache.hive.beeline.hs2connection.HiveSiteHS2ConnectionFileParser;
 import org.apache.hive.beeline.hs2connection.UserHS2ConnectionFileParser;
-import org.apache.hive.common.util.ShutdownHookManager;
 import org.apache.kyuubi.jdbc.hive.JdbcConnectionParams;
 import org.apache.kyuubi.jdbc.hive.JdbcUriParseException;
 import org.apache.kyuubi.jdbc.hive.Utils;
@@ -684,66 +681,6 @@ public class BeeLine implements Closeable {
     }
   }
 
-  int initArgsFromCliVars(String[] args) {
-    List<String> commands = Collections.emptyList();
-
-    CliOptionsProcessor optionsProcessor = new CliOptionsProcessor();
-    if (!optionsProcessor.process(args)) {
-      return 1;
-    }
-    CommandLine commandLine = optionsProcessor.getCommandLine();
-
-    Properties confProps = commandLine.getOptionProperties("hiveconf");
-    for (String propKey : confProps.stringPropertyNames()) {
-      setHiveConfVar(propKey, confProps.getProperty(propKey));
-    }
-
-    Properties hiveVars = commandLine.getOptionProperties("define");
-    for (String propKey : hiveVars.stringPropertyNames()) {
-      getOpts().getHiveConfVariables().put(propKey, 
hiveVars.getProperty(propKey));
-    }
-
-    Properties hiveVars2 = commandLine.getOptionProperties("hivevar");
-    for (String propKey : hiveVars2.stringPropertyNames()) {
-      getOpts().getHiveConfVariables().put(propKey, 
hiveVars2.getProperty(propKey));
-    }
-
-    getOpts().setScriptFile(commandLine.getOptionValue("f"));
-
-    if (commandLine.getOptionValues("i") != null) {
-      getOpts().setInitFiles(commandLine.getOptionValues("i"));
-    }
-
-    dbName = commandLine.getOptionValue("database");
-    
getOpts().setVerbose(Boolean.parseBoolean(commandLine.getOptionValue("verbose")));
-    
getOpts().setSilent(Boolean.parseBoolean(commandLine.getOptionValue("silent")));
-
-    int code = 0;
-    if (commandLine.getOptionValues("e") != null) {
-      commands = Arrays.asList(commandLine.getOptionValues("e"));
-    }
-
-    if (!commands.isEmpty() && getOpts().getScriptFile() != null) {
-      System.err.println("The '-e' and '-f' options cannot be specified 
simultaneously");
-      optionsProcessor.printCliUsage();
-      return 1;
-    }
-
-    if (!commands.isEmpty()) {
-      embeddedConnect();
-      connectDBInEmbededMode();
-      for (Iterator<String> i = commands.iterator(); i.hasNext(); ) {
-        String command = i.next().toString();
-        debug(loc("executing-command", command));
-        if (!dispatch(command)) {
-          code++;
-        }
-      }
-      exit = true; // execute and exit
-    }
-    return code;
-  }
-
   int initArgs(String[] args) {
     List<String> commands = Collections.emptyList();
 
@@ -884,9 +821,6 @@ public class BeeLine implements Closeable {
 
   private void setHiveConfVar(String key, String val) {
     getOpts().getHiveConfVariables().put(key, val);
-    if (HiveConf.ConfVars.HIVE_EXECUTION_ENGINE.varname.equals(key) && 
"mr".equals(val)) {
-      info(HiveConf.generateMrDeprecationWarning());
-    }
   }
 
   private String constructCmd(
@@ -976,15 +910,6 @@ public class BeeLine implements Closeable {
     }
   }
 
-  public void updateOptsForCli() {
-    getOpts().updateBeeLineOptsFromConf();
-    getOpts().setShowHeader(false);
-    getOpts().setEscapeCRLF(false);
-    getOpts().setOutputFormat("dsv");
-    getOpts().setDelimiterForDSV(' ');
-    getOpts().setNullEmptyString(true);
-  }
-
   /**
    * Start accepting input from stdin, and dispatch it to the appropriate 
{@link CommandHandler}
    * until the global variable <code>exit</code> is true.
@@ -1005,17 +930,9 @@ public class BeeLine implements Closeable {
     // this method also initializes the consoleReader which is
     // needed by initArgs for certain execution paths
     ConsoleReader reader = initializeConsoleReader(inputStream);
-    if (isBeeLine) {
-      int code = initArgs(args);
-      if (code != 0) {
-        return code;
-      }
-    } else {
-      int code = initArgsFromCliVars(args);
-      if (code != 0 || exit) {
-        return code;
-      }
-      defaultConnect(false);
+    int code = initArgs(args);
+    if (code != 0) {
+      return code;
     }
 
     if (getOpts().isHelpAsked()) {
@@ -1194,33 +1111,10 @@ public class BeeLine implements Closeable {
     return ERRNO_OK;
   }
 
-  public int defaultConnect(boolean exitOnError) {
-    if (embeddedConnect() != ERRNO_OK && exitOnError) {
-      return ERRNO_OTHER;
-    }
-    if (connectDBInEmbededMode() != ERRNO_OK && exitOnError) {
-      return ERRNO_OTHER;
-    }
-    return ERRNO_OK;
-  }
-
   private int executeFile(String fileName) {
     InputStream fileStream = null;
     try {
-      if (!isBeeLine) {
-        org.apache.hadoop.fs.Path path = new 
org.apache.hadoop.fs.Path(fileName);
-        FileSystem fs;
-        HiveConf conf = getCommands().getHiveConf(true);
-        if (!path.toUri().isAbsolute()) {
-          fs = FileSystem.getLocal(conf);
-          path = fs.makeQualified(path);
-        } else {
-          fs = FileSystem.get(path.toUri(), conf);
-        }
-        fileStream = fs.open(path);
-      } else {
-        fileStream = new FileInputStream(fileName);
-      }
+      fileStream = new FileInputStream(fileName);
       return execute(initializeConsoleReader(fileStream), 
!getOpts().getForce());
     } catch (Throwable t) {
       handleException(t);
@@ -1385,13 +1279,9 @@ public class BeeLine implements Closeable {
       line = "!help";
     }
 
-    if (isBeeLine) {
-      if (line.startsWith(COMMAND_PREFIX)) {
-        // handle SQLLine command in beeline which starts with ! and does not 
end with ;
-        return execCommandWithPrefix(line);
-      } else {
-        return commands.sql(line, getOpts().getEntireLineAsCommand());
-      }
+    if (line.startsWith(COMMAND_PREFIX)) {
+      // handle SQLLine command in beeline which starts with ! and does not 
end with ;
+      return execCommandWithPrefix(line);
     } else {
       return commands.sql(line, getOpts().getEntireLineAsCommand());
     }
@@ -1664,20 +1554,7 @@ public class BeeLine implements Closeable {
   }
 
   String getPrompt() {
-    if (isBeeLine) {
-      return getPromptForBeeline();
-    } else {
-      return getPromptForCli();
-    }
-  }
-
-  String getPromptForCli() {
-    String prompt;
-    // read prompt configuration and substitute variables.
-    HiveConf conf = getCommands().getHiveConf(true);
-    prompt = conf.getVar(HiveConf.ConfVars.CLIPROMPT);
-    prompt = getCommands().substituteVariables(conf, prompt);
-    return prompt + getFormattedDb() + "> ";
+    return getPromptForBeeline();
   }
 
   /**
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/BeeLineOpts.java 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/BeeLineOpts.java
index 2bd396432..4a37d8a38 100644
--- a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/BeeLineOpts.java
+++ b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/BeeLineOpts.java
@@ -45,7 +45,6 @@ import jline.TerminalFactory;
 import jline.console.completer.Completer;
 import jline.console.completer.StringsCompleter;
 import jline.console.history.MemoryHistory;
-import org.apache.hadoop.hive.conf.HiveConf;
 
 class BeeLineOpts implements Completer {
   public static final int DEFAULT_MAX_WIDTH = 80;
@@ -89,8 +88,6 @@ class BeeLineOpts implements Completer {
   int timeout = -1;
   private String isolation = DEFAULT_ISOLATION_LEVEL;
   private String outputFormat = "table";
-  // This configuration is used only for client side configuration.
-  private HiveConf conf;
   private boolean trimScripts = true;
   private boolean allowMultiLineCommand = true;
 
@@ -268,20 +265,6 @@ class BeeLineOpts implements Completer {
     loadProperties(p);
   }
 
-  /** Update the options after connection is established in CLI mode. */
-  public void updateBeeLineOptsFromConf() {
-    if (!beeLine.isBeeLine()) {
-      if (conf == null) {
-        conf = beeLine.getCommands().getHiveConf(false);
-      }
-      setForce(HiveConf.getBoolVar(conf, HiveConf.ConfVars.CLIIGNOREERRORS));
-    }
-  }
-
-  public void setHiveConf(HiveConf conf) {
-    this.conf = conf;
-  }
-
   public void loadProperties(Properties props) {
     for (Object element : props.keySet()) {
       String key = element.toString();
@@ -469,14 +452,7 @@ class BeeLineOpts implements Completer {
   }
 
   public boolean getShowHeader() {
-    if (beeLine.isBeeLine()) {
-      return showHeader;
-    } else {
-      boolean header;
-      HiveConf conf = beeLine.getCommands().getHiveConf(true);
-      header = HiveConf.getBoolVar(conf, 
HiveConf.ConfVars.HIVE_CLI_PRINT_HEADER);
-      return header;
-    }
+    return showHeader;
   }
 
   public void setEscapeCRLF(boolean escapeCRLF) {
@@ -484,14 +460,7 @@ class BeeLineOpts implements Completer {
   }
 
   public boolean getEscapeCRLF() {
-    if (beeLine.isBeeLine()) {
-      return escapeCRLF;
-    } else {
-      boolean flag;
-      HiveConf conf = beeLine.getCommands().getHiveConf(true);
-      flag = HiveConf.getBoolVar(conf, 
HiveConf.ConfVars.HIVE_CLI_PRINT_ESCAPE_CRLF);
-      return flag;
-    }
+    return escapeCRLF;
   }
 
   public void setShowDbInPrompt(boolean showDbInPrompt) {
@@ -505,12 +474,7 @@ class BeeLineOpts implements Completer {
    * @return Should the current db displayed in the prompt
    */
   public boolean getShowDbInPrompt() {
-    if (beeLine.isBeeLine()) {
-      return showDbInPrompt;
-    } else {
-      HiveConf conf = beeLine.getCommands().getHiveConf(true);
-      return HiveConf.getBoolVar(conf, HiveConf.ConfVars.CLIPRINTCURRENTDB);
-    }
+    return showDbInPrompt;
   }
 
   public void setHeaderInterval(int headerInterval) {
@@ -651,11 +615,6 @@ class BeeLineOpts implements Completer {
     this.delimiterForDSV = delimiterForDSV;
   }
 
-  @Ignore
-  public HiveConf getConf() {
-    return conf;
-  }
-
   public void setHelpAsked(boolean helpAsked) {
     this.helpAsked = helpAsked;
   }
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/ClientCommandHookFactory.java
 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/ClientCommandHookFactory.java
index cebcad1fe..beccbf1ec 100644
--- 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/ClientCommandHookFactory.java
+++ 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/ClientCommandHookFactory.java
@@ -30,20 +30,6 @@ public class ClientCommandHookFactory {
     return instance;
   }
 
-  public class SetCommandHook extends ClientHook {
-
-    public SetCommandHook(String sql) {
-      super(sql);
-    }
-
-    @Override
-    public void postHook(BeeLine beeLine) {
-      if (!beeLine.isBeeLine()) {
-        
beeLine.getOpts().setHiveConf(beeLine.getCommands().getHiveConf(false));
-      }
-    }
-  }
-
   public class UseCommandHook extends ClientHook {
 
     public UseCommandHook(String sql) {
@@ -112,36 +98,20 @@ public class ClientCommandHookFactory {
   }
 
   public ClientHook getHook(BeeLine beeLine, String cmdLine) {
-    if (!beeLine.isBeeLine()) {
-      // In compatibility mode we need to hook to set, and use
-      if (cmdLine.toLowerCase().startsWith("set")) {
-        // Only set A = B command needs updating the configuration stored in 
client side.
-        if (cmdLine.contains("=")) {
-          return new SetCommandHook(cmdLine);
-        } else {
-          return null;
-        }
-      } else if (cmdLine.toLowerCase().startsWith("use")) {
+    // In beeline mode we need to hook to use, connect, go, in case
+    // the ShowDbInPrompt is set, so the database name is needed
+    if (beeLine.getOpts().getShowDbInPrompt()) {
+      if (cmdLine.toLowerCase().startsWith("use")) {
         return new UseCommandHook(cmdLine);
+      } else if (cmdLine.toLowerCase().startsWith("connect")) {
+        return new ConnectCommandHook(cmdLine);
+      } else if (cmdLine.toLowerCase().startsWith("go")) {
+        return new GoCommandHook(cmdLine);
       } else {
         return null;
       }
     } else {
-      // In beeline mode we need to hook to use, connect, go, in case
-      // the ShowDbInPrompt is set, so the database name is needed
-      if (beeLine.getOpts().getShowDbInPrompt()) {
-        if (cmdLine.toLowerCase().startsWith("use")) {
-          return new UseCommandHook(cmdLine);
-        } else if (cmdLine.toLowerCase().startsWith("connect")) {
-          return new ConnectCommandHook(cmdLine);
-        } else if (cmdLine.toLowerCase().startsWith("go")) {
-          return new GoCommandHook(cmdLine);
-        } else {
-          return null;
-        }
-      } else {
-        return null;
-      }
+      return null;
     }
   }
 }
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/Commands.java 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/Commands.java
index a1df5fb55..d414fca3e 100644
--- a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/Commands.java
+++ b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/Commands.java
@@ -52,14 +52,10 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
 import java.util.TreeSet;
-import org.apache.hadoop.hive.common.cli.ShellCmdExecutor;
-import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.conf.HiveVariableSource;
-import org.apache.hadoop.hive.conf.SystemVariables;
-import org.apache.hadoop.hive.conf.VariableSubstitution;
 import org.apache.hadoop.io.IOUtils;
+import org.apache.hive.beeline.common.cli.ShellCmdExecutor;
+import org.apache.hive.beeline.common.util.HiveStringUtils;
 import org.apache.hive.beeline.logs.KyuubiBeelineInPlaceUpdateStream;
-import org.apache.hive.common.util.HiveStringUtils;
 import org.apache.kyuubi.jdbc.hive.JdbcConnectionParams;
 import org.apache.kyuubi.jdbc.hive.KyuubiStatement;
 import org.apache.kyuubi.jdbc.hive.Utils;
@@ -754,29 +750,6 @@ public class Commands {
     return result;
   }
 
-  /**
-   * This method should only be used in CLI mode.
-   *
-   * @return the hive configuration from server side
-   */
-  public HiveConf getHiveConf(boolean call) {
-    HiveConf hiveConf = beeLine.getOpts().getConf();
-    if (hiveConf != null && call) {
-      return hiveConf;
-    } else {
-      return getHiveConfHelper(call);
-    }
-  }
-
-  public HiveConf getHiveConfHelper(boolean call) {
-    HiveConf conf = new HiveConf();
-    BufferedRows rows = getConfInternal(call);
-    while (rows != null && rows.hasNext()) {
-      addConf((Rows.Row) rows.next(), conf);
-    }
-    return conf;
-  }
-
   /**
    * Use call statement to retrieve the configurations for substitution and 
sql for the
    * substitution.
@@ -827,23 +800,6 @@ public class Commands {
     return rows;
   }
 
-  private void addConf(Rows.Row r, HiveConf hiveConf) {
-    if (r.isMeta) {
-      return;
-    }
-    if (r.values == null || r.values[0] == null || r.values[0].isEmpty()) {
-      return;
-    }
-    String val = r.values[0];
-    if (r.values[0].startsWith(SystemVariables.SYSTEM_PREFIX)
-        || r.values[0].startsWith(SystemVariables.ENV_PREFIX)) {
-      return;
-    } else {
-      String[] kv = val.split("=", 2);
-      if (kv.length == 2) hiveConf.set(kv[0], kv[1]);
-    }
-  }
-
   /** Extract and clean up the first command in the input. */
   private String getFirstCmd(String cmd, int length) {
     return cmd.substring(length).trim();
@@ -863,7 +819,6 @@ public class Commands {
     String[] tokens = tokenizeCmd(cmd);
     String cmd_1 = getFirstCmd(cmd, tokens[0].length());
 
-    cmd_1 = substituteVariables(getHiveConf(false), cmd_1);
     File sourceFile = new File(cmd_1);
     if (!sourceFile.isFile()) {
       return false;
@@ -1123,21 +1078,6 @@ public class Commands {
     return execute(line, false, entireLineAsCommand);
   }
 
-  public String substituteVariables(HiveConf conf, String line) {
-    if (!beeLine.isBeeLine()) {
-      // Substitution is only supported in non-beeline mode.
-      return new VariableSubstitution(
-              new HiveVariableSource() {
-                @Override
-                public Map<String, String> getHiveVariable() {
-                  return getHiveVariables();
-                }
-              })
-          .substitute(conf, line);
-    }
-    return line;
-  }
-
   public boolean sh(String line) {
     if (line == null || line.length() == 0) {
       return false;
@@ -1148,7 +1088,6 @@ public class Commands {
     }
 
     line = line.substring("sh".length()).trim();
-    if (!beeLine.isBeeLine()) line = substituteVariables(getHiveConf(false), 
line.trim());
 
     try {
       ShellCmdExecutor executor =
@@ -1641,9 +1580,6 @@ public class Commands {
           .setConnection(new DatabaseConnection(beeLine, driver, url, props));
       beeLine.getDatabaseConnection().getConnection();
 
-      if (!beeLine.isBeeLine()) {
-        beeLine.updateOptsForCli();
-      }
       beeLine.runInit();
 
       beeLine.setCompletions();
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/KyuubiBeeLine.java 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/KyuubiBeeLine.java
index cba92f39f..1efef2b07 100644
--- 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/KyuubiBeeLine.java
+++ 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/KyuubiBeeLine.java
@@ -24,7 +24,7 @@ import java.util.*;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.hive.common.util.HiveStringUtils;
+import org.apache.hive.beeline.common.util.HiveStringUtils;
 import org.apache.kyuubi.util.reflect.DynConstructors;
 import org.apache.kyuubi.util.reflect.DynFields;
 import org.apache.kyuubi.util.reflect.DynMethods;
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/KyuubiCommands.java 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/KyuubiCommands.java
index fcfee49ed..2dc8b187f 100644
--- 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/KyuubiCommands.java
+++ 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/KyuubiCommands.java
@@ -24,8 +24,8 @@ import java.io.*;
 import java.nio.file.Files;
 import java.sql.*;
 import java.util.*;
+import org.apache.hive.beeline.common.util.HiveStringUtils;
 import org.apache.hive.beeline.logs.KyuubiBeelineInPlaceUpdateStream;
-import org.apache.hive.common.util.HiveStringUtils;
 import org.apache.kyuubi.jdbc.hive.KyuubiStatement;
 import org.apache.kyuubi.jdbc.hive.Utils;
 import org.apache.kyuubi.jdbc.hive.logs.InPlaceUpdateStream;
@@ -70,7 +70,6 @@ public class KyuubiCommands extends Commands {
     String[] tokens = tokenizeCmd(cmd);
     String cmd_1 = getFirstCmd(cmd, tokens[0].length());
 
-    cmd_1 = substituteVariables(getHiveConf(false), cmd_1);
     File sourceFile = new File(cmd_1);
     if (!sourceFile.isFile()) {
       return false;
@@ -488,10 +487,6 @@ public class KyuubiCommands extends Commands {
           .setConnection(new KyuubiDatabaseConnection(beeLine, driver, url, 
props));
       beeLine.getDatabaseConnection().getConnection();
 
-      if (!beeLine.isBeeLine()) {
-        beeLine.updateOptsForCli();
-      }
-
       // see HIVE-19048 : Initscript errors are ignored
       int initScriptExecutionResult = beeLine.runInit();
 
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/Rows.java 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/Rows.java
index be55113af..40960e760 100644
--- a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/Rows.java
+++ b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/Rows.java
@@ -29,7 +29,7 @@ import java.text.DecimalFormat;
 import java.text.NumberFormat;
 import java.util.Arrays;
 import java.util.Iterator;
-import org.apache.hadoop.hive.common.cli.EscapeCRLFHelper;
+import org.apache.hive.beeline.common.cli.EscapeCRLFHelper;
 
 /**
  * Abstract base class representing a set of rows to be displayed. Holds 
column values as strings
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/cli/CliOptionsProcessor.java
 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/cli/CliOptionsProcessor.java
deleted file mode 100644
index ac1cb0439..000000000
--- 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/cli/CliOptionsProcessor.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * 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.hive.beeline.cli;
-
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.GnuParser;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.OptionBuilder;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
-
-/** This class is used for parsing the options of Hive Cli */
-public class CliOptionsProcessor {
-  private final Options options = new Options();
-  private org.apache.commons.cli.CommandLine commandLine;
-
-  public CliOptionsProcessor() {
-    // -database database
-    options.addOption(
-        OptionBuilder.hasArg()
-            .withArgName("databasename")
-            .withLongOpt("database")
-            .withDescription("Specify the database to use")
-            .create());
-
-    // -e 'quoted-query-string'
-    options.addOption(
-        OptionBuilder.hasArg()
-            .withArgName("quoted-query-string")
-            .withDescription("SQL from command line")
-            .create('e'));
-
-    // -f <query-file>
-    options.addOption(
-        OptionBuilder.hasArg()
-            .withArgName("filename")
-            .withDescription("SQL from " + "files")
-            .create('f'));
-
-    // -i <init-query-file>
-    options.addOption(
-        OptionBuilder.hasArg()
-            .withArgName("filename")
-            .withDescription("Initialization SQL file")
-            .create('i'));
-
-    // -hiveconf x=y
-    options.addOption(
-        OptionBuilder.withValueSeparator()
-            .hasArgs(2)
-            .withArgName("property=value")
-            .withLongOpt("hiveconf")
-            .withDescription("Use value for given property")
-            .create());
-
-    // Substitution option -d, --define
-    options.addOption(
-        OptionBuilder.withValueSeparator()
-            .hasArgs(2)
-            .withArgName("key=value")
-            .withLongOpt("define")
-            .withDescription(
-                "Variable substitution to apply to Hive commands. e" + ".g. -d 
A=B or --define A=B")
-            .create('d'));
-
-    // Substitution option --hivevar
-    options.addOption(
-        OptionBuilder.withValueSeparator()
-            .hasArgs(2)
-            .withArgName("key=value")
-            .withLongOpt("hivevar")
-            .withDescription(
-                "Variable substitution to apply to Hive commands. " + "e.g. 
--hivevar A=B")
-            .create());
-
-    // [-S|--silent]
-    options.addOption(new Option("S", "silent", false, "Silent mode in 
interactive shell"));
-
-    // [-v|--verbose]
-    options.addOption(
-        new Option("v", "verbose", false, "Verbose mode (echo executed SQL to 
the " + "console)"));
-
-    // [-H|--help]
-    options.addOption(new Option("H", "help", false, "Print help 
information"));
-  }
-
-  public boolean process(String[] argv) {
-    try {
-      commandLine = new GnuParser().parse(options, argv);
-
-      if (commandLine.hasOption("help")) {
-        printCliUsage();
-        return false;
-      }
-    } catch (ParseException e) {
-      System.err.println(e.getMessage());
-      printCliUsage();
-      return false;
-    }
-    return true;
-  }
-
-  public void printCliUsage() {
-    new HelpFormatter().printHelp("hive", options);
-  }
-
-  public CommandLine getCommandLine() {
-    return commandLine;
-  }
-
-  public void setCommandLine(CommandLine commandLine) {
-    this.commandLine = commandLine;
-  }
-}
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/cli/EscapeCRLFHelper.java
 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/cli/EscapeCRLFHelper.java
new file mode 100644
index 000000000..a96562882
--- /dev/null
+++ 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/cli/EscapeCRLFHelper.java
@@ -0,0 +1,78 @@
+/*
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.hive.beeline.common.cli;
+
+public class EscapeCRLFHelper {
+
+  private static final char CARRIAGE_RETURN = '\r';
+  private static final char LINE_FEED = '\n';
+
+  public EscapeCRLFHelper() {}
+
+  /*
+   * Substitute for any carriage return or line feed characters in line with 
the escaped
+   * 2-character sequences \r or \n.
+   *
+   * @param line  the string for the CRLF substitution.
+   * @return If there were no replacements, then just return line.  Otherwise, 
a new String with
+   *         escaped CRLF.
+   */
+  public static String escapeCRLF(String line) {
+
+    StringBuilder sb = null;
+    int lastNonCRLFIndex = 0;
+    int index = 0;
+    final int length = line.length();
+    while (index < length) {
+      char ch = line.charAt(index);
+      if (ch == CARRIAGE_RETURN || ch == LINE_FEED) {
+        if (sb == null) {
+
+          // We defer allocation until we really need it since in the common 
case there is
+          // no CRLF substitution.
+          sb = new StringBuilder();
+        }
+        if (lastNonCRLFIndex < index) {
+
+          // Copy an intervening non-CRLF characters up to but not including 
current 'index'.
+          sb.append(line.substring(lastNonCRLFIndex, index));
+        }
+        lastNonCRLFIndex = ++index;
+        if (ch == CARRIAGE_RETURN) {
+          sb.append("\\r");
+        } else {
+          sb.append("\\n");
+        }
+      } else {
+        index++;
+      }
+    }
+    if (sb == null) {
+
+      // No CRLF substitution -- return original line.
+      return line;
+    } else {
+      if (lastNonCRLFIndex < index) {
+
+        // Copy an intervening non-CRLF characters up to but not including 
current 'index'.
+        sb.append(line.substring(lastNonCRLFIndex, index));
+      }
+      return sb.toString();
+    }
+  }
+}
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/cli/ShellCmdExecutor.java
 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/cli/ShellCmdExecutor.java
new file mode 100644
index 000000000..f40fba011
--- /dev/null
+++ 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/cli/ShellCmdExecutor.java
@@ -0,0 +1,53 @@
+/*
+ * 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.hive.beeline.common.cli;
+
+import java.io.IOException;
+import java.io.PrintStream;
+import org.apache.hive.beeline.common.util.StreamPrinter;
+
+public class ShellCmdExecutor {
+  private String cmd;
+  private PrintStream out;
+  private PrintStream err;
+
+  public ShellCmdExecutor(String cmd, PrintStream out, PrintStream err) {
+    this.cmd = cmd;
+    this.out = out;
+    this.err = err;
+  }
+
+  public int execute() throws Exception {
+    try {
+      Process executor = Runtime.getRuntime().exec(cmd);
+      StreamPrinter outPrinter = new StreamPrinter(executor.getInputStream(), 
null, out);
+      StreamPrinter errPrinter = new StreamPrinter(executor.getErrorStream(), 
null, err);
+
+      outPrinter.start();
+      errPrinter.start();
+
+      int ret = executor.waitFor();
+      outPrinter.join();
+      errPrinter.join();
+      return ret;
+    } catch (IOException ex) {
+      throw new Exception("Failed to execute " + cmd, ex);
+    }
+  }
+}
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/log/InPlaceUpdate.java
 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/log/InPlaceUpdate.java
new file mode 100644
index 000000000..4f7d562c7
--- /dev/null
+++ 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/log/InPlaceUpdate.java
@@ -0,0 +1,190 @@
+/*
+ * 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.hive.beeline.common.log;
+
+import static org.fusesource.jansi.Ansi.ansi;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Lists;
+import java.io.PrintStream;
+import java.io.StringWriter;
+import java.text.DecimalFormat;
+import java.util.List;
+import javax.annotation.Nullable;
+import org.apache.commons.lang3.StringUtils;
+import org.fusesource.jansi.Ansi;
+
+/** Renders information from ProgressMonitor to the stream provided. */
+public class InPlaceUpdate {
+
+  public static final int MIN_TERMINAL_WIDTH = 94;
+
+  // keep this within 80 chars width. If more columns needs to be added then 
update min terminal
+  // width requirement and SEPARATOR width accordingly
+  private static final String HEADER_FORMAT = "%16s%10s %13s  %5s  %9s  %7s  
%7s  %6s  %6s  ";
+  private static final String VERTEX_FORMAT = "%-16s%10s %13s  %5s  %9s  %7s  
%7s  %6s  %6s  ";
+  private static final String FOOTER_FORMAT = "%-15s  %-30s %-4s  %-25s";
+
+  private static final int PROGRESS_BAR_CHARS = 30;
+  private static final String SEPARATOR =
+      new String(new char[MIN_TERMINAL_WIDTH]).replace("\0", "-");
+
+  /* Pretty print the values */
+  private final DecimalFormat secondsFormatter = new DecimalFormat("#0.00");
+  private int lines = 0;
+  private PrintStream out;
+
+  public InPlaceUpdate(PrintStream out) {
+    this.out = out;
+  }
+
+  public InPlaceUpdate() {
+    this(System.out);
+  }
+
+  public static void reprintLine(PrintStream out, String line) {
+    out.print(ansi().eraseLine(Ansi.Erase.ALL).a(line).a('\n').toString());
+    out.flush();
+  }
+
+  public static void rePositionCursor(PrintStream ps) {
+    ps.print(ansi().cursorUp(0).toString());
+    ps.flush();
+  }
+
+  /**
+   * NOTE: Use this method only if isUnixTerminal is true. Erases the current 
line and prints the
+   * given line.
+   *
+   * @param line - line to print
+   */
+  private void reprintLine(String line) {
+    reprintLine(out, line);
+    lines++;
+  }
+
+  /**
+   * NOTE: Use this method only if isUnixTerminal is true. Erases the current 
line and prints the
+   * given line with the specified color.
+   *
+   * @param line - line to print
+   * @param color - color for the line
+   */
+  private void reprintLineWithColorAsBold(String line, Ansi.Color color) {
+    out.print(
+        ansi()
+            .eraseLine(Ansi.Erase.ALL)
+            .fg(color)
+            .bold()
+            .a(line)
+            .a('\n')
+            .boldOff()
+            .reset()
+            .toString());
+    out.flush();
+    lines++;
+  }
+
+  /**
+   * NOTE: Use this method only if isUnixTerminal is true. Erases the current 
line and prints the
+   * given multiline. Make sure the specified line is not terminated by 
linebreak.
+   *
+   * @param line - line to print
+   */
+  private void reprintMultiLine(String line) {
+    int numLines = line.split("\r\n|\r|\n").length;
+    out.print(ansi().eraseLine(Ansi.Erase.ALL).a(line).a('\n').toString());
+    out.flush();
+    lines += numLines;
+  }
+
+  /**
+   * NOTE: Use this method only if isUnixTerminal is true. Repositions the 
cursor back to line 0.
+   */
+  private void repositionCursor() {
+    if (lines > 0) {
+      out.print(ansi().cursorUp(lines).toString());
+      out.flush();
+      lines = 0;
+    }
+  }
+
+  // [==================>>-----]
+  private String getInPlaceProgressBar(double percent) {
+    StringWriter bar = new StringWriter();
+    bar.append("[");
+    int remainingChars = PROGRESS_BAR_CHARS - 4;
+    int completed = (int) (remainingChars * percent);
+    int pending = remainingChars - completed;
+    for (int i = 0; i < completed; i++) {
+      bar.append("=");
+    }
+    bar.append(">>");
+    for (int i = 0; i < pending; i++) {
+      bar.append("-");
+    }
+    bar.append("]");
+    return bar.toString();
+  }
+
+  public void render(ProgressMonitor monitor) {
+    if (monitor == null) return;
+    // position the cursor to line 0
+    repositionCursor();
+
+    // print header
+    // 
-------------------------------------------------------------------------------
+    //         VERTICES     STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED 
 KILLED
+    // 
-------------------------------------------------------------------------------
+    reprintLine(SEPARATOR);
+    reprintLineWithColorAsBold(
+        String.format(HEADER_FORMAT, monitor.headers().toArray()), 
Ansi.Color.CYAN);
+    reprintLine(SEPARATOR);
+
+    // Map 1 .......... container  SUCCEEDED      7          7        0        
0       0       0
+    List<String> printReady =
+        Lists.transform(
+            monitor.rows(),
+            new Function<List<String>, String>() {
+              @Nullable
+              @Override
+              public String apply(@Nullable List<String> row) {
+                return String.format(VERTEX_FORMAT, row.toArray());
+              }
+            });
+    reprintMultiLine(StringUtils.join(printReady, "\n"));
+
+    // 
-------------------------------------------------------------------------------
+    // VERTICES: 03/04            [=================>>-----] 86%  ELAPSED 
TIME: 1.71 s
+    // 
-------------------------------------------------------------------------------
+    String progressStr = "" + (int) (monitor.progressedPercentage() * 100) + 
"%";
+    float et = (float) (System.currentTimeMillis() - monitor.startTime()) / 
(float) 1000;
+    String elapsedTime = "ELAPSED TIME: " + secondsFormatter.format(et) + " s";
+    String footer =
+        String.format(
+            FOOTER_FORMAT,
+            monitor.footerSummary(),
+            getInPlaceProgressBar(monitor.progressedPercentage()),
+            progressStr,
+            elapsedTime);
+
+    reprintLine(SEPARATOR);
+    reprintLineWithColorAsBold(footer, Ansi.Color.RED);
+    reprintLine(SEPARATOR);
+  }
+}
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/log/ProgressMonitor.java
 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/log/ProgressMonitor.java
new file mode 100644
index 000000000..439c65579
--- /dev/null
+++ 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/log/ProgressMonitor.java
@@ -0,0 +1,69 @@
+/*
+ * 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.hive.beeline.common.log;
+
+import java.util.Collections;
+import java.util.List;
+
+public interface ProgressMonitor {
+
+  ProgressMonitor NULL =
+      new ProgressMonitor() {
+        @Override
+        public List<String> headers() {
+          return Collections.emptyList();
+        }
+
+        @Override
+        public List<List<String>> rows() {
+          return Collections.emptyList();
+        }
+
+        @Override
+        public String footerSummary() {
+          return "";
+        }
+
+        @Override
+        public long startTime() {
+          return 0;
+        }
+
+        @Override
+        public String executionStatus() {
+          return "";
+        }
+
+        @Override
+        public double progressedPercentage() {
+          return 0;
+        }
+      };
+
+  List<String> headers();
+
+  List<List<String>> rows();
+
+  String footerSummary();
+
+  long startTime();
+
+  String executionStatus();
+
+  double progressedPercentage();
+}
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/util/HiveStringUtils.java
 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/util/HiveStringUtils.java
new file mode 100644
index 000000000..79e639508
--- /dev/null
+++ 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/util/HiveStringUtils.java
@@ -0,0 +1,113 @@
+/*
+ * 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.hive.beeline.common.util;
+
+import com.google.common.base.Splitter;
+import java.util.Iterator;
+
+/**
+ * HiveStringUtils General string utils
+ *
+ * <p>Originally copied from o.a.hadoop.util.StringUtils
+ */
+public class HiveStringUtils {
+
+  /**
+   * Strip comments from a sql statement, tracking when the statement contains 
a string literal.
+   *
+   * @param statement the input string
+   * @return a stripped statement
+   */
+  public static String removeComments(String statement) {
+    if (statement == null) {
+      return null;
+    }
+    Iterator<String> iterator = 
Splitter.on("\n").omitEmptyStrings().split(statement).iterator();
+    int[] startQuote = {-1};
+    StringBuilder ret = new StringBuilder(statement.length());
+    while (iterator.hasNext()) {
+      String lineWithComments = iterator.next();
+      String lineNoComments = removeComments(lineWithComments, startQuote);
+      ret.append(lineNoComments);
+      if (iterator.hasNext() && !lineNoComments.isEmpty()) {
+        ret.append("\n");
+      }
+    }
+    return ret.toString();
+  }
+
+  /**
+   * Remove comments from the current line of a query. Avoid removing 
comment-like strings inside
+   * quotes.
+   *
+   * @param line a line of sql text
+   * @param startQuote The value -1 indicates that line does not begin inside 
a string literal.
+   *     Other values indicate that line does begin inside a string literal 
and the value passed is
+   *     the delimiter character. The array type is used to pass int type as 
input/output parameter.
+   * @return the line with comments removed.
+   */
+  public static String removeComments(String line, int[] startQuote) {
+    if (line == null || line.isEmpty()) {
+      return line;
+    }
+    if (startQuote[0] == -1 && isComment(line)) {
+      return ""; // assume # can only be used at the beginning of line.
+    }
+    StringBuilder builder = new StringBuilder();
+    for (int index = 0; index < line.length(); ) {
+      if (startQuote[0] == -1
+          && index < line.length() - 1
+          && line.charAt(index) == '-'
+          && line.charAt(index + 1) == '-') {
+        // Jump to the end of current line. When a multiple line query is 
executed with -e
+        // parameter,
+        // it is passed in as one line string separated with '\n'
+        for (; index < line.length() && line.charAt(index) != '\n'; ++index) ;
+        continue;
+      }
+
+      char letter = line.charAt(index);
+      if (startQuote[0] == letter && (index == 0 || line.charAt(index - 1) != 
'\\')) {
+        startQuote[0] = -1; // Turn escape off.
+      } else if (startQuote[0] == -1
+          && (letter == '\'' || letter == '"')
+          && (index == 0 || line.charAt(index - 1) != '\\')) {
+        startQuote[0] = letter; // Turn escape on.
+      }
+
+      builder.append(letter);
+      index++;
+    }
+
+    return builder.toString().trim();
+  }
+
+  /**
+   * Test whether a line is a comment.
+   *
+   * @param line the line to be tested
+   * @return true if a comment
+   */
+  private static boolean isComment(String line) {
+    // SQL92 comment prefix is "--"
+    // beeline also supports shell-style "#" prefix
+    String lineTrimmed = line.trim();
+    return lineTrimmed.startsWith("#") || lineTrimmed.startsWith("--");
+  }
+}
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/util/ShutdownHookManager.java
 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/util/ShutdownHookManager.java
new file mode 100644
index 000000000..780e71212
--- /dev/null
+++ 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/util/ShutdownHookManager.java
@@ -0,0 +1,125 @@
+/*
+ * 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.hive.beeline.common.util;
+
+import com.google.common.annotations.VisibleForTesting;
+import java.io.File;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+import org.apache.hadoop.fs.FileSystem;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This is just a wrapper around hadoop's ShutdownHookManager but also manages 
delete on exit hook
+ * for temp files.
+ */
+public class ShutdownHookManager {
+
+  private static final org.apache.hadoop.util.ShutdownHookManager MGR =
+      org.apache.hadoop.util.ShutdownHookManager.get();
+
+  private static final DeleteOnExitHook DELETE_ON_EXIT_HOOK = new 
DeleteOnExitHook();
+
+  private static final Logger LOG = 
LoggerFactory.getLogger(ShutdownHookManager.class.getName());
+
+  static {
+    MGR.addShutdownHook(DELETE_ON_EXIT_HOOK, -1);
+  }
+
+  /**
+   * Adds shutdown hook with default priority (10)
+   *
+   * @param shutdownHook - shutdown hook
+   */
+  public static void addShutdownHook(Runnable shutdownHook) {
+    addShutdownHook(shutdownHook, FileSystem.SHUTDOWN_HOOK_PRIORITY);
+  }
+
+  /**
+   * Adds a shutdownHook with a priority, the higher the priority the earlier 
will run.
+   * ShutdownHooks with same priority run in a non-deterministic order.
+   *
+   * @param shutdownHook shutdownHook <code>Runnable</code>
+   * @param priority priority of the shutdownHook.
+   */
+  public static void addShutdownHook(Runnable shutdownHook, int priority) {
+    if (priority < 0) {
+      throw new IllegalArgumentException("Priority should be greater than or 
equal to zero");
+    }
+    MGR.addShutdownHook(shutdownHook, priority);
+  }
+
+  /**
+   * Indicates if shutdown is in progress or not.
+   *
+   * @return TRUE if the shutdown is in progress, otherwise FALSE.
+   */
+  public static boolean isShutdownInProgress() {
+    return MGR.isShutdownInProgress();
+  }
+
+  /**
+   * Removes a shutdownHook.
+   *
+   * @param shutdownHook shutdownHook to remove.
+   * @return TRUE if the shutdownHook was registered and removed, FALSE 
otherwise (including when
+   *     shutdownHook == null)
+   */
+  public static boolean removeShutdownHook(Runnable shutdownHook) {
+    if (shutdownHook == null) {
+      return false;
+    }
+    return MGR.removeShutdownHook(shutdownHook);
+  }
+
+  /** register file to delete-on-exit hook */
+  public static void deleteOnExit(File file) {
+    if (MGR.isShutdownInProgress()) {
+      LOG.warn("Shutdown in progress, cannot add a deleteOnExit");
+    }
+    DELETE_ON_EXIT_HOOK.deleteTargets.add(file);
+  }
+
+  /** deregister file from delete-on-exit hook */
+  public static void cancelDeleteOnExit(File file) {
+    if (MGR.isShutdownInProgress()) {
+      LOG.warn("Shutdown in progress, cannot cancel a deleteOnExit");
+    }
+    DELETE_ON_EXIT_HOOK.deleteTargets.remove(file);
+  }
+
+  @VisibleForTesting
+  static boolean isRegisteredToDeleteOnExit(File file) {
+    return DELETE_ON_EXIT_HOOK.deleteTargets.contains(file);
+  }
+
+  private static class DeleteOnExitHook implements Runnable {
+    private final Set<File> deleteTargets = Collections.synchronizedSet(new 
HashSet<File>());
+
+    @Override
+    public void run() {
+      for (File deleteTarget : deleteTargets) {
+        deleteTarget.delete();
+      }
+      deleteTargets.clear();
+    }
+  }
+}
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/util/StreamPrinter.java
 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/util/StreamPrinter.java
new file mode 100644
index 000000000..43a39853a
--- /dev/null
+++ 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/common/util/StreamPrinter.java
@@ -0,0 +1,64 @@
+/*
+ * 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.hive.beeline.common.util;
+
+import java.io.*;
+import org.apache.hadoop.io.IOUtils;
+
+/** StreamPrinter. */
+public class StreamPrinter extends Thread {
+  InputStream is;
+  String type;
+  PrintStream[] outputStreams;
+
+  public StreamPrinter(InputStream is, String type, PrintStream... 
outputStreams) {
+    this.is = is;
+    this.type = type;
+    this.outputStreams = outputStreams;
+  }
+
+  @Override
+  public void run() {
+    BufferedReader br = null;
+    try {
+      InputStreamReader isr = new InputStreamReader(is);
+      br = new BufferedReader(isr);
+      String line = null;
+      if (type != null) {
+        while ((line = br.readLine()) != null) {
+          for (PrintStream os : outputStreams) {
+            os.println(type + ">" + line);
+          }
+        }
+      } else {
+        while ((line = br.readLine()) != null) {
+          for (PrintStream os : outputStreams) {
+            os.println(line);
+          }
+        }
+      }
+      br.close();
+      br = null;
+    } catch (IOException ioe) {
+      ioe.printStackTrace();
+    } finally {
+      IOUtils.closeStream(br);
+    }
+  }
+}
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/hs2connection/HiveSiteHS2ConnectionFileParser.java
 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/hs2connection/HiveSiteHS2ConnectionFileParser.java
index 322a25a5f..326593785 100644
--- 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/hs2connection/HiveSiteHS2ConnectionFileParser.java
+++ 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/hs2connection/HiveSiteHS2ConnectionFileParser.java
@@ -18,14 +18,13 @@
 package org.apache.hive.beeline.hs2connection;
 
 import com.google.common.annotations.VisibleForTesting;
+import java.io.File;
 import java.net.InetAddress;
+import java.net.URI;
 import java.net.URL;
 import java.net.UnknownHostException;
 import java.util.Properties;
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hive.common.ServerUtils;
-import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -33,27 +32,84 @@ import org.slf4j.LoggerFactory;
  * Looks for a hive-site.xml from the classpath. If found this class parses 
the hive-site.xml
  * to return a set of connection properties which can be used to construct the 
connection url
  * for Beeline connection
+ *
+ * This class is modified to get rid of dependency on HiveConf
  */
 public class HiveSiteHS2ConnectionFileParser implements 
HS2ConnectionFileParser {
   private Configuration conf;
   private final URL hiveSiteURI;
   private static final String TRUSTSTORE_PASS_PROP = 
"javax.net.ssl.trustStorePassword";
   private static final String TRUSTSTORE_PROP = "javax.net.ssl.trustStore";
-  private static final Logger log = 
LoggerFactory.getLogger(HiveSiteHS2ConnectionFileParser.class);
+  private static final Logger LOG = 
LoggerFactory.getLogger(HiveSiteHS2ConnectionFileParser.class);
+
+  // Copied from HiveConf
+  private static URL findConfigFile(ClassLoader classLoader, String name, 
boolean doLog) {
+    URL result = classLoader.getResource(name);
+    if (result == null) {
+      String confPath = System.getenv("HIVE_CONF_DIR");
+      result = checkConfigFile(new File(confPath, name));
+      if (result == null) {
+        String homePath = System.getenv("HIVE_HOME");
+        String nameInConf = "conf" + File.separator + name;
+        result = checkConfigFile(new File(homePath, nameInConf));
+        if (result == null) {
+          URI jarUri = null;
+          try {
+            // Handle both file:// and jar:<url>!{entry} in the case of shaded 
hive libs
+            URL sourceUrl =
+                HiveSiteHS2ConnectionFileParser.class
+                    .getProtectionDomain()
+                    .getCodeSource()
+                    .getLocation();
+            jarUri =
+                sourceUrl.getProtocol().equalsIgnoreCase("jar")
+                    ? new URI(sourceUrl.getPath())
+                    : sourceUrl.toURI();
+          } catch (Throwable e) {
+            LOG.info("Cannot get jar URI", e);
+          }
+          // From the jar file, the parent is /lib folder
+          File parent = new File(jarUri).getParentFile();
+          if (parent != null) {
+            result = checkConfigFile(new File(parent.getParentFile(), 
nameInConf));
+          }
+        }
+      }
+    }
+    if (doLog) {
+      LOG.info("Found configuration file {}", result);
+    }
+    return result;
+  }
+
+  // Copied from HiveConf
+  private static URL checkConfigFile(File f) {
+    try {
+      return (f.exists() && f.isFile()) ? f.toURI().toURL() : null;
+    } catch (Throwable e) {
+      LOG.info("Error looking for config {}", f, e);
+      return null;
+    }
+  }
 
   public HiveSiteHS2ConnectionFileParser() {
-    hiveSiteURI = HiveConf.getHiveSiteLocation();
+    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+    if (classLoader == null) {
+      classLoader = this.getClass().getClassLoader();
+    }
+    // Look for hive-site.xml on the CLASSPATH and log its location if found.
+    hiveSiteURI = findConfigFile(classLoader, "hive-site.xml", true);
     conf = new Configuration();
     if (hiveSiteURI == null) {
-      log.debug("hive-site.xml not found for constructing the connection URL");
+      LOG.debug("hive-site.xml not found for constructing the connection URL");
     } else {
-      log.info("Using hive-site.xml at " + hiveSiteURI);
+      LOG.info("Using hive-site.xml at " + hiveSiteURI);
       conf.addResource(hiveSiteURI);
     }
   }
 
   @VisibleForTesting
-  void setHiveConf(HiveConf hiveConf) {
+  void setHiveConf(Configuration hiveConf) {
     this.conf = hiveConf;
   }
 
@@ -72,7 +128,7 @@ public class HiveSiteHS2ConnectionFileParser implements 
HS2ConnectionFileParser
   }
 
   private void addSSL(Properties props) {
-    if (!HiveConf.getBoolVar(conf, HiveConf.ConfVars.HIVE_SERVER2_USE_SSL)) {
+    if (!conf.getBoolean("hive.server2.use.SSL", false)) {
       return;
     } else {
       props.setProperty("ssl", "true");
@@ -85,32 +141,31 @@ public class HiveSiteHS2ConnectionFileParser implements 
HS2ConnectionFileParser
     if (trustStorePassword != null && !trustStorePassword.isEmpty()) {
       props.setProperty("trustStorePassword", trustStorePassword);
     }
-    String saslQop = HiveConf.getVar(conf, 
ConfVars.HIVE_SERVER2_THRIFT_SASL_QOP);
+    String saslQop = conf.get("hive.server2.thrift.sasl.qop", "auth");
     if (!"auth".equalsIgnoreCase(saslQop)) {
       props.setProperty("sasl.qop", saslQop);
     }
   }
 
   private void addKerberos(Properties props) {
-    if ("KERBEROS".equals(HiveConf.getVar(conf, 
HiveConf.ConfVars.HIVE_SERVER2_AUTHENTICATION))) {
+    if ("KERBEROS".equals(conf.get("hive.server2.authentication", "NONE"))) {
       props.setProperty(
-          "principal", HiveConf.getVar(conf, 
HiveConf.ConfVars.HIVE_SERVER2_KERBEROS_PRINCIPAL));
+          "principal", 
conf.get("hive.server2.authentication.kerberos.principal", ""));
     }
   }
 
   private void addHttp(Properties props) {
-    if ("http".equalsIgnoreCase(HiveConf.getVar(conf, 
ConfVars.HIVE_SERVER2_TRANSPORT_MODE))) {
+    if ("http".equalsIgnoreCase(conf.get("hive.server2.transport.mode", 
"binary"))) {
       props.setProperty("transportMode", "http");
     } else {
       return;
     }
-    props.setProperty("httpPath", HiveConf.getVar(conf, 
ConfVars.HIVE_SERVER2_THRIFT_HTTP_PATH));
+    props.setProperty("httpPath", conf.get("hive.server2.thrift.http.path", 
"cliservice"));
   }
 
   private void addHosts(Properties props) throws 
BeelineHS2ConnectionFileParseException {
     // if zk HA is enabled get hosts property
-    if (HiveConf.getBoolVar(
-        conf, 
HiveConf.ConfVars.HIVE_SERVER2_SUPPORT_DYNAMIC_SERVICE_DISCOVERY)) {
+    if (conf.getBoolean("hive.server2.support.dynamic.service.discovery", 
false)) {
       addZKServiceDiscoveryHosts(props);
     } else {
       addDefaultHS2Hosts(props);
@@ -121,25 +176,42 @@ public class HiveSiteHS2ConnectionFileParser implements 
HS2ConnectionFileParser
       throws BeelineHS2ConnectionFileParseException {
     props.setProperty("serviceDiscoveryMode", "zooKeeper");
     props.setProperty(
-        "zooKeeperNamespace", HiveConf.getVar(conf, 
ConfVars.HIVE_SERVER2_ZOOKEEPER_NAMESPACE));
-    props.setProperty("hosts", HiveConf.getVar(conf, 
ConfVars.HIVE_ZOOKEEPER_QUORUM));
+        "zooKeeperNamespace", conf.get("hive.server2.zookeeper.namespace", 
"hiveserver2"));
+    props.setProperty("hosts", conf.get("hive.zookeeper.quorum", ""));
+  }
+
+  /**
+   * Get the Inet address of the machine of the given host name.
+   *
+   * @param hostname The name of the host
+   * @return The network address of the the host
+   * @throws UnknownHostException
+   */
+  // Copied from ServerUtils
+  private static InetAddress getHostAddress(String hostname) throws 
UnknownHostException {
+    InetAddress serverIPAddress;
+    if (hostname != null && !hostname.isEmpty()) {
+      serverIPAddress = InetAddress.getByName(hostname);
+    } else {
+      serverIPAddress = InetAddress.getLocalHost();
+    }
+    return serverIPAddress;
   }
 
   private void addDefaultHS2Hosts(Properties props) throws 
BeelineHS2ConnectionFileParseException {
     String hiveHost = System.getenv("HIVE_SERVER2_THRIFT_BIND_HOST");
     if (hiveHost == null) {
-      hiveHost = HiveConf.getVar(conf, 
HiveConf.ConfVars.HIVE_SERVER2_THRIFT_BIND_HOST);
+      hiveHost = conf.get("hive.server2.thrift.bind.host", "");
     }
 
     InetAddress serverIPAddress;
     try {
-      serverIPAddress = ServerUtils.getHostAddress(hiveHost);
+      serverIPAddress = getHostAddress(hiveHost);
     } catch (UnknownHostException e) {
       throw new BeelineHS2ConnectionFileParseException(e.getMessage(), e);
     }
     int portNum =
-        getPortNum(
-            "http".equalsIgnoreCase(HiveConf.getVar(conf, 
ConfVars.HIVE_SERVER2_TRANSPORT_MODE)));
+        
getPortNum("http".equalsIgnoreCase(conf.get("hive.server2.transport.mode", 
"binary")));
     props.setProperty("hosts", serverIPAddress.getHostName() + ":" + portNum);
   }
 
@@ -151,14 +223,14 @@ public class HiveSiteHS2ConnectionFileParser implements 
HS2ConnectionFileParser
       if (portString != null) {
         portNum = Integer.parseInt(portString);
       } else {
-        portNum = HiveConf.getIntVar(conf, 
ConfVars.HIVE_SERVER2_THRIFT_HTTP_PORT);
+        portNum = conf.getInt("hive.server2.thrift.http.port", 10001);
       }
     } else {
       portString = System.getenv("HIVE_SERVER2_THRIFT_PORT");
       if (portString != null) {
         portNum = Integer.parseInt(portString);
       } else {
-        portNum = HiveConf.getIntVar(conf, ConfVars.HIVE_SERVER2_THRIFT_PORT);
+        portNum = conf.getInt("hive.server2.thrift.port", 10000);
       }
     }
     return portNum;
diff --git 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/logs/KyuubiBeelineInPlaceUpdateStream.java
 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/logs/KyuubiBeelineInPlaceUpdateStream.java
index e0087332e..6dd311f1a 100644
--- 
a/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/logs/KyuubiBeelineInPlaceUpdateStream.java
+++ 
b/kyuubi-hive-beeline/src/main/java/org/apache/hive/beeline/logs/KyuubiBeelineInPlaceUpdateStream.java
@@ -19,8 +19,8 @@ package org.apache.hive.beeline.logs;
 
 import java.io.PrintStream;
 import java.util.List;
-import org.apache.hadoop.hive.common.log.InPlaceUpdate;
-import org.apache.hadoop.hive.common.log.ProgressMonitor;
+import org.apache.hive.beeline.common.log.InPlaceUpdate;
+import org.apache.hive.beeline.common.log.ProgressMonitor;
 import org.apache.kyuubi.jdbc.hive.logs.InPlaceUpdateStream;
 import org.apache.kyuubi.shaded.hive.service.rpc.thrift.TJobExecutionStatus;
 import org.apache.kyuubi.shaded.hive.service.rpc.thrift.TProgressUpdateResp;
diff --git 
a/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/TestBeelineArgParsing.java
 
b/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/TestBeelineArgParsing.java
index 69c83f28a..e6f92be73 100644
--- 
a/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/TestBeelineArgParsing.java
+++ 
b/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/TestBeelineArgParsing.java
@@ -33,7 +33,7 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.apache.hive.common.util.HiveTestUtils;
+import org.apache.hive.beeline.common.HiveTestUtils;
 import org.apache.kyuubi.util.JavaUtils;
 import org.junit.Assert;
 import org.junit.Test;
diff --git 
a/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/TestClientCommandHookFactory.java
 
b/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/TestClientCommandHookFactory.java
index 6aaef1222..dfb040d78 100644
--- 
a/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/TestClientCommandHookFactory.java
+++ 
b/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/TestClientCommandHookFactory.java
@@ -47,21 +47,6 @@ public class TestClientCommandHookFactory {
     return mockBeeLine;
   }
 
-  @Test
-  public void testGetHookCli() {
-    BeeLine beeLine = setupMockData(false, false);
-    Assert.assertNull(ClientCommandHookFactory.get().getHook(beeLine, "set 
a;"));
-    Assert.assertTrue(
-        ClientCommandHookFactory.get().getHook(beeLine, "set a=b;")
-            instanceof ClientCommandHookFactory.SetCommandHook);
-    Assert.assertTrue(
-        ClientCommandHookFactory.get().getHook(beeLine, "USE a.b")
-            instanceof ClientCommandHookFactory.UseCommandHook);
-    Assert.assertNull(ClientCommandHookFactory.get().getHook(beeLine, "coNNect 
a.b"));
-    Assert.assertNull(ClientCommandHookFactory.get().getHook(beeLine, "gO 1"));
-    Assert.assertNull(ClientCommandHookFactory.get().getHook(beeLine, "g"));
-  }
-
   @Test
   public void testGetHookBeeLineWithShowDbInPrompt() {
     BeeLine beeLine = setupMockData(true, true);
diff --git 
a/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/TestCommands.java 
b/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/TestCommands.java
index 6794f9179..f000d7d54 100644
--- 
a/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/TestCommands.java
+++ 
b/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/TestCommands.java
@@ -18,7 +18,7 @@
 
 package org.apache.hive.beeline;
 
-import static org.apache.hive.common.util.HiveStringUtils.removeComments;
+import static 
org.apache.hive.beeline.common.util.HiveStringUtils.removeComments;
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
diff --git 
a/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/common/HiveTestUtils.java
 
b/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/common/HiveTestUtils.java
new file mode 100644
index 000000000..cf437df14
--- /dev/null
+++ 
b/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/common/HiveTestUtils.java
@@ -0,0 +1,104 @@
+/*
+ * 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.hive.beeline.common;
+
+import com.google.common.io.Files;
+import java.io.*;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+import org.apache.commons.io.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class HiveTestUtils {
+  public static final Logger LOG = 
LoggerFactory.getLogger(HiveTestUtils.class);
+
+  public static final String JAVA_FILE_EXT = ".java";
+  public static final String CLAZZ_FILE_EXT = ".class";
+  public static final String JAR_FILE_EXT = ".jar";
+  public static final String TXT_FILE_EXT = ".txt";
+
+  public static String getFileFromClasspath(String name) {
+    URL url = ClassLoader.getSystemResource(name);
+    if (url == null) {
+      throw new IllegalArgumentException("Could not find " + name);
+    }
+    return url.getPath();
+  }
+
+  private static void executeCmd(String[] cmdArr, File dir)
+      throws IOException, InterruptedException {
+    final Process p1 = Runtime.getRuntime().exec(cmdArr, null, dir);
+    new Thread(
+            new Runnable() {
+              @Override
+              public void run() {
+                BufferedReader input =
+                    new BufferedReader(new 
InputStreamReader(p1.getErrorStream()));
+                String line;
+                try {
+                  while ((line = input.readLine()) != null) {
+                    System.out.println(line);
+                  }
+                } catch (IOException e) {
+                  LOG.error("Failed to execute the command due the exception " 
+ e);
+                }
+              }
+            })
+        .start();
+    p1.waitFor();
+  }
+
+  public static File genLocalJarForTest(String pathToClazzFile, String 
clazzName)
+      throws IOException, InterruptedException {
+    return genLocalJarForTest(pathToClazzFile, clazzName, new HashMap<File, 
String>());
+  }
+
+  public static File genLocalJarForTest(
+      String pathToClazzFile, String clazzName, Map<File, String> extraContent)
+      throws IOException, InterruptedException {
+    String u = pathToClazzFile;
+    File dir = new File(u);
+    File parentDir = dir.getParentFile();
+    File f = new File(parentDir, clazzName + JAVA_FILE_EXT);
+    Files.copy(dir, f);
+    executeCmd(new String[] {"javac", clazzName + JAVA_FILE_EXT}, parentDir);
+    f.delete();
+
+    File outputJar = new File(parentDir, clazzName + JAR_FILE_EXT);
+    ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(outputJar));
+    String contentClassName = clazzName + CLAZZ_FILE_EXT;
+    zos.putNextEntry(new ZipEntry(contentClassName));
+    IOUtils.copy(new FileInputStream(new File(parentDir, contentClassName)), 
zos);
+    zos.closeEntry();
+
+    for (Entry<File, String> entry : extraContent.entrySet()) {
+      zos.putNextEntry(new ZipEntry(entry.getKey().toString()));
+      zos.write(entry.getValue().getBytes());
+      zos.closeEntry();
+    }
+    zos.close();
+    new File(parentDir, contentClassName).delete();
+    return outputJar;
+  }
+}
diff --git 
a/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/hs2connection/TestUserHS2ConnectionFileParser.java
 
b/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/hs2connection/TestUserHS2ConnectionFileParser.java
index d038fef5b..685b4d136 100644
--- 
a/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/hs2connection/TestUserHS2ConnectionFileParser.java
+++ 
b/kyuubi-hive-beeline/src/test/java/org/apache/hive/beeline/hs2connection/TestUserHS2ConnectionFileParser.java
@@ -20,7 +20,7 @@ package org.apache.hive.beeline.hs2connection;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
-import org.apache.hive.common.util.HiveTestUtils;
+import org.apache.hive.beeline.common.HiveTestUtils;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Test;

Reply via email to