Index: common/src/java/org/apache/hadoop/hive/conf/HiveConf.java =================================================================== --- common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (revision 1478219) +++ common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (working copy) @@ -378,6 +378,8 @@ HIVESESSIONID("hive.session.id", ""), // whether session is running in silent mode or not HIVESESSIONSILENT("hive.session.silent", false), + // Whether to enable history for this session + HIVE_SESSION_HISTORY_ENABLED("hive.session.history.enabled", true), // query being executed (multiple per session) HIVEQUERYSTRING("hive.query.string", ""), Index: service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java =================================================================== --- service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java (revision 1478219) +++ service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java (working copy) @@ -28,6 +28,7 @@ import org.apache.hadoop.hive.metastore.HiveMetaStoreClient; import org.apache.hadoop.hive.metastore.IMetaStoreClient; import org.apache.hadoop.hive.metastore.api.MetaException; +import org.apache.hadoop.hive.ql.history.HiveHistory; import org.apache.hadoop.hive.ql.session.SessionState; import org.apache.hive.common.util.HiveVersionInfo; import org.apache.hive.service.cli.FetchOrientation; @@ -295,6 +296,10 @@ operationManager.closeOperation(opHandle); } opHandleSet.clear(); + HiveHistory hiveHist = sessionState.getHiveHistory(); + if (null != hiveHist) { + hiveHist.closeStream(); + } } finally { release(); } @@ -367,4 +372,4 @@ protected HiveSession getSession() { return this; } -} \ No newline at end of file +} Index: service/src/java/org/apache/hive/service/cli/operation/Operation.java =================================================================== --- service/src/java/org/apache/hive/service/cli/operation/Operation.java (revision 1478219) +++ service/src/java/org/apache/hive/service/cli/operation/Operation.java (working copy) @@ -32,7 +32,7 @@ public abstract class Operation { - private final HiveSession parentSession; + protected final HiveSession parentSession; private OperationState state = OperationState.INITIALIZED; private final OperationHandle opHandle; private HiveConf configuration; Index: service/src/java/org/apache/hive/service/cli/operation/HiveCommandOperation.java =================================================================== --- service/src/java/org/apache/hive/service/cli/operation/HiveCommandOperation.java (revision 1478219) +++ service/src/java/org/apache/hive/service/cli/operation/HiveCommandOperation.java (working copy) @@ -34,6 +34,7 @@ import org.apache.hadoop.hive.ql.processors.CommandProcessor; import org.apache.hadoop.hive.ql.processors.CommandProcessorResponse; import org.apache.hadoop.hive.ql.session.SessionState; +import org.apache.hadoop.io.IOUtils; import org.apache.hive.service.cli.FetchOrientation; import org.apache.hive.service.cli.HiveSQLException; import org.apache.hive.service.cli.OperationState; @@ -85,6 +86,12 @@ } } + + private void tearDownSessionIO() { + IOUtils.cleanup(LOG, parentSession.getSessionState().out); + IOUtils.cleanup(LOG, parentSession.getSessionState().err); + } + /* (non-Javadoc) * @see org.apache.hive.service.cli.operation.Operation#run() */ @@ -121,6 +128,7 @@ @Override public void close() throws HiveSQLException { setState(OperationState.CLOSED); + tearDownSessionIO(); cleanTmpFile(); } @@ -187,6 +195,7 @@ if (resultReader != null) { SessionState sessionState = getParentSession().getSessionState(); File tmp = sessionState.getTmpOutputFile(); + IOUtils.cleanup(LOG, resultReader); tmp.delete(); resultReader = null; } Index: ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java (revision 1478219) +++ ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java (working copy) @@ -250,7 +250,8 @@ .setVar(HiveConf.ConfVars.HIVESESSIONID, makeSessionId()); } - if (startSs.hiveHist == null) { + if (startSs.getConf().getBoolVar(HiveConf.ConfVars.HIVE_SESSION_HISTORY_ENABLED) + && startSs.hiveHist == null) { startSs.hiveHist = new HiveHistory(startSs); } Index: ql/src/java/org/apache/hadoop/hive/ql/history/HiveHistory.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/history/HiveHistory.java (revision 1478219) +++ ql/src/java/org/apache/hadoop/hive/ql/history/HiveHistory.java (working copy) @@ -39,6 +39,7 @@ import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hadoop.hive.ql.session.SessionState; import org.apache.hadoop.hive.ql.session.SessionState.LogHelper; +import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.mapred.Counters; import org.apache.hadoop.mapred.Counters.Counter; import org.apache.hadoop.mapred.Counters.Group; @@ -532,11 +533,14 @@ return null; } + + public void closeStream() { + IOUtils.cleanup(LOG, histStream); + } + @Override public void finalize() throws Throwable { - if (histStream !=null){ - histStream.close(); - } + closeStream(); super.finalize(); } }