HIVE-13424: Refactoring the code to pass a QueryState object rather than HiveConf object (Reviewed by Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/caa3ec76 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/caa3ec76 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/caa3ec76 Branch: refs/heads/master Commit: caa3ec761c18d822259116fde9ff8a4f181df179 Parents: 86bdcbc Author: Aihua Xu <aihu...@apache.org> Authored: Tue Mar 15 13:12:57 2016 -0400 Committer: Aihua Xu <aihu...@apache.org> Committed: Mon Apr 25 16:30:09 2016 -0400 ---------------------------------------------------------------------- .../org/apache/hadoop/hive/cli/CliDriver.java | 5 - .../mapreduce/TestHCatMultiOutputFormat.java | 7 +- .../org/apache/hadoop/hive/ql/QTestUtil.java | 9 +- .../java/org/apache/hadoop/hive/ql/Driver.java | 93 ++++----------- .../org/apache/hadoop/hive/ql/QueryState.java | 114 +++++++++++++++++++ .../hadoop/hive/ql/exec/ColumnStatsTask.java | 5 +- .../hive/ql/exec/ColumnStatsUpdateTask.java | 6 +- .../org/apache/hadoop/hive/ql/exec/DDLTask.java | 9 +- .../apache/hadoop/hive/ql/exec/ExplainTask.java | 4 +- .../apache/hadoop/hive/ql/exec/FetchTask.java | 5 +- .../hadoop/hive/ql/exec/FunctionTask.java | 6 +- .../hadoop/hive/ql/exec/StatsNoJobTask.java | 5 +- .../org/apache/hadoop/hive/ql/exec/Task.java | 6 +- .../hadoop/hive/ql/exec/mr/ExecDriver.java | 11 +- .../hive/ql/exec/mr/HadoopJobExecHelper.java | 21 ++-- .../hadoop/hive/ql/exec/mr/MapredLocalTask.java | 7 +- .../hadoop/hive/ql/exec/spark/SparkTask.java | 7 +- .../hadoop/hive/ql/history/HiveHistoryImpl.java | 6 +- .../apache/hadoop/hive/ql/hooks/ATSHook.java | 4 +- .../hadoop/hive/ql/hooks/HookContext.java | 11 +- .../hive/ql/hooks/PostExecutePrinter.java | 12 +- .../hadoop/hive/ql/hooks/PreExecutePrinter.java | 14 ++- .../hive/ql/index/TableBasedIndexHandler.java | 2 - .../hadoop/hive/ql/io/merge/MergeFileTask.java | 7 +- .../ql/io/rcfile/stats/PartialScanTask.java | 12 +- .../io/rcfile/truncate/ColumnTruncateTask.java | 7 +- .../hive/ql/optimizer/GenMRTableScan1.java | 2 +- .../index/RewriteParseContextGenerator.java | 7 +- .../RewriteQueryUsingAggregateIndexCtx.java | 2 +- .../hive/ql/parse/BaseSemanticAnalyzer.java | 14 ++- .../hadoop/hive/ql/parse/CalcitePlanner.java | 11 +- .../ql/parse/ColumnStatsSemanticAnalyzer.java | 7 +- .../hive/ql/parse/DDLSemanticAnalyzer.java | 13 ++- .../parse/ExplainSQRewriteSemanticAnalyzer.java | 8 +- .../hive/ql/parse/ExplainSemanticAnalyzer.java | 7 +- .../hive/ql/parse/ExportSemanticAnalyzer.java | 5 +- .../hive/ql/parse/FunctionSemanticAnalyzer.java | 5 +- .../hive/ql/parse/ImportSemanticAnalyzer.java | 5 +- .../hive/ql/parse/LoadSemanticAnalyzer.java | 5 +- .../hive/ql/parse/MacroSemanticAnalyzer.java | 12 +- .../hadoop/hive/ql/parse/ParseContext.java | 14 ++- .../hive/ql/parse/ProcessAnalyzeTable.java | 2 +- .../hadoop/hive/ql/parse/SemanticAnalyzer.java | 35 +++--- .../hive/ql/parse/SemanticAnalyzerFactory.java | 57 +++++----- .../hadoop/hive/ql/parse/TaskCompiler.java | 9 +- .../hadoop/hive/ql/parse/TezCompiler.java | 5 +- .../ql/parse/UpdateDeleteSemanticAnalyzer.java | 5 +- .../parse/spark/SparkProcessAnalyzeTable.java | 2 +- .../hadoop/hive/ql/session/SessionState.java | 106 ++++++----------- .../hadoop/hive/ql/exec/TestExecDriver.java | 7 +- .../ql/parse/TestMacroSemanticAnalyzer.java | 7 +- .../hadoop/hive/ql/parse/TestQBCompact.java | 8 +- .../ql/parse/TestQBJoinTreeApplyPredicate.java | 7 +- .../hadoop/hive/ql/parse/TestQBSubQuery.java | 7 +- .../ql/parse/TestSemanticAnalyzerFactory.java | 9 +- .../parse/TestUpdateDeleteSemanticAnalyzer.java | 9 +- .../authorization/AuthorizationTestUtil.java | 14 +-- .../parse/authorization/PrivilegesTestBase.java | 5 +- .../TestHiveAuthorizationTaskFactory.java | 12 +- .../parse/authorization/TestPrivilegesV1.java | 9 +- .../parse/authorization/TestPrivilegesV2.java | 8 +- .../hive/service/cli/operation/Operation.java | 19 ++-- .../service/cli/operation/SQLOperation.java | 49 ++------ .../cli/operation/SQLOperationDisplay.java | 2 +- .../service/cli/session/HiveSessionImpl.java | 40 +++---- 65 files changed, 508 insertions(+), 437 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java ---------------------------------------------------------------------- diff --git a/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java b/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java index 2bcb56d..f467c81 100644 --- a/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java +++ b/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java @@ -121,8 +121,6 @@ public class CliDriver { ss.updateThreadName(); - conf.set(HiveConf.ConfVars.HIVEQUERYID.varname, QueryPlan.makeQueryId()); - // Flush the print stream, so it doesn't include output from the last command ss.err.flush(); String cmd_trimmed = cmd.trim(); @@ -401,9 +399,6 @@ public class CliDriver { } ret = processCmd(command); - //wipe cli query state - SessionState ss = SessionState.get(); - ss.setCommandType(null); command = ""; lastRet = ret; boolean ignoreErrors = HiveConf.getBoolVar(conf, HiveConf.ConfVars.CLIIGNOREERRORS); http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/hcatalog/core/src/test/java/org/apache/hive/hcatalog/mapreduce/TestHCatMultiOutputFormat.java ---------------------------------------------------------------------- diff --git a/hcatalog/core/src/test/java/org/apache/hive/hcatalog/mapreduce/TestHCatMultiOutputFormat.java b/hcatalog/core/src/test/java/org/apache/hive/hcatalog/mapreduce/TestHCatMultiOutputFormat.java index 1964410..9fa263d 100644 --- a/hcatalog/core/src/test/java/org/apache/hive/hcatalog/mapreduce/TestHCatMultiOutputFormat.java +++ b/hcatalog/core/src/test/java/org/apache/hive/hcatalog/mapreduce/TestHCatMultiOutputFormat.java @@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Random; + import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileUtil; @@ -40,6 +41,7 @@ import org.apache.hadoop.hive.metastore.api.SerDeInfo; import org.apache.hadoop.hive.metastore.api.StorageDescriptor; import org.apache.hadoop.hive.metastore.api.Table; import org.apache.hadoop.hive.ql.CompilationOpContext; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.FetchTask; import org.apache.hadoop.hive.ql.exec.Utilities; import org.apache.hadoop.hive.ql.metadata.Hive; @@ -369,7 +371,8 @@ public class TestHCatMultiOutputFormat { * @throws Exception if any error occurs */ private List<String> getTableData(String table, String database) throws Exception { - HiveConf conf = new HiveConf(); + QueryState queryState = new QueryState(null); + HiveConf conf = queryState.getConf(); conf.addResource("hive-site.xml"); ArrayList<String> results = new ArrayList<String>(); ArrayList<String> temp = new ArrayList<String>(); @@ -392,7 +395,7 @@ public class TestHCatMultiOutputFormat { } FetchTask task = new FetchTask(); task.setWork(work); - task.initialize(conf, null, null, new CompilationOpContext()); + task.initialize(queryState, null, null, new CompilationOpContext()); task.fetch(temp); for (String str : temp) { results.add(str.replace("\t", ",")); http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java ---------------------------------------------------------------------- diff --git a/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java b/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java index 8473436..a6e8efa 100644 --- a/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java +++ b/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java @@ -163,6 +163,7 @@ public class QTestUtil { private static MiniClusterType clusterType = MiniClusterType.none; private ParseDriver pd; protected Hive db; + protected QueryState queryState; protected HiveConf conf; private Driver drv; private BaseSemanticAnalyzer sem; @@ -389,10 +390,12 @@ public class QTestUtil { HiveConf.setHiveSiteLocation(new URL("file://"+ new File(confDir).toURI().getPath() + "/hive-site.xml")); System.out.println("Setting hive-site: "+HiveConf.getHiveSiteLocation()); } + + queryState = new QueryState(new HiveConf(Driver.class)); if (useHBaseMetastore) { startMiniHBaseCluster(); } else { - conf = new HiveConf(Driver.class); + conf = queryState.getConf(); } this.hadoopVer = getHadoopMainVersion(hadoopVer); qMap = new TreeMap<String, String>(); @@ -922,7 +925,7 @@ public class QTestUtil { drv = new Driver(conf); drv.init(); pd = new ParseDriver(); - sem = new SemanticAnalyzer(conf); + sem = new SemanticAnalyzer(queryState); } public void init(String tname) throws Exception { @@ -1648,7 +1651,7 @@ public class QTestUtil { public void resetParser() throws SemanticException { drv.init(); pd = new ParseDriver(); - sem = new SemanticAnalyzer(conf); + sem = new SemanticAnalyzer(queryState); } http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/Driver.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java index 2a06962..7f72efb 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java @@ -165,6 +165,9 @@ public class Driver implements CommandProcessor { // For WebUI. Kept alive after queryPlan is freed. private final QueryDisplay queryDisplay = new QueryDisplay(); + // Query specific info + private QueryState queryState; + private boolean checkConcurrency() { boolean supportConcurrency = conf.getBoolVar(HiveConf.ConfVars.HIVE_SUPPORT_CONCURRENCY); if (!supportConcurrency) { @@ -290,22 +293,28 @@ public class Driver implements CommandProcessor { this.maxRows = maxRows; } + public Driver() { + this(new QueryState((SessionState.get() != null) ? + SessionState.get().getConf() : new HiveConf()), null); + } + /** * for backwards compatibility with current tests */ public Driver(HiveConf conf) { - this.conf = conf; - isParallelEnabled = (conf != null) - && HiveConf.getBoolVar(conf, ConfVars.HIVE_SERVER2_PARALLEL_COMPILATION); + this(new QueryState(conf), null); } public Driver(HiveConf conf, String userName) { - this(conf); - this.userName = userName; + this(new QueryState(conf), userName); } - public Driver() { - this((SessionState.get() != null) ? SessionState.get().getConf() : null); + public Driver(QueryState queryState, String userName) { + this.queryState = queryState; + this.conf = queryState.getConf(); + isParallelEnabled = (conf != null) + && HiveConf.getBoolVar(conf, ConfVars.HIVE_SERVER2_PARALLEL_COMPILATION); + this.userName = userName; } /** @@ -320,52 +329,6 @@ public class Driver implements CommandProcessor { } /** - * Hold state variables specific to each query being executed, that may not - * be consistent in the overall SessionState - */ - private static class QueryState { - private HiveOperation op; - private String cmd; - private boolean init = false; - - /** - * Initialize the queryState with the query state variables - */ - public void init(HiveOperation op, String cmd) { - this.op = op; - this.cmd = cmd; - this.init = true; - } - - public boolean isInitialized() { - return this.init; - } - - public HiveOperation getOp() { - return this.op; - } - - public String getCmd() { - return this.cmd; - } - } - - public void saveSession(QueryState qs) { - SessionState oldss = SessionState.get(); - if (oldss != null && oldss.getHiveOperation() != null) { - qs.init(oldss.getHiveOperation(), oldss.getCmd()); - } - } - - public void restoreSession(QueryState qs) { - SessionState ss = SessionState.get(); - if (ss != null && qs != null && qs.isInitialized()) { - ss.setCmd(qs.getCmd()); - ss.setCommandType(qs.getOp()); - } - } - - /** * Compile a new query, but potentially reset taskID counter. Not resetting task counter * is useful for generating re-entrant QL queries. * @param command The HiveQL query to compile @@ -392,9 +355,6 @@ public class Driver implements CommandProcessor { LOG.warn("WARNING! Query command could not be redacted." + e); } - //holder for parent command type/string when executing reentrant queries - QueryState queryState = new QueryState(); - if (ctx != null) { close(); } @@ -402,7 +362,6 @@ public class Driver implements CommandProcessor { if (resetTaskIds) { TaskFactory.resetId(); } - saveSession(queryState); String queryId = conf.getVar(HiveConf.ConfVars.HIVEQUERYID); @@ -447,7 +406,7 @@ public class Driver implements CommandProcessor { perfLogger.PerfLogBegin(CLASS_NAME, PerfLogger.ANALYZE); - BaseSemanticAnalyzer sem = SemanticAnalyzerFactory.get(conf, tree); + BaseSemanticAnalyzer sem = SemanticAnalyzerFactory.get(queryState, tree); List<HiveSemanticAnalyzerHook> saHooks = getHooks(HiveConf.ConfVars.SEMANTIC_ANALYZER_HOOK, HiveSemanticAnalyzerHook.class); @@ -491,7 +450,7 @@ public class Driver implements CommandProcessor { schema = getSchema(sem, conf); plan = new QueryPlan(queryStr, sem, perfLogger.getStartTime(PerfLogger.DRIVER_RUN), queryId, - SessionState.get().getHiveOperation(), schema, queryDisplay); + queryState.getHiveOperation(), schema, queryDisplay); conf.setQueryString(queryStr); @@ -500,7 +459,7 @@ public class Driver implements CommandProcessor { // initialize FetchTask right here if (plan.getFetchTask() != null) { - plan.getFetchTask().initialize(conf, plan, null, ctx.getOpContext()); + plan.getFetchTask().initialize(queryState, plan, null, ctx.getOpContext()); } //do the authorization check @@ -509,7 +468,7 @@ public class Driver implements CommandProcessor { try { perfLogger.PerfLogBegin(CLASS_NAME, PerfLogger.DO_AUTHORIZATION); - doAuthorization(sem, command); + doAuthorization(queryState.getHiveOperation(), sem, command); } catch (AuthorizationException authExp) { console.printError("Authorization failed:" + authExp.getMessage() + ". Use SHOW GRANT to get more details."); @@ -562,7 +521,6 @@ public class Driver implements CommandProcessor { double duration = perfLogger.PerfLogEnd(CLASS_NAME, PerfLogger.COMPILE)/1000.00; ImmutableMap<String, Long> compileHMSTimings = dumpMetaCallTimingWithoutEx("compilation"); queryDisplay.setHmsTimings(QueryDisplay.Phase.COMPILATION, compileHMSTimings); - restoreSession(queryState); LOG.info("Completed compiling command(queryId=" + queryId + "); Time taken: " + duration + " seconds"); } } @@ -589,7 +547,7 @@ public class Driver implements CommandProcessor { ASTNode astTree) throws IOException { String ret = null; ExplainTask task = new ExplainTask(); - task.initialize(conf, plan, null, ctx.getOpContext()); + task.initialize(queryState, plan, null, ctx.getOpContext()); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream ps = new PrintStream(baos); try { @@ -612,10 +570,9 @@ public class Driver implements CommandProcessor { * @throws HiveException * @throws AuthorizationException */ - public static void doAuthorization(BaseSemanticAnalyzer sem, String command) + public static void doAuthorization(HiveOperation op, BaseSemanticAnalyzer sem, String command) throws HiveException, AuthorizationException { SessionState ss = SessionState.get(); - HiveOperation op = ss.getHiveOperation(); Hive db = sem.getDb(); Set<ReadEntity> additionalInputs = new HashSet<ReadEntity>(); @@ -1530,7 +1487,7 @@ public class Driver implements CommandProcessor { resStream = null; SessionState ss = SessionState.get(); - hookContext = new HookContext(plan, conf, ctx.getPathToCS(), ss.getUserName(), + hookContext = new HookContext(plan, queryState, ctx.getPathToCS(), ss.getUserName(), ss.getUserIpAddress(), operationId); hookContext.setHookType(HookContext.HookType.PRE_EXEC_HOOK); @@ -1857,7 +1814,7 @@ public class Driver implements CommandProcessor { cxt.incCurJobNo(1); console.printInfo("Launching Job " + cxt.getCurJobNo() + " out of " + jobs); } - tsk.initialize(conf, plan, cxt, ctx.getOpContext()); + tsk.initialize(queryState, plan, cxt, ctx.getOpContext()); TaskResult tskRes = new TaskResult(); TaskRunner tskRun = new TaskRunner(tsk, tskRes); @@ -1958,7 +1915,7 @@ public class Driver implements CommandProcessor { throw new IOException("Error closing the current fetch task", e); } // FetchTask should not depend on the plan. - fetchTask.initialize(conf, null, null, ctx.getOpContext()); + fetchTask.initialize(queryState, null, null, ctx.getOpContext()); } else { ctx.resetStream(); resStream = null; http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/QueryState.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/QueryState.java b/ql/src/java/org/apache/hadoop/hive/ql/QueryState.java new file mode 100644 index 0000000..78715d8 --- /dev/null +++ b/ql/src/java/org/apache/hadoop/hive/ql/QueryState.java @@ -0,0 +1,114 @@ +/** + * 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; + +import java.sql.Timestamp; +import java.util.Map; + +import org.apache.hadoop.hive.conf.HiveConf; +import org.apache.hadoop.hive.ql.metadata.HiveException; +import org.apache.hadoop.hive.ql.plan.HiveOperation; + +/** + * The class to store query level info such as queryId. Multiple queries can run + * in the same session, so SessionState is to hold common session related info, and + * each QueryState is to hold query related info. + * + */ +public class QueryState { + /** + * current configuration. + */ + private final HiveConf queryConf; + /** + * type of the command. + */ + private HiveOperation commandType; + + public QueryState(HiveConf conf) { + this(conf, null, false); + } + + public QueryState(HiveConf conf, Map<String, String> confOverlay, boolean runAsync) { + this.queryConf = createConf(conf, confOverlay, runAsync); + } + + /** + * If there are query specific settings to overlay, then create a copy of config + * There are two cases we need to clone the session config that's being passed to hive driver + * 1. Async query - + * If the client changes a config setting, that shouldn't reflect in the execution already underway + * 2. confOverlay - + * The query specific settings should only be applied to the query config and not session + * @return new configuration + */ + private HiveConf createConf(HiveConf conf, + Map<String, String> confOverlay, + boolean runAsync) { + + if ( (confOverlay != null && !confOverlay.isEmpty()) ) { + conf = (conf == null ? new HiveConf() : new HiveConf(conf)); + + // apply overlay query specific settings, if any + for (Map.Entry<String, String> confEntry : confOverlay.entrySet()) { + try { + conf.verifyAndSet(confEntry.getKey(), confEntry.getValue()); + } catch (IllegalArgumentException e) { + throw new RuntimeException("Error applying statement specific settings", e); + } + } + } else if (runAsync) { + conf = (conf == null ? new HiveConf() : new HiveConf(conf)); + } + + if (conf == null) { + conf = new HiveConf(); + } + + conf.setVar(HiveConf.ConfVars.HIVEQUERYID, QueryPlan.makeQueryId()); + return conf; + } + + public String getQueryId() { + return (queryConf.getVar(HiveConf.ConfVars.HIVEQUERYID)); + } + + public String getQueryString() { + return queryConf.getQueryString(); + } + + public String getCommandType() { + if (commandType == null) { + return null; + } + return commandType.getOperationName(); + } + + public HiveOperation getHiveOperation() { + return commandType; + } + + public void setCommandType(HiveOperation commandType) { + this.commandType = commandType; + } + + public HiveConf getConf() { + return queryConf; + } +} http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnStatsTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnStatsTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnStatsTask.java index 9059928..05dfa3b 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnStatsTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnStatsTask.java @@ -49,6 +49,7 @@ import org.apache.hadoop.hive.metastore.api.StringColumnStatsData; import org.apache.hadoop.hive.ql.CompilationOpContext; import org.apache.hadoop.hive.ql.DriverContext; import org.apache.hadoop.hive.ql.QueryPlan; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.metadata.Hive; import org.apache.hadoop.hive.ql.metadata.HiveException; import org.apache.hadoop.hive.ql.metadata.Table; @@ -83,9 +84,9 @@ public class ColumnStatsTask extends Task<ColumnStatsWork> implements Serializab } @Override - public void initialize(HiveConf conf, QueryPlan queryPlan, DriverContext ctx, + public void initialize(QueryState queryState, QueryPlan queryPlan, DriverContext ctx, CompilationOpContext opContext) { - super.initialize(conf, queryPlan, ctx, opContext); + super.initialize(queryState, queryPlan, ctx, opContext); work.initializeForFetch(opContext); try { JobConf job = new JobConf(conf); http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnStatsUpdateTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnStatsUpdateTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnStatsUpdateTask.java index bca8a6c..9a6e5c9 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnStatsUpdateTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnStatsUpdateTask.java @@ -27,7 +27,6 @@ import java.util.Map.Entry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.metastore.api.BinaryColumnStatsData; import org.apache.hadoop.hive.metastore.api.BooleanColumnStatsData; import org.apache.hadoop.hive.metastore.api.ColumnStatistics; @@ -45,6 +44,7 @@ import org.apache.hadoop.hive.metastore.api.StringColumnStatsData; import org.apache.hadoop.hive.ql.CompilationOpContext; import org.apache.hadoop.hive.ql.DriverContext; import org.apache.hadoop.hive.ql.QueryPlan; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.metadata.Hive; import org.apache.hadoop.hive.ql.metadata.HiveException; import org.apache.hadoop.hive.ql.parse.SemanticException; @@ -68,9 +68,9 @@ public class ColumnStatsUpdateTask extends Task<ColumnStatsUpdateWork> { .getLogger(ColumnStatsUpdateTask.class); @Override - public void initialize(HiveConf conf, QueryPlan queryPlan, DriverContext ctx, + public void initialize(QueryState queryState, QueryPlan queryPlan, DriverContext ctx, CompilationOpContext opContext) { - super.initialize(conf, queryPlan, ctx, opContext); + super.initialize(queryState, queryPlan, ctx, opContext); } private ColumnStatistics constructColumnStatsFromInput() http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java index b26f09d..d2c3ca8 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java @@ -91,6 +91,7 @@ import org.apache.hadoop.hive.ql.Context; import org.apache.hadoop.hive.ql.DriverContext; import org.apache.hadoop.hive.ql.ErrorMsg; import org.apache.hadoop.hive.ql.QueryPlan; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.ArchiveUtils.PartSpecInfo; import org.apache.hadoop.hive.ql.exec.tez.TezTask; import org.apache.hadoop.hive.ql.hooks.LineageInfo.DataContainer; @@ -259,9 +260,9 @@ public class DDLTask extends Task<DDLWork> implements Serializable { } @Override - public void initialize(HiveConf conf, QueryPlan queryPlan, DriverContext ctx, + public void initialize(QueryState queryState, QueryPlan queryPlan, DriverContext ctx, CompilationOpContext opContext) { - super.initialize(conf, queryPlan, ctx, opContext); + super.initialize(queryState, queryPlan, ctx, opContext); // Pick the formatter to use to display the results. Either the // normal human readable output or a json object. @@ -663,7 +664,7 @@ public class DDLTask extends Task<DDLWork> implements Serializable { } // initialize the task and execute - task.initialize(db.getConf(), getQueryPlan(), driverCxt, opContext); + task.initialize(queryState, getQueryPlan(), driverCxt, opContext); int ret = task.execute(driverCxt); return ret; } @@ -4160,7 +4161,7 @@ public class DDLTask extends Task<DDLWork> implements Serializable { truncateWork.setMapperCannotSpanPartns(true); DriverContext driverCxt = new DriverContext(); ColumnTruncateTask taskExec = new ColumnTruncateTask(); - taskExec.initialize(db.getConf(), null, driverCxt, null); + taskExec.initialize(queryState, null, driverCxt, null); taskExec.setWork(truncateWork); taskExec.setQueryPlan(this.getQueryPlan()); return taskExec.execute(driverCxt); http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java index 4ce0864..403d57c 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainTask.java @@ -312,7 +312,7 @@ public class ExplainTask extends Task<ExplainWork> implements Serializable { throws Exception { BaseSemanticAnalyzer analyzer = work.getAnalyzer(); - HiveOperation operation = SessionState.get().getHiveOperation(); + HiveOperation operation = queryState.getHiveOperation(); JSONObject object = new JSONObject(new LinkedHashMap<>()); Object jsonInput = toJson("INPUTS", toString(analyzer.getInputs()), out, work); @@ -349,7 +349,7 @@ public class ExplainTask extends Task<ExplainWork> implements Serializable { SessionState.get().setActiveAuthorizer(authorizer); try { - Driver.doAuthorization(analyzer, ""); + Driver.doAuthorization(queryState.getHiveOperation(), analyzer, ""); } finally { SessionState.get().setActiveAuthorizer(delegate); } http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java index b96ea04..ec9e98e 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java @@ -29,6 +29,7 @@ import org.apache.hadoop.hive.ql.CommandNeedRetryException; import org.apache.hadoop.hive.ql.CompilationOpContext; import org.apache.hadoop.hive.ql.DriverContext; import org.apache.hadoop.hive.ql.QueryPlan; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.mr.ExecMapper; import org.apache.hadoop.hive.ql.io.AcidUtils; import org.apache.hadoop.hive.ql.io.HiveInputFormat; @@ -59,9 +60,9 @@ public class FetchTask extends Task<FetchWork> implements Serializable { } @Override - public void initialize(HiveConf conf, QueryPlan queryPlan, DriverContext ctx, + public void initialize(QueryState queryState, QueryPlan queryPlan, DriverContext ctx, CompilationOpContext opContext) { - super.initialize(conf, queryPlan, ctx, opContext); + super.initialize(queryState, queryPlan, ctx, opContext); work.initializeForFetch(opContext); try { http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionTask.java index 1b971fc..42cdc84 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionTask.java @@ -25,6 +25,7 @@ import java.util.List; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.hadoop.fs.FileSystem; @@ -37,6 +38,7 @@ import org.apache.hadoop.hive.ql.exec.FunctionInfo.FunctionResource; import org.apache.hadoop.hive.ql.CompilationOpContext; import org.apache.hadoop.hive.ql.DriverContext; import org.apache.hadoop.hive.ql.QueryPlan; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.metadata.Hive; import org.apache.hadoop.hive.ql.metadata.HiveException; import org.apache.hadoop.hive.ql.plan.CreateFunctionDesc; @@ -62,9 +64,9 @@ public class FunctionTask extends Task<FunctionWork> { } @Override - public void initialize(HiveConf conf, QueryPlan queryPlan, DriverContext ctx, + public void initialize(QueryState queryState, QueryPlan queryPlan, DriverContext ctx, CompilationOpContext opContext) { - super.initialize(conf, queryPlan, ctx, opContext); + super.initialize(queryState, queryPlan, ctx, opContext); } @Override http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsNoJobTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsNoJobTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsNoJobTask.java index 3199ee1..d5ae019 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsNoJobTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsNoJobTask.java @@ -41,6 +41,7 @@ import org.apache.hadoop.hive.metastore.api.InvalidOperationException; import org.apache.hadoop.hive.ql.CompilationOpContext; import org.apache.hadoop.hive.ql.DriverContext; import org.apache.hadoop.hive.ql.QueryPlan; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.io.StatsProvidingRecordReader; import org.apache.hadoop.hive.ql.metadata.Hive; import org.apache.hadoop.hive.ql.metadata.HiveException; @@ -84,9 +85,9 @@ public class StatsNoJobTask extends Task<StatsNoJobWork> implements Serializable } @Override - public void initialize(HiveConf conf, QueryPlan queryPlan, DriverContext driverContext, + public void initialize(QueryState queryState, QueryPlan queryPlan, DriverContext driverContext, CompilationOpContext opContext) { - super.initialize(conf, queryPlan, driverContext, opContext); + super.initialize(queryState, queryPlan, driverContext, opContext); jc = new JobConf(conf); } http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java index 6c677f5..897af5e 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java @@ -51,6 +51,7 @@ public abstract class Task<T extends Serializable> implements Serializable, Node public transient HashMap<String, Long> taskCounters; public transient TaskHandle taskHandle; protected transient HiveConf conf; + protected transient QueryState queryState; protected transient LogHelper console; protected transient QueryPlan queryPlan; protected transient DriverContext driverContext; @@ -124,11 +125,12 @@ public abstract class Task<T extends Serializable> implements Serializable, Node return taskHandle; } - public void initialize(HiveConf conf, QueryPlan queryPlan, DriverContext driverContext, + public void initialize(QueryState queryState, QueryPlan queryPlan, DriverContext driverContext, CompilationOpContext opContext) { this.queryPlan = queryPlan; setInitialized(); - this.conf = conf; + this.queryState = queryState; + this.conf = queryState.getConf(); this.driverContext = driverContext; console = new LogHelper(LOG); } http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/ExecDriver.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/ExecDriver.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/ExecDriver.java index d164859..639b0da 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/ExecDriver.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/ExecDriver.java @@ -51,6 +51,7 @@ import org.apache.hadoop.hive.ql.Context; import org.apache.hadoop.hive.ql.DriverContext; import org.apache.hadoop.hive.ql.ErrorMsg; import org.apache.hadoop.hive.ql.QueryPlan; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.FetchOperator; import org.apache.hadoop.hive.ql.exec.HiveTotalOrderPartitioner; import org.apache.hadoop.hive.ql.exec.Operator; @@ -124,7 +125,7 @@ public class ExecDriver extends Task<MapredWork> implements Serializable, Hadoop public ExecDriver() { super(); console = new LogHelper(LOG); - this.jobExecHelper = new HadoopJobExecHelper(job, console, this, this); + this.jobExecHelper = new HadoopJobExecHelper(queryState, job, console, this, this); } @Override @@ -142,9 +143,9 @@ public class ExecDriver extends Task<MapredWork> implements Serializable, Hadoop * Initialization when invoked from QL. */ @Override - public void initialize(HiveConf conf, QueryPlan queryPlan, DriverContext driverContext, + public void initialize(QueryState queryState, QueryPlan queryPlan, DriverContext driverContext, CompilationOpContext opContext) { - super.initialize(conf, queryPlan, driverContext, opContext); + super.initialize(queryState, queryPlan, driverContext, opContext); job = new JobConf(conf, ExecDriver.class); @@ -168,7 +169,7 @@ public class ExecDriver extends Task<MapredWork> implements Serializable, Hadoop HiveConf.setVar(job, ConfVars.HIVEADDEDARCHIVES, addedArchives); } conf.stripHiddenConfigurations(job); - this.jobExecHelper = new HadoopJobExecHelper(job, console, this, this); + this.jobExecHelper = new HadoopJobExecHelper(queryState, job, console, this, this); } /** @@ -178,7 +179,7 @@ public class ExecDriver extends Task<MapredWork> implements Serializable, Hadoop setWork(plan); this.job = job; console = new LogHelper(LOG, isSilent); - this.jobExecHelper = new HadoopJobExecHelper(job, console, this, this); + this.jobExecHelper = new HadoopJobExecHelper(queryState, job, console, this, this); } /** http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/HadoopJobExecHelper.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/HadoopJobExecHelper.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/HadoopJobExecHelper.java index 1b296b9..760ba6c 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/HadoopJobExecHelper.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/HadoopJobExecHelper.java @@ -33,6 +33,7 @@ import java.util.concurrent.TimeUnit; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.conf.HiveConf.ConfVars; import org.apache.hadoop.hive.ql.MapRedStats; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.Operator; import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hadoop.hive.ql.exec.TaskHandle; @@ -75,6 +76,7 @@ public class HadoopJobExecHelper { public transient JobID jobId; private final LogHelper console; private final HadoopJobExecHook callBackObj; + private final QueryState queryState; /** * Update counters relevant to this task. @@ -135,8 +137,9 @@ public class HadoopJobExecHelper { this.jobId = jobId; } - public HadoopJobExecHelper(JobConf job, LogHelper console, + public HadoopJobExecHelper(QueryState queryState, JobConf job, LogHelper console, Task<? extends Serializable> task, HadoopJobExecHook hookCallBack) { + this.queryState = queryState; this.job = job; this.console = console; this.task = task; @@ -250,14 +253,14 @@ public class HadoopJobExecHelper { String logMapper; String logReducer; - + String queryId = queryState.getQueryId(); TaskReport[] mappers = jc.getMapTaskReports(rj.getID()); if (mappers == null) { logMapper = "no information for number of mappers; "; } else { numMap = mappers.length; if (ss != null) { - ss.getHiveHistory().setTaskProperty(SessionState.get().getQueryId(), getId(), + ss.getHiveHistory().setTaskProperty(queryId, getId(), Keys.TASK_NUM_MAPPERS, Integer.toString(numMap)); } logMapper = "number of mappers: " + numMap + "; "; @@ -269,7 +272,7 @@ public class HadoopJobExecHelper { } else { numReduce = reducers.length; if (ss != null) { - ss.getHiveHistory().setTaskProperty(SessionState.get().getQueryId(), getId(), + ss.getHiveHistory().setTaskProperty(queryId, getId(), Keys.TASK_NUM_REDUCERS, Integer.toString(numReduce)); } logReducer = "number of reducers: " + numReduce; @@ -355,11 +358,11 @@ public class HadoopJobExecHelper { String output = report.toString(); SessionState ss = SessionState.get(); if (ss != null) { - ss.getHiveHistory().setTaskCounters(SessionState.get().getQueryId(), getId(), ctrs); - ss.getHiveHistory().setTaskProperty(SessionState.get().getQueryId(), getId(), + ss.getHiveHistory().setTaskCounters(queryState.getQueryId(), getId(), ctrs); + ss.getHiveHistory().setTaskProperty(queryState.getQueryId(), getId(), Keys.TASK_HADOOP_PROGRESS, output); if (ss.getConf().getBoolVar(HiveConf.ConfVars.HIVE_LOG_INCREMENTAL_PLAN_PROGRESS)) { - ss.getHiveHistory().progressTask(SessionState.get().getQueryId(), this.task); + ss.getHiveHistory().progressTask(queryState.getQueryId(), this.task); this.callBackObj.logPlanProgress(ss); } } @@ -386,7 +389,7 @@ public class HadoopJobExecHelper { } else { SessionState ss = SessionState.get(); if (ss != null) { - ss.getHiveHistory().setTaskCounters(SessionState.get().getQueryId(), getId(), ctrs); + ss.getHiveHistory().setTaskCounters(queryState.getQueryId(), getId(), ctrs); } success = rj.isSuccessful(); } @@ -430,7 +433,7 @@ public class HadoopJobExecHelper { console.printInfo("Job running in-process (local Hadoop)"); } else { if (SessionState.get() != null) { - SessionState.get().getHiveHistory().setTaskProperty(SessionState.get().getQueryId(), + SessionState.get().getHiveHistory().setTaskProperty(queryState.getQueryId(), getId(), Keys.TASK_HADOOP_ID, rj.getID().toString()); } console.printInfo(getJobStartMsg(rj.getID()) + ", Tracking URL = " http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapredLocalTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapredLocalTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapredLocalTask.java index c81b14c..3c1f0de 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapredLocalTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapredLocalTask.java @@ -48,6 +48,7 @@ import org.apache.hadoop.hive.ql.CompilationOpContext; import org.apache.hadoop.hive.ql.Context; import org.apache.hadoop.hive.ql.DriverContext; import org.apache.hadoop.hive.ql.QueryPlan; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.BucketMatcher; import org.apache.hadoop.hive.ql.exec.FetchOperator; import org.apache.hadoop.hive.ql.exec.Operator; @@ -121,13 +122,13 @@ public class MapredLocalTask extends Task<MapredLocalWork> implements Serializab } @Override - public void initialize(HiveConf conf, QueryPlan queryPlan, DriverContext driverContext, + public void initialize(QueryState queryState, QueryPlan queryPlan, DriverContext driverContext, CompilationOpContext opContext) { - super.initialize(conf, queryPlan, driverContext, opContext); + super.initialize(queryState, queryPlan, driverContext, opContext); job = new JobConf(conf, ExecDriver.class); execContext = new ExecMapperContext(job); //we don't use the HadoopJobExecHooks for local tasks - this.jobExecHelper = new HadoopJobExecHelper(job, console, this, null); + this.jobExecHelper = new HadoopJobExecHelper(queryState, job, console, this, null); } public static String now() { http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/exec/spark/SparkTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/spark/SparkTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/spark/SparkTask.java index 7f87adf..0b494aa 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/spark/SparkTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/spark/SparkTask.java @@ -32,6 +32,7 @@ import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.CompilationOpContext; import org.apache.hadoop.hive.ql.DriverContext; import org.apache.hadoop.hive.ql.QueryPlan; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.FileSinkOperator; import org.apache.hadoop.hive.ql.exec.JoinOperator; import org.apache.hadoop.hive.ql.exec.MapOperator; @@ -71,9 +72,9 @@ public class SparkTask extends Task<SparkWork> { private static final long serialVersionUID = 1L; @Override - public void initialize(HiveConf conf, QueryPlan queryPlan, DriverContext driverContext, + public void initialize(QueryState queryState, QueryPlan queryPlan, DriverContext driverContext, CompilationOpContext opContext) { - super.initialize(conf, queryPlan, driverContext, opContext); + super.initialize(queryState, queryPlan, driverContext, opContext); } @Override @@ -137,7 +138,7 @@ public class SparkTask extends Task<SparkWork> { console.printInfo("Starting Spark Job = " + jobRef.getJobId()); if (SessionState.get() != null) { SessionState.get().getHiveHistory() - .setQueryProperty(SessionState.get().getQueryId(), Keys.SPARK_JOB_ID, jobRef.getJobId()); + .setQueryProperty(queryState.getQueryId(), Keys.SPARK_JOB_ID, jobRef.getJobId()); } } http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/history/HiveHistoryImpl.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/history/HiveHistoryImpl.java b/ql/src/java/org/apache/hadoop/hive/ql/history/HiveHistoryImpl.java index a1e35cb..0234fd9 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/history/HiveHistoryImpl.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/history/HiveHistoryImpl.java @@ -266,13 +266,9 @@ public class HiveHistoryImpl implements HiveHistory{ @Override public void startTask(String queryId, Task<? extends Serializable> task, String taskName) { - SessionState ss = SessionState.get(); - if (ss == null) { - return; - } TaskInfo ti = new TaskInfo(); - ti.hm.put(Keys.QUERY_ID.name(), ss.getQueryId()); + ti.hm.put(Keys.QUERY_ID.name(), queryId); ti.hm.put(Keys.TASK_ID.name(), task.getId()); ti.hm.put(Keys.TASK_NAME.name(), taskName); http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/hooks/ATSHook.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/hooks/ATSHook.java b/ql/src/java/org/apache/hadoop/hive/ql/hooks/ATSHook.java index b7e70be..742edc8 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/hooks/ATSHook.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/hooks/ATSHook.java @@ -25,6 +25,7 @@ import java.util.concurrent.TimeUnit; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.QueryPlan; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.ExplainTask; import org.apache.hadoop.hive.ql.exec.TaskFactory; import org.apache.hadoop.hive.ql.exec.Utilities; @@ -94,6 +95,7 @@ public class ATSHook implements ExecuteWithHookContext { public void run(final HookContext hookContext) throws Exception { final long currentTime = System.currentTimeMillis(); final HiveConf conf = new HiveConf(hookContext.getConf()); + final QueryState queryState = hookContext.getQueryState(); executor.submit(new Runnable() { @Override @@ -134,7 +136,7 @@ public class ATSHook implements ExecuteWithHookContext { ); @SuppressWarnings("unchecked") ExplainTask explain = (ExplainTask) TaskFactory.get(work, conf); - explain.initialize(conf, plan, null, null); + explain.initialize(queryState, plan, null, null); String query = plan.getQueryStr(); JSONObject explainPlan = explain.getJSONPlan(null, work); String logID = conf.getLogIdVar(SessionState.get().getSessionId()); http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/hooks/HookContext.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/hooks/HookContext.java b/ql/src/java/org/apache/hadoop/hive/ql/hooks/HookContext.java index 8e1672f..8db0124 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/hooks/HookContext.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/hooks/HookContext.java @@ -27,6 +27,7 @@ import java.util.Set; import org.apache.hadoop.fs.ContentSummary; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.QueryPlan; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.TaskRunner; import org.apache.hadoop.hive.ql.optimizer.lineage.LineageCtx.Index; import org.apache.hadoop.hive.ql.session.SessionState; @@ -43,6 +44,7 @@ public class HookContext { } private QueryPlan queryPlan; + private final QueryState queryState; private HiveConf conf; private List<TaskRunner> completeTaskList; private Set<ReadEntity> inputs; @@ -60,11 +62,12 @@ public class HookContext { // TExecuteStatementResp.TOperationHandle.THandleIdentifier.guid private final String operationId; - public HookContext(QueryPlan queryPlan, HiveConf conf, + public HookContext(QueryPlan queryPlan, QueryState queryState, Map<String, ContentSummary> inputPathToContentSummary, String userName, String ipAddress, String operationId) throws Exception { this.queryPlan = queryPlan; - this.conf = conf; + this.queryState = queryState; + this.conf = queryState.getConf(); this.inputPathToContentSummary = inputPathToContentSummary; completeTaskList = new ArrayList<TaskRunner>(); inputs = queryPlan.getInputs(); @@ -192,4 +195,8 @@ public class HookContext { public String getOperationId() { return operationId; } + + public QueryState getQueryState() { + return queryState; + } } http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/hooks/PostExecutePrinter.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/hooks/PostExecutePrinter.java b/ql/src/java/org/apache/hadoop/hive/ql/hooks/PostExecutePrinter.java index 4518315..b4fc125 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/hooks/PostExecutePrinter.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/hooks/PostExecutePrinter.java @@ -27,6 +27,7 @@ import java.util.Set; import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hadoop.hive.metastore.api.Partition; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.hooks.HookContext.HookType; import org.apache.hadoop.hive.ql.hooks.LineageInfo.BaseColumnInfo; import org.apache.hadoop.hive.ql.hooks.LineageInfo.Dependency; @@ -97,15 +98,14 @@ public class PostExecutePrinter implements ExecuteWithHookContext { @Override public void run(HookContext hookContext) throws Exception { assert(hookContext.getHookType() == HookType.POST_EXEC_HOOK); - SessionState ss = SessionState.get(); Set<ReadEntity> inputs = hookContext.getInputs(); Set<WriteEntity> outputs = hookContext.getOutputs(); LineageInfo linfo = hookContext.getLinfo(); UserGroupInformation ugi = hookContext.getUgi(); - this.run(ss,inputs,outputs,linfo,ugi); + this.run(hookContext.getQueryState(),inputs,outputs,linfo,ugi); } - public void run(SessionState sess, Set<ReadEntity> inputs, + public void run(QueryState queryState, Set<ReadEntity> inputs, Set<WriteEntity> outputs, LineageInfo linfo, UserGroupInformation ugi) throws Exception { @@ -115,9 +115,9 @@ public class PostExecutePrinter implements ExecuteWithHookContext { return; } - if (sess != null) { - console.printError("POSTHOOK: query: " + sess.getCmd().trim()); - console.printError("POSTHOOK: type: " + sess.getCommandType()); + if (queryState != null) { + console.printError("POSTHOOK: query: " + queryState.getQueryString().trim()); + console.printError("POSTHOOK: type: " + queryState.getCommandType()); } PreExecutePrinter.printEntities(console, inputs, "POSTHOOK: Input: "); http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/hooks/PreExecutePrinter.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/hooks/PreExecutePrinter.java b/ql/src/java/org/apache/hadoop/hive/ql/hooks/PreExecutePrinter.java index b5a26d8..232c62d 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/hooks/PreExecutePrinter.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/hooks/PreExecutePrinter.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Set; import org.apache.hadoop.hive.common.io.FetchConverter; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.hooks.HookContext.HookType; import org.apache.hadoop.hive.ql.plan.HiveOperation; import org.apache.hadoop.hive.ql.session.SessionState; @@ -40,8 +41,9 @@ public class PreExecutePrinter implements ExecuteWithHookContext { public void run(HookContext hookContext) throws Exception { assert(hookContext.getHookType() == HookType.PRE_EXEC_HOOK); SessionState ss = SessionState.get(); + QueryState queryState = hookContext.getQueryState(); if (ss != null && ss.out instanceof FetchConverter) { - boolean foundQuery = ss.getHiveOperation() == HiveOperation.QUERY && + boolean foundQuery = queryState.getHiveOperation() == HiveOperation.QUERY && !hookContext.getQueryPlan().isForExplain(); ((FetchConverter)ss.out).foundQuery(foundQuery); } @@ -49,10 +51,10 @@ public class PreExecutePrinter implements ExecuteWithHookContext { Set<ReadEntity> inputs = hookContext.getInputs(); Set<WriteEntity> outputs = hookContext.getOutputs(); UserGroupInformation ugi = hookContext.getUgi(); - this.run(ss,inputs,outputs,ugi); + this.run(queryState,inputs,outputs,ugi); } - public void run(SessionState sess, Set<ReadEntity> inputs, + public void run(QueryState queryState, Set<ReadEntity> inputs, Set<WriteEntity> outputs, UserGroupInformation ugi) throws Exception { @@ -62,9 +64,9 @@ public class PreExecutePrinter implements ExecuteWithHookContext { return; } - if (sess != null) { - console.printError("PREHOOK: query: " + sess.getCmd().trim()); - console.printError("PREHOOK: type: " + sess.getCommandType()); + if (queryState != null) { + console.printError("PREHOOK: query: " + queryState.getQueryString().trim()); + console.printError("PREHOOK: type: " + queryState.getCommandType()); } printEntities(console, inputs, "PREHOOK: Input: "); http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/index/TableBasedIndexHandler.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/index/TableBasedIndexHandler.java b/ql/src/java/org/apache/hadoop/hive/ql/index/TableBasedIndexHandler.java index 807959e..29886ae 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/index/TableBasedIndexHandler.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/index/TableBasedIndexHandler.java @@ -26,8 +26,6 @@ import java.util.Set; import java.util.Map.Entry; import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.hive.common.StatsSetupConst; -import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hadoop.hive.metastore.api.Index; import org.apache.hadoop.hive.ql.exec.Task; http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/io/merge/MergeFileTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/merge/MergeFileTask.java b/ql/src/java/org/apache/hadoop/hive/ql/io/merge/MergeFileTask.java index 82629c1..6b0343b 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/merge/MergeFileTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/merge/MergeFileTask.java @@ -26,6 +26,7 @@ import org.apache.hadoop.hive.ql.CompilationOpContext; import org.apache.hadoop.hive.ql.Context; import org.apache.hadoop.hive.ql.DriverContext; import org.apache.hadoop.hive.ql.QueryPlan; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.Operator; import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hadoop.hive.ql.exec.Utilities; @@ -60,11 +61,11 @@ public class MergeFileTask extends Task<MergeFileWork> implements Serializable, private boolean success = true; @Override - public void initialize(HiveConf conf, QueryPlan queryPlan, + public void initialize(QueryState queryState, QueryPlan queryPlan, DriverContext driverContext, CompilationOpContext opContext) { - super.initialize(conf, queryPlan, driverContext, opContext); + super.initialize(queryState, queryPlan, driverContext, opContext); job = new JobConf(conf, MergeFileTask.class); - jobExecHelper = new HadoopJobExecHelper(job, this.console, this, this); + jobExecHelper = new HadoopJobExecHelper(queryState, job, this.console, this, this); } @Override http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/io/rcfile/stats/PartialScanTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/rcfile/stats/PartialScanTask.java b/ql/src/java/org/apache/hadoop/hive/ql/io/rcfile/stats/PartialScanTask.java index 71371a3..d31510d 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/rcfile/stats/PartialScanTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/rcfile/stats/PartialScanTask.java @@ -38,6 +38,7 @@ import org.apache.hadoop.hive.ql.Context; import org.apache.hadoop.hive.ql.DriverContext; import org.apache.hadoop.hive.ql.ErrorMsg; import org.apache.hadoop.hive.ql.QueryPlan; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hadoop.hive.ql.exec.Utilities; import org.apache.hadoop.hive.ql.exec.mr.HadoopJobExecHelper; @@ -84,11 +85,11 @@ public class PartialScanTask extends Task<PartialScanWork> implements protected HadoopJobExecHelper jobExecHelper; @Override - public void initialize(HiveConf conf, QueryPlan queryPlan, + public void initialize(QueryState queryState, QueryPlan queryPlan, DriverContext driverContext, CompilationOpContext opContext) { - super.initialize(conf, queryPlan, driverContext, opContext); + super.initialize(queryState, queryPlan, driverContext, opContext); job = new JobConf(conf, PartialScanTask.class); - jobExecHelper = new HadoopJobExecHelper(job, this.console, this, this); + jobExecHelper = new HadoopJobExecHelper(queryState, job, this.console, this, this); } @Override @@ -331,7 +332,6 @@ public class PartialScanTask extends Task<PartialScanWork> implements if (jobConfFileName != null) { conf.addResource(new Path(jobConfFileName)); } - HiveConf hiveConf = new HiveConf(conf, PartialScanTask.class); org.slf4j.Logger LOG = LoggerFactory.getLogger(PartialScanTask.class.getName()); boolean isSilent = HiveConf.getBoolVar(conf, @@ -348,11 +348,11 @@ public class PartialScanTask extends Task<PartialScanWork> implements } } - + QueryState queryState = new QueryState(new HiveConf(conf, PartialScanTask.class)); PartialScanWork mergeWork = new PartialScanWork(inputPaths); DriverContext driverCxt = new DriverContext(); PartialScanTask taskExec = new PartialScanTask(); - taskExec.initialize(hiveConf, null, driverCxt, new CompilationOpContext()); + taskExec.initialize(queryState, null, driverCxt, new CompilationOpContext()); taskExec.setWork(mergeWork); int ret = taskExec.execute(driverCxt); http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/io/rcfile/truncate/ColumnTruncateTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/rcfile/truncate/ColumnTruncateTask.java b/ql/src/java/org/apache/hadoop/hive/ql/io/rcfile/truncate/ColumnTruncateTask.java index bc21da0..8acd6e0 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/rcfile/truncate/ColumnTruncateTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/rcfile/truncate/ColumnTruncateTask.java @@ -30,6 +30,7 @@ import org.apache.hadoop.hive.ql.CompilationOpContext; import org.apache.hadoop.hive.ql.Context; import org.apache.hadoop.hive.ql.DriverContext; import org.apache.hadoop.hive.ql.QueryPlan; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hadoop.hive.ql.exec.Utilities; import org.apache.hadoop.hive.ql.exec.mr.HadoopJobExecHelper; @@ -59,11 +60,11 @@ public class ColumnTruncateTask extends Task<ColumnTruncateWork> implements Seri protected HadoopJobExecHelper jobExecHelper; @Override - public void initialize(HiveConf conf, QueryPlan queryPlan, + public void initialize(QueryState queryState, QueryPlan queryPlan, DriverContext driverContext, CompilationOpContext opContext) { - super.initialize(conf, queryPlan, driverContext, opContext); + super.initialize(queryState, queryPlan, driverContext, opContext); job = new JobConf(conf, ColumnTruncateTask.class); - jobExecHelper = new HadoopJobExecHelper(job, this.console, this, this); + jobExecHelper = new HadoopJobExecHelper(queryState, job, this.console, this, this); } @Override http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRTableScan1.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRTableScan1.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRTableScan1.java index 9c979be..669d56f 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRTableScan1.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRTableScan1.java @@ -204,7 +204,7 @@ public class GenMRTableScan1 implements NodeProcessor { // partial scan task DriverContext driverCxt = new DriverContext(); Task<PartialScanWork> psTask = TaskFactory.get(scanWork, parseCtx.getConf()); - psTask.initialize(parseCtx.getConf(), null, driverCxt, op.getCompilationOpContext()); + psTask.initialize(parseCtx.getQueryState(), null, driverCxt, op.getCompilationOpContext()); psTask.setWork(scanWork); // task dependency http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteParseContextGenerator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteParseContextGenerator.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteParseContextGenerator.java index 64f9734..340d29a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteParseContextGenerator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteParseContextGenerator.java @@ -24,6 +24,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.Context; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.Operator; import org.apache.hadoop.hive.ql.parse.ASTNode; import org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer; @@ -56,16 +57,16 @@ public final class RewriteParseContextGenerator { * @param command * @throws SemanticException */ - public static Operator<? extends OperatorDesc> generateOperatorTree(HiveConf conf, + public static Operator<? extends OperatorDesc> generateOperatorTree(QueryState queryState, String command) throws SemanticException { Operator<? extends OperatorDesc> operatorTree; try { - Context ctx = new Context(conf); + Context ctx = new Context(queryState.getConf()); ParseDriver pd = new ParseDriver(); ASTNode tree = pd.parse(command, ctx); tree = ParseUtils.findRootNonNullToken(tree); - BaseSemanticAnalyzer sem = SemanticAnalyzerFactory.get(conf, tree); + BaseSemanticAnalyzer sem = SemanticAnalyzerFactory.get(queryState, tree); assert(sem instanceof SemanticAnalyzer); operatorTree = doSemanticAnalysis((SemanticAnalyzer) sem, tree, ctx); LOG.info("Sub-query Semantic Analysis Completed"); http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteQueryUsingAggregateIndexCtx.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteQueryUsingAggregateIndexCtx.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteQueryUsingAggregateIndexCtx.java index 74bedcb..3d11907 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteQueryUsingAggregateIndexCtx.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteQueryUsingAggregateIndexCtx.java @@ -268,7 +268,7 @@ public final class RewriteQueryUsingAggregateIndexCtx implements NodeProcessorC + rewriteQueryCtx.getIndexKey() + " "; // retrieve the operator tree for the query, and the required GroupByOperator from it Operator<?> newOperatorTree = RewriteParseContextGenerator.generateOperatorTree( - rewriteQueryCtx.getParseContext().getConf(), + rewriteQueryCtx.getParseContext().getQueryState(), selReplacementCommand); // we get our new GroupByOperator here http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java index 19342a8..cbb1b0a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java @@ -48,6 +48,7 @@ import org.apache.hadoop.hive.ql.CompilationOpContext; import org.apache.hadoop.hive.ql.Context; import org.apache.hadoop.hive.ql.ErrorMsg; import org.apache.hadoop.hive.ql.QueryProperties; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.FetchTask; import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hadoop.hive.ql.exec.Utilities; @@ -87,6 +88,7 @@ public abstract class BaseSemanticAnalyzer { // Assumes one instance of this + single-threaded compilation for each query. protected final Hive db; protected final HiveConf conf; + protected final QueryState queryState; protected List<Task<? extends Serializable>> rootTasks; protected FetchTask fetchTask; protected final Logger LOG; @@ -199,13 +201,14 @@ public abstract class BaseSemanticAnalyzer { } } - public BaseSemanticAnalyzer(HiveConf conf) throws SemanticException { - this(conf, createHiveDB(conf)); + public BaseSemanticAnalyzer(QueryState queryState) throws SemanticException { + this(queryState, createHiveDB(queryState.getConf())); } - public BaseSemanticAnalyzer(HiveConf conf, Hive db) throws SemanticException { + public BaseSemanticAnalyzer(QueryState queryState, Hive db) throws SemanticException { try { - this.conf = conf; + this.queryState = queryState; + this.conf = queryState.getConf(); this.db = db; rootTasks = new ArrayList<Task<? extends Serializable>>(); LOG = LoggerFactory.getLogger(this.getClass().getName()); @@ -1502,4 +1505,7 @@ public abstract class BaseSemanticAnalyzer { public HashSet<WriteEntity> getAllOutputs() { return outputs; } + public QueryState getQueryState() { + return queryState; + } } http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java index c069dc4..8e00e0b 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java @@ -104,6 +104,7 @@ import org.apache.hadoop.hive.conf.HiveConf.StrictChecks; import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hadoop.hive.ql.ErrorMsg; import org.apache.hadoop.hive.ql.QueryProperties; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.ColumnInfo; import org.apache.hadoop.hive.ql.exec.FunctionInfo; import org.apache.hadoop.hive.ql.exec.FunctionRegistry; @@ -217,8 +218,8 @@ public class CalcitePlanner extends SemanticAnalyzer { private boolean disableSemJoinReordering = true; private EnumSet<ExtendedCBOProfile> profilesCBO; - public CalcitePlanner(HiveConf conf) throws SemanticException { - super(conf); + public CalcitePlanner(QueryState queryState) throws SemanticException { + super(queryState); if (!HiveConf.getBoolVar(conf, HiveConf.ConfVars.HIVE_CBO_ENABLED)) { runCBO = false; disableSemJoinReordering = false; @@ -514,18 +515,18 @@ public class CalcitePlanner extends SemanticAnalyzer { createTable.addChild(temporary); createTable.addChild(cte.cteNode); - CalcitePlanner analyzer = new CalcitePlanner(conf); + CalcitePlanner analyzer = new CalcitePlanner(queryState); analyzer.initCtx(ctx); analyzer.init(false); // should share cte contexts analyzer.aliasToCTEs.putAll(aliasToCTEs); - HiveOperation operation = SessionState.get().getHiveOperation(); + HiveOperation operation = queryState.getHiveOperation(); try { analyzer.analyzeInternal(createTable); } finally { - SessionState.get().setCommandType(operation); + queryState.setCommandType(operation); } Table table = analyzer.tableDesc.toTable(conf); http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java index bb1bbad..3b6cbce 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java @@ -25,15 +25,14 @@ import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hive.common.HiveStatsUtils; -import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.conf.HiveConf.ConfVars; import org.apache.hadoop.hive.conf.HiveVariableSource; import org.apache.hadoop.hive.conf.VariableSubstitution; import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hadoop.hive.ql.Context; import org.apache.hadoop.hive.ql.ErrorMsg; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.Utilities; import org.apache.hadoop.hive.ql.metadata.HiveException; import org.apache.hadoop.hive.ql.metadata.Table; @@ -62,8 +61,8 @@ public class ColumnStatsSemanticAnalyzer extends SemanticAnalyzer { private List<String> colType; private Table tbl; - public ColumnStatsSemanticAnalyzer(HiveConf conf) throws SemanticException { - super(conf); + public ColumnStatsSemanticAnalyzer(QueryState queryState) throws SemanticException { + super(queryState); } private boolean shouldRewrite(ASTNode tree) { http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java index 46d2342..04e2a41 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java @@ -44,6 +44,7 @@ import org.apache.hadoop.hive.metastore.api.Order; import org.apache.hadoop.hive.metastore.api.SkewedInfo; import org.apache.hadoop.hive.ql.Driver; import org.apache.hadoop.hive.ql.ErrorMsg; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.ArchiveUtils; import org.apache.hadoop.hive.ql.exec.ColumnStatsUpdateTask; import org.apache.hadoop.hive.ql.exec.FetchTask; @@ -229,12 +230,12 @@ public class DDLSemanticAnalyzer extends BaseSemanticAnalyzer { return typeName; } - public DDLSemanticAnalyzer(HiveConf conf) throws SemanticException { - this(conf, createHiveDB(conf)); + public DDLSemanticAnalyzer(QueryState queryState) throws SemanticException { + this(queryState, createHiveDB(queryState.getConf())); } - public DDLSemanticAnalyzer(HiveConf conf, Hive db) throws SemanticException { - super(conf, db); + public DDLSemanticAnalyzer(QueryState queryState, Hive db) throws SemanticException { + super(queryState, db); reservedPartitionValues = new HashSet<String>(); // Partition can't have this name reservedPartitionValues.add(HiveConf.getVar(conf, ConfVars.DEFAULTPARTITIONNAME)); @@ -1350,9 +1351,9 @@ public class DDLSemanticAnalyzer extends BaseSemanticAnalyzer { HashMap<String, String> mapProp = getProps((ASTNode) (ast.getChild(0)) .getChild(0)); EnvironmentContext environmentContext = null; - if (SessionState.get().getCommandType() + if (queryState.getCommandType() .equals(HiveOperation.ALTERTABLE_UPDATETABLESTATS.getOperationName()) - || SessionState.get().getCommandType() + || queryState.getCommandType() .equals(HiveOperation.ALTERTABLE_UPDATEPARTSTATS.getOperationName())) { // we need to check if the properties are valid, especially for stats. boolean changeStatsSucceeded = false; http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSQRewriteSemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSQRewriteSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSQRewriteSemanticAnalyzer.java index 6f0f3a6..8d7fd92 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSQRewriteSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSQRewriteSemanticAnalyzer.java @@ -19,8 +19,8 @@ import java.util.List; -import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.metastore.api.FieldSchema; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.ExplainSQRewriteTask; import org.apache.hadoop.hive.ql.exec.TaskFactory; import org.apache.hadoop.hive.ql.plan.ExplainSQRewriteWork; @@ -28,8 +28,8 @@ import org.apache.hadoop.hive.ql.plan.ExplainSQRewriteWork; public class ExplainSQRewriteSemanticAnalyzer extends BaseSemanticAnalyzer { List<FieldSchema> fieldList; - public ExplainSQRewriteSemanticAnalyzer(HiveConf conf) throws SemanticException { - super(conf); + public ExplainSQRewriteSemanticAnalyzer(QueryState queryState) throws SemanticException { + super(queryState); } @SuppressWarnings("unchecked") @@ -42,7 +42,7 @@ public class ExplainSQRewriteSemanticAnalyzer extends BaseSemanticAnalyzer { // Create a semantic analyzer for the query ASTNode input = (ASTNode) ast.getChild(0); SemanticAnalyzer sem = (SemanticAnalyzer) - SemanticAnalyzerFactory.get(conf, input); + SemanticAnalyzerFactory.get(queryState, input); sem.analyze(input, ctx); sem.validate(); http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java index eefc145..75753b0 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java @@ -24,6 +24,7 @@ import java.util.List; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.metastore.api.FieldSchema; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.ExplainTask; import org.apache.hadoop.hive.ql.exec.FetchTask; import org.apache.hadoop.hive.ql.exec.Task; @@ -37,8 +38,8 @@ import org.apache.hadoop.hive.ql.plan.ExplainWork; public class ExplainSemanticAnalyzer extends BaseSemanticAnalyzer { List<FieldSchema> fieldList; - public ExplainSemanticAnalyzer(HiveConf conf) throws SemanticException { - super(conf); + public ExplainSemanticAnalyzer(QueryState queryState) throws SemanticException { + super(queryState); } @SuppressWarnings("unchecked") @@ -70,7 +71,7 @@ public class ExplainSemanticAnalyzer extends BaseSemanticAnalyzer { // Create a semantic analyzer for the query ASTNode input = (ASTNode) ast.getChild(0); - BaseSemanticAnalyzer sem = SemanticAnalyzerFactory.get(conf, input); + BaseSemanticAnalyzer sem = SemanticAnalyzerFactory.get(queryState, input); sem.analyze(input, ctx); sem.validate(); http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/parse/ExportSemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/ExportSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/ExportSemanticAnalyzer.java index fe8147a..475f2c9 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ExportSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ExportSemanticAnalyzer.java @@ -30,6 +30,7 @@ import org.apache.hadoop.fs.Path; import org.apache.hadoop.hive.common.FileUtils; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.ErrorMsg; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hadoop.hive.ql.exec.TaskFactory; import org.apache.hadoop.hive.ql.hooks.ReadEntity; @@ -47,8 +48,8 @@ public class ExportSemanticAnalyzer extends BaseSemanticAnalyzer { private ReplicationSpec replicationSpec; - public ExportSemanticAnalyzer(HiveConf conf) throws SemanticException { - super(conf); + public ExportSemanticAnalyzer(QueryState queryState) throws SemanticException { + super(queryState); } @Override http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/parse/FunctionSemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/FunctionSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/FunctionSemanticAnalyzer.java index be908d3..1ec45ee 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/FunctionSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/FunctionSemanticAnalyzer.java @@ -28,6 +28,7 @@ import org.apache.hadoop.hive.metastore.api.Database; import org.apache.hadoop.hive.metastore.api.ResourceType; import org.apache.hadoop.hive.metastore.api.ResourceUri; import org.apache.hadoop.hive.ql.ErrorMsg; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.FunctionInfo; import org.apache.hadoop.hive.ql.exec.FunctionRegistry; import org.apache.hadoop.hive.ql.exec.FunctionUtils; @@ -49,8 +50,8 @@ public class FunctionSemanticAnalyzer extends BaseSemanticAnalyzer { private static final Logger LOG = LoggerFactory .getLogger(FunctionSemanticAnalyzer.class); - public FunctionSemanticAnalyzer(HiveConf conf) throws SemanticException { - super(conf); + public FunctionSemanticAnalyzer(QueryState queryState) throws SemanticException { + super(queryState); } @Override http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java index 549d24f..a9bc271 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java @@ -47,6 +47,7 @@ import org.apache.hadoop.hive.metastore.api.MetaException; import org.apache.hadoop.hive.metastore.api.Order; import org.apache.hadoop.hive.metastore.api.Partition; import org.apache.hadoop.hive.ql.ErrorMsg; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hadoop.hive.ql.exec.TaskFactory; import org.apache.hadoop.hive.ql.exec.Utilities; @@ -74,8 +75,8 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer { public static final String METADATA_NAME="_metadata"; - public ImportSemanticAnalyzer(HiveConf conf) throws SemanticException { - super(conf); + public ImportSemanticAnalyzer(QueryState queryState) throws SemanticException { + super(queryState); } private boolean tableExists = false; http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java index b90616f..a49b813 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java @@ -37,6 +37,7 @@ import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.metastore.TableType; import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hadoop.hive.ql.ErrorMsg; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hadoop.hive.ql.exec.TaskFactory; import org.apache.hadoop.hive.ql.exec.Utilities; @@ -58,8 +59,8 @@ import com.google.common.collect.Lists; */ public class LoadSemanticAnalyzer extends BaseSemanticAnalyzer { - public LoadSemanticAnalyzer(HiveConf conf) throws SemanticException { - super(conf); + public LoadSemanticAnalyzer(QueryState queryState) throws SemanticException { + super(queryState); } public static FileStatus[] matchFilesOrDir(FileSystem fs, Path path) http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/parse/MacroSemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/MacroSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/MacroSemanticAnalyzer.java index e394914..fe065f8 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/MacroSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/MacroSemanticAnalyzer.java @@ -36,6 +36,7 @@ import org.apache.hadoop.hive.metastore.MetaStoreUtils; import org.apache.hadoop.hive.metastore.api.Database; import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hadoop.hive.ql.ErrorMsg; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.ColumnInfo; import org.apache.hadoop.hive.ql.exec.FunctionRegistry; import org.apache.hadoop.hive.ql.exec.FunctionUtils; @@ -44,13 +45,10 @@ import org.apache.hadoop.hive.ql.hooks.WriteEntity; import org.apache.hadoop.hive.ql.lib.Dispatcher; import org.apache.hadoop.hive.ql.lib.Node; import org.apache.hadoop.hive.ql.lib.PreOrderWalker; -import org.apache.hadoop.hive.ql.metadata.Hive; -import org.apache.hadoop.hive.ql.metadata.HiveException; import org.apache.hadoop.hive.ql.plan.CreateMacroDesc; import org.apache.hadoop.hive.ql.plan.DropMacroDesc; import org.apache.hadoop.hive.ql.plan.ExprNodeDesc; import org.apache.hadoop.hive.ql.plan.FunctionWork; -import org.apache.hadoop.hive.ql.session.SessionState; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils; @@ -62,8 +60,8 @@ public class MacroSemanticAnalyzer extends BaseSemanticAnalyzer { private static final Logger LOG = LoggerFactory .getLogger(MacroSemanticAnalyzer.class); - public MacroSemanticAnalyzer(HiveConf conf) throws SemanticException { - super(conf); + public MacroSemanticAnalyzer(QueryState queryState) throws SemanticException { + super(queryState); } @Override @@ -132,8 +130,8 @@ public class MacroSemanticAnalyzer extends BaseSemanticAnalyzer { throw new SemanticException("At least one parameter name was used more than once " + macroColNames); } - SemanticAnalyzer sa = HiveConf.getBoolVar(conf, HiveConf.ConfVars.HIVE_CBO_ENABLED) ? new CalcitePlanner( - conf) : new SemanticAnalyzer(conf); + SemanticAnalyzer sa = HiveConf.getBoolVar(conf, HiveConf.ConfVars.HIVE_CBO_ENABLED) ? + new CalcitePlanner(queryState) : new SemanticAnalyzer(queryState); ; ExprNodeDesc body; if(isNoArgumentMacro) { http://git-wip-us.apache.org/repos/asf/hive/blob/caa3ec76/ql/src/java/org/apache/hadoop/hive/ql/parse/ParseContext.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/ParseContext.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/ParseContext.java index 1bccf20..5d0f905 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ParseContext.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ParseContext.java @@ -28,6 +28,7 @@ import java.util.Set; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.Context; import org.apache.hadoop.hive.ql.QueryProperties; +import org.apache.hadoop.hive.ql.QueryState; import org.apache.hadoop.hive.ql.exec.AbstractMapJoinOperator; import org.apache.hadoop.hive.ql.exec.FetchTask; import org.apache.hadoop.hive.ql.exec.JoinOperator; @@ -78,6 +79,7 @@ public class ParseContext { private List<LoadTableDesc> loadTableWork; private List<LoadFileDesc> loadFileWork; private Context ctx; + private QueryState queryState; private HiveConf conf; private HashMap<String, String> idToTableNameMap; private int destTableId; @@ -153,7 +155,7 @@ public class ParseContext { * @param rootTasks */ public ParseContext( - HiveConf conf, + QueryState queryState, HashMap<TableScanOperator, ExprNodeDesc> opToPartPruner, HashMap<TableScanOperator, PrunedPartitionList> opToPartList, HashMap<String, TableScanOperator> topOps, @@ -173,7 +175,8 @@ public class ParseContext { List<ReduceSinkOperator> reduceSinkOperatorsAddedByEnforceBucketingSorting, AnalyzeRewriteContext analyzeRewrite, CreateTableDesc createTableDesc, QueryProperties queryProperties, Map<SelectOperator, Table> viewProjectToTableSchema) { - this.conf = conf; + this.queryState = queryState; + this.conf = queryState.getConf(); this.opToPartPruner = opToPartPruner; this.opToPartList = opToPartList; this.joinOps = joinOps; @@ -241,6 +244,13 @@ public class ParseContext { } /** + * @return the hive conf + */ + public QueryState getQueryState() { + return queryState; + } + + /** * @return the opToPartPruner */ public HashMap<TableScanOperator, ExprNodeDesc> getOpToPartPruner() {