You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by na...@apache.org on 2012/03/16 07:21:39 UTC

svn commit: r1301347 - in /hive/trunk: cli/src/java/org/apache/hadoop/hive/cli/ common/src/java/org/apache/hadoop/hive/conf/ ql/src/java/org/apache/hadoop/hive/ql/processors/ ql/src/java/org/apache/hadoop/hive/ql/session/ ql/src/test/org/apache/hadoop/...

Author: namit
Date: Fri Mar 16 06:21:39 2012
New Revision: 1301347

URL: http://svn.apache.org/viewvc?rev=1301347&view=rev
Log:
HIVE-2872 Store which configs the user has explicitly changed
(Kevin Wilfng via namit)


Added:
    hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/hooks/VerifyOverriddenConfigsHook.java
    hive/trunk/ql/src/test/queries/clientpositive/overridden_confs.q
    hive/trunk/ql/src/test/results/clientpositive/overridden_confs.q.out
Modified:
    hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java
    hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java

Modified: hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java
URL: http://svn.apache.org/viewvc/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java?rev=1301347&r1=1301346&r2=1301347&view=diff
==============================================================================
--- hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java (original)
+++ hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java Fri Mar 16 06:21:39 2012
@@ -32,12 +32,12 @@ import java.util.Map;
 import java.util.Set;
 
 import jline.ArgumentCompletor;
-import jline.ArgumentCompletor.AbstractArgumentDelimiter;
-import jline.ArgumentCompletor.ArgumentDelimiter;
 import jline.Completor;
 import jline.ConsoleReader;
 import jline.History;
 import jline.SimpleCompletor;
+import jline.ArgumentCompletor.AbstractArgumentDelimiter;
+import jline.ArgumentCompletor.ArgumentDelimiter;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
@@ -602,6 +602,7 @@ public class CliDriver {
     HiveConf conf = ss.getConf();
     for (Map.Entry<Object, Object> item : ss.cmdProperties.entrySet()) {
       conf.set((String) item.getKey(), (String) item.getValue());
+      ss.getOverriddenConfigurations().put((String) item.getKey(), (String) item.getValue());
     }
 
     SessionState.start(ss);

Modified: hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
URL: http://svn.apache.org/viewvc/hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java?rev=1301347&r1=1301346&r2=1301347&view=diff
==============================================================================
--- hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (original)
+++ hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java Fri Mar 16 06:21:39 2012
@@ -23,8 +23,10 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.PrintStream;
 import java.net.URL;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Properties;
 
 import javax.security.auth.login.LoginException;
@@ -865,13 +867,28 @@ public class HiveConf extends Configurat
    * and the value is non-null and not an empty string.
    */
   private void applySystemProperties() {
+    Map<String, String> systemProperties = getConfSystemProperties();
+    for (Entry<String, String> systemProperty : systemProperties.entrySet()) {
+      this.set(systemProperty.getKey(), systemProperty.getValue());
+    }
+  }
+
+  /**
+   * This method returns a mapping from config variable name to its value for all config variables
+   * which have been set using System properties
+   */
+  public static Map<String, String> getConfSystemProperties() {
+    Map<String, String> systemProperties = new HashMap<String, String>();
+
     for (ConfVars oneVar : ConfVars.values()) {
       if (System.getProperty(oneVar.varname) != null) {
         if (System.getProperty(oneVar.varname).length() > 0) {
-          this.set(oneVar.varname, System.getProperty(oneVar.varname));
+          systemProperties.put(oneVar.varname, System.getProperty(oneVar.varname));
         }
       }
     }
+
+    return systemProperties;
   }
 
   /**

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=1301347&r1=1301346&r2=1301347&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 Fri Mar 16 06:21:39 2012
@@ -18,8 +18,8 @@
 
 package org.apache.hadoop.hive.ql.processors;
 
-import static org.apache.hadoop.hive.serde.Constants.STRING_TYPE_NAME;
 import static org.apache.hadoop.hive.serde.Constants.SERIALIZATION_NULL_FORMAT;
+import static org.apache.hadoop.hive.serde.Constants.STRING_TYPE_NAME;
 import static org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe.defaultNullString;
 
 import java.util.Map;
@@ -27,8 +27,8 @@ import java.util.Properties;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
-import org.apache.hadoop.hive.metastore.api.Schema;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
+import org.apache.hadoop.hive.metastore.api.Schema;
 import org.apache.hadoop.hive.ql.parse.VariableSubstitution;
 import org.apache.hadoop.hive.ql.session.SessionState;
 
@@ -119,7 +119,9 @@ public class SetProcessor implements Com
       ss.getHiveVariables().put(propName, new VariableSubstitution().substitute(ss.getConf(),varvalue));
       return new CommandProcessorResponse(0);
     } else {
-      ss.getConf().set(varname, new VariableSubstitution().substitute(ss.getConf(),varvalue) );
+      String substitutedValue = new VariableSubstitution().substitute(ss.getConf(),varvalue);
+      ss.getConf().set(varname, substitutedValue );
+      ss.getOverriddenConfigurations().put(varname, substitutedValue);
       return new CommandProcessorResponse(0);
     }
   }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java?rev=1301347&r1=1301346&r2=1301347&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java Fri Mar 16 06:21:39 2012
@@ -116,6 +116,12 @@ public class SessionState {
 
   private Map<String, String> hiveVariables;
 
+  // This mapping collects all the configuration variables which have been set by the user
+  // explicitely, either via SET in the CLI, the hiveconf option, or a System property.
+  // It is a mapping from the variable name to its value.  Note that if a user repeatedly
+  // changes the value of a variable, the corresponding change will be made in this mapping.
+  private Map<String, String> overriddenConfigurations;
+
   /**
    * Lineage state.
    */
@@ -177,6 +183,8 @@ public class SessionState {
     this.conf = conf;
     isSilent = conf.getBoolVar(HiveConf.ConfVars.HIVESESSIONSILENT);
     ls = new LineageState();
+    overriddenConfigurations = new HashMap<String, String>();
+    overriddenConfigurations.putAll(HiveConf.getConfSystemProperties());
 
     // Register the Hive builtins jar and all of its functions
     try {
@@ -699,4 +707,15 @@ public class SessionState {
   public void setLastMapRedStatsList(List<MapRedStats> lastMapRedStatsList) {
     this.lastMapRedStatsList = lastMapRedStatsList;
   }
+
+  public Map<String, String> getOverriddenConfigurations() {
+    if (overriddenConfigurations == null) {
+      overriddenConfigurations = new HashMap<String, String>();
+    }
+    return overriddenConfigurations;
+  }
+
+  public void setOverriddenConfigurations(Map<String, String> overriddenConfigurations) {
+    this.overriddenConfigurations = overriddenConfigurations;
+  }
 }

Added: hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/hooks/VerifyOverriddenConfigsHook.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/hooks/VerifyOverriddenConfigsHook.java?rev=1301347&view=auto
==============================================================================
--- hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/hooks/VerifyOverriddenConfigsHook.java (added)
+++ hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/hooks/VerifyOverriddenConfigsHook.java Fri Mar 16 06:21:39 2012
@@ -0,0 +1,59 @@
+/**
+ * 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.hadoop.hive.ql.hooks;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map.Entry;
+
+import org.apache.hadoop.hive.ql.session.SessionState;
+import org.apache.hadoop.hive.ql.session.SessionState.LogHelper;
+
+/**
+ *
+ * VerifyOverriddenConfigsHook.
+ *
+ * This hook is meant to be used for testing.  It prints the keys and values of config variables
+ * which have been noted by the session state as changed by the user.  It only prints specific
+ * variables as others may change and that should not affect this test.
+ */
+public class VerifyOverriddenConfigsHook implements ExecuteWithHookContext {
+
+  // A config variable set via a System Propery, a config variable set in the CLI,
+  // a config variable not in the default List of config variables, and a config variable in the
+  // default list of conifg variables, but which has not been overridden
+  private static String[] keysArray =
+    {"mapred.job.tracker", "hive.exec.post.hooks", "hive.config.doesnt.exit",
+     "hive.exec.mode.local.auto"};
+  private static List<String> keysList = Arrays.asList(keysArray);
+
+  public void run(HookContext hookContext) {
+    LogHelper console = SessionState.getConsole();
+    SessionState ss = SessionState.get();
+
+    if (console == null || ss == null) {
+      return;
+    }
+
+    for (Entry<String, String> entry : ss.getOverriddenConfigurations().entrySet()) {
+      if (keysList.contains(entry.getKey())) {
+        console.printError("Key: " + entry.getKey() + ", Value: " + entry.getValue());
+      }
+    }
+  }
+}

Added: hive/trunk/ql/src/test/queries/clientpositive/overridden_confs.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/overridden_confs.q?rev=1301347&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/overridden_confs.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/overridden_confs.q Fri Mar 16 06:21:39 2012
@@ -0,0 +1,4 @@
+set hive.exec.post.hooks=org.apache.hadoop.hive.ql.hooks.VerifyOverriddenConfigsHook;
+set hive.config.doesnt.exit=abc;
+
+select count(*) from src;

Added: hive/trunk/ql/src/test/results/clientpositive/overridden_confs.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/overridden_confs.q.out?rev=1301347&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/overridden_confs.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/overridden_confs.q.out Fri Mar 16 06:21:39 2012
@@ -0,0 +1,8 @@
+PREHOOK: query: select count(*) from src
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+#### A masked pattern was here ####
+Key: mapred.job.tracker, Value: local
+Key: hive.exec.post.hooks, Value: org.apache.hadoop.hive.ql.hooks.VerifyOverriddenConfigsHook
+Key: hive.config.doesnt.exit, Value: abc
+500