diff --git a/common/src/java/org/apache/hive/common/util/StreamPrinter.java b/common/src/java/org/apache/hive/common/util/StreamPrinter.java index 72638fdb966a63c64e44f2d952ecc49b4b0b5121..1517751347490a9e3ed4b11c2981cfed24745102 100644 --- a/common/src/java/org/apache/hive/common/util/StreamPrinter.java +++ b/common/src/java/org/apache/hive/common/util/StreamPrinter.java @@ -33,12 +33,12 @@ public class StreamPrinter extends Thread { InputStream is; String type; - PrintStream os; + PrintStream[] outputStreams; - public StreamPrinter(InputStream is, String type, PrintStream os) { + public StreamPrinter(InputStream is, String type, PrintStream... outputStreams) { this.is = is; this.type = type; - this.os = os; + this.outputStreams = outputStreams; } @Override @@ -50,18 +50,22 @@ public void run() { String line = null; if (type != null) { while ((line = br.readLine()) != null) { - os.println(type + ">" + line); + for (PrintStream os: outputStreams) { + os.println(type + ">" + line); + } } } else { while ((line = br.readLine()) != null) { - os.println(line); + for (PrintStream os: outputStreams) { + os.println(line); + } } } br.close(); - br=null; + br = null; } catch (IOException ioe) { ioe.printStackTrace(); - }finally{ + } finally { IOUtils.closeStream(br); } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskRunner.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskRunner.java index f6fd08104f6d5a8c93bca1f5d77468096e823144..a9ebe05f36cae047d6f60a9a7eb1b48f4762973d 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskRunner.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskRunner.java @@ -104,6 +104,8 @@ public void runSequential() { tsk.setException(t); } t.printStackTrace(); + OperationLog.getCurrentOperationLog().writeOperationLog("Exception in task runner: "); + t.printStackTrace(OperationLog.getCurrentOperationLog().getPrintStream()); } result.setExitVal(exitVal, tsk.getException()); } 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 f5500a4c4ece56fcd756c9c2159169228e542a6e..46d0afc5c67ffac1c21bc09f4c3dfc85e298206a 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 @@ -65,6 +65,7 @@ import org.apache.hadoop.hive.ql.plan.MapredLocalWork; import org.apache.hadoop.hive.ql.plan.OperatorDesc; import org.apache.hadoop.hive.ql.plan.api.StageType; +import org.apache.hadoop.hive.ql.session.OperationLog; import org.apache.hadoop.hive.ql.session.SessionState; import org.apache.hadoop.hive.ql.session.SessionState.LogHelper; import org.apache.hadoop.hive.serde2.ColumnProjectionUtils; @@ -317,8 +318,10 @@ public int executeInChildVM(DriverContext driverContext) { CachingPrintStream errPrintStream = new CachingPrintStream(System.err); - StreamPrinter outPrinter = new StreamPrinter(executor.getInputStream(), null, System.out); - StreamPrinter errPrinter = new StreamPrinter(executor.getErrorStream(), null, errPrintStream); + StreamPrinter outPrinter = new StreamPrinter(executor.getInputStream(), null, System.out, + OperationLog.getCurrentOperationLog().getPrintStream()); + StreamPrinter errPrinter = new StreamPrinter(executor.getErrorStream(), null, errPrintStream, + OperationLog.getCurrentOperationLog().getPrintStream()); outPrinter.start(); errPrinter.start(); diff --git a/ql/src/java/org/apache/hadoop/hive/ql/session/OperationLog.java b/ql/src/java/org/apache/hadoop/hive/ql/session/OperationLog.java index 2ecdde9799683cd104323af170d8905fb3005b9e..ddfa6e03cac13d5de9597e415d388163e41688c2 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/session/OperationLog.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/session/OperationLog.java @@ -39,6 +39,10 @@ private final LogFile logFile; private LoggingLevel opLoggingLevel = LoggingLevel.UNKNOWN; + public PrintStream getPrintStream() { + return logFile.getPrintStream(); + } + public static enum LoggingLevel { NONE, EXECUTION, PERFORMANCE, VERBOSE, UNKNOWN } @@ -221,5 +225,9 @@ private void resetIn() { } return logs; } + + public PrintStream getPrintStream() { + return out; + } } }