HIVE-19204: Detailed errors from some tasks are not displayed to the client because the tasks don't set exception when they fail (Aihua Xu, reviewed by Sahil Takiar)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/11b0d857 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/11b0d857 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/11b0d857 Branch: refs/heads/storage-branch-2.6 Commit: 11b0d85786cd58469d5662c3027e9389cff07710 Parents: f94ae7f Author: Aihua Xu <[email protected]> Authored: Mon Apr 16 10:36:02 2018 -0700 Committer: Aihua Xu <[email protected]> Committed: Wed Apr 25 16:09:42 2018 -0700 ---------------------------------------------------------------------- .../java/org/apache/hadoop/hive/ql/Driver.java | 6 ++++- .../hive/ql/exec/ColumnStatsUpdateTask.java | 1 + .../hive/ql/exec/ExplainSQRewriteTask.java | 8 +++--- .../apache/hadoop/hive/ql/exec/ExplainTask.java | 5 ++-- .../hive/ql/exec/MaterializedViewTask.java | 1 + .../hadoop/hive/ql/exec/ReplCopyTask.java | 4 +-- .../apache/hadoop/hive/ql/exec/StatsTask.java | 1 + .../hadoop/hive/ql/exec/mr/ExecDriver.java | 4 +-- .../io/rcfile/truncate/ColumnTruncateTask.java | 26 +++++++------------- .../ql/reexec/ReExecutionOverlayPlugin.java | 2 +- 10 files changed, 29 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/11b0d857/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 4e8dbe2..f83bdaf 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java @@ -2389,7 +2389,11 @@ public class Driver implements IDriver { if(downstreamError != null) { //here we assume that upstream code may have parametrized the msg from ErrorMsg //so we want to keep it - errorMessage += ". " + downstreamError.getMessage(); + if (downstreamError.getMessage() != null) { + errorMessage += ". " + downstreamError.getMessage(); + } else { + errorMessage += ". " + org.apache.hadoop.util.StringUtils.stringifyException(downstreamError); + } } else { ErrorMsg em = ErrorMsg.getErrorMsg(exitVal); http://git-wip-us.apache.org/repos/asf/hive/blob/11b0d857/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 207b66f..a53ff5a 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 @@ -300,6 +300,7 @@ public class ColumnStatsUpdateTask extends Task<ColumnStatsUpdateWork> { Hive db = getHive(); return persistColumnStats(db); } catch (Exception e) { + setException(e); LOG.info("Failed to persist stats in metastore", e); } return 1; http://git-wip-us.apache.org/repos/asf/hive/blob/11b0d857/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainSQRewriteTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainSQRewriteTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainSQRewriteTask.java index 80d54bf..1f9e9aa 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainSQRewriteTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/ExplainSQRewriteTask.java @@ -38,11 +38,13 @@ import org.apache.hadoop.hive.ql.parse.SubQueryDiagnostic; import org.apache.hadoop.hive.ql.plan.ExplainSQRewriteWork; import org.apache.hadoop.hive.ql.plan.api.StageType; import org.apache.hadoop.io.IOUtils; -import org.apache.hadoop.util.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ExplainSQRewriteTask extends Task<ExplainSQRewriteWork> implements Serializable { private static final long serialVersionUID = 1L; + private final Logger LOG = LoggerFactory.getLogger(this.getClass().getName()); @Override public StageType getType() { @@ -76,8 +78,8 @@ public class ExplainSQRewriteTask extends Task<ExplainSQRewriteWork> implements return (0); } catch (Exception e) { - console.printError("Failed with exception " + e.getMessage(), - "\n" + StringUtils.stringifyException(e)); + setException(e); + LOG.error(org.apache.hadoop.util.StringUtils.stringifyException(e)); return (1); } finally { http://git-wip-us.apache.org/repos/asf/hive/blob/11b0d857/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 0b30721..34da025 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 @@ -65,7 +65,6 @@ import org.apache.hadoop.hive.ql.plan.api.StageType; import org.apache.hadoop.hive.ql.security.authorization.AuthorizationFactory; import org.apache.hadoop.hive.ql.session.SessionState; import org.apache.hadoop.io.IOUtils; -import org.apache.hadoop.util.StringUtils; import org.apache.hive.common.util.AnnotationUtils; import org.json.JSONArray; import org.json.JSONException; @@ -383,8 +382,8 @@ public class ExplainTask extends Task<ExplainWork> implements Serializable { return (0); } catch (Exception e) { - console.printError("Failed with exception " + e.getMessage(), - "\n" + StringUtils.stringifyException(e)); + LOG.error(org.apache.hadoop.util.StringUtils.stringifyException(e)); + setException(e); return (1); } finally { http://git-wip-us.apache.org/repos/asf/hive/blob/11b0d857/ql/src/java/org/apache/hadoop/hive/ql/exec/MaterializedViewTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/MaterializedViewTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/MaterializedViewTask.java index 834df84..19aef6c 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/MaterializedViewTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/MaterializedViewTask.java @@ -76,6 +76,7 @@ public class MaterializedViewTask extends Task<MaterializedViewDesc> implements } } catch (HiveException e) { LOG.debug("Exception during materialized view cache update", e); + setException(e); } return 0; } http://git-wip-us.apache.org/repos/asf/hive/blob/11b0d857/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java index 1cad579..de270cf 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/ReplCopyTask.java @@ -163,8 +163,8 @@ public class ReplCopyTask extends Task<ReplCopyWork> implements Serializable { } return 0; } catch (Exception e) { - console.printError("Failed with exception " + e.getMessage(), "\n" - + StringUtils.stringifyException(e)); + LOG.error(StringUtils.stringifyException(e)); + setException(e); return (1); } } http://git-wip-us.apache.org/repos/asf/hive/blob/11b0d857/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java index 00eb7de..7a4242a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java @@ -112,6 +112,7 @@ public class StatsTask extends Task<StatsWork> implements Serializable { } } catch (Exception e) { LOG.error("Failed to run stats task", e); + setException(e); return 1; } return 0; http://git-wip-us.apache.org/repos/asf/hive/blob/11b0d857/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 7ff8ddc..1de782a 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 @@ -465,9 +465,9 @@ public class ExecDriver extends Task<MapredWork> implements Serializable, Hadoop jc.close(); } } catch (Exception e) { - LOG.warn("Failed while cleaning up ", e); + LOG.warn("Failed while cleaning up ", e); } finally { - HadoopJobExecHelper.runningJobs.remove(rj); + HadoopJobExecHelper.runningJobs.remove(rj); } } http://git-wip-us.apache.org/repos/asf/hive/blob/11b0d857/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 434c3a8..8f21f7c 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 @@ -94,9 +94,8 @@ public class ColumnTruncateTask extends Task<ColumnTruncateWork> implements Seri ctxCreated = true; } }catch (IOException e) { - e.printStackTrace(); - console.printError("Error launching map-reduce job", "\n" - + org.apache.hadoop.util.StringUtils.stringifyException(e)); + LOG.error(org.apache.hadoop.util.StringUtils.stringifyException(e)); + setException(e); return 5; } @@ -136,7 +135,8 @@ public class ColumnTruncateTask extends Task<ColumnTruncateWork> implements Seri fs.mkdirs(tempOutPath); } } catch (IOException e) { - console.printError("Can't make path " + outputPath + " : " + e.getMessage()); + setException(e); + LOG.error("Can't make path " + outputPath, e); return 6; } @@ -191,19 +191,11 @@ public class ColumnTruncateTask extends Task<ColumnTruncateWork> implements Seri success = (returnVal == 0); } catch (Exception e) { - e.printStackTrace(); - setException(e); - String mesg = " with exception '" + Utilities.getNameMessage(e) + "'"; - if (rj != null) { - mesg = "Ended Job = " + rj.getJobID() + mesg; - } else { - mesg = "Job Submission failed" + mesg; - } - + String mesg = rj != null ? ("Ended Job = " + rj.getJobID()) : "Job Submission failed"; // Has to use full name to make sure it does not conflict with // org.apache.commons.lang.StringUtils - console.printError(mesg, "\n" - + org.apache.hadoop.util.StringUtils.stringifyException(e)); + LOG.error(mesg, org.apache.hadoop.util.StringUtils.stringifyException(e)); + setException(e); success = false; returnVal = 1; @@ -220,9 +212,9 @@ public class ColumnTruncateTask extends Task<ColumnTruncateWork> implements Seri ColumnTruncateMapper.jobClose(outputPath, success, job, console, work.getDynPartCtx(), null); } catch (Exception e) { - LOG.warn("Failed while cleaning up ", e); + LOG.warn("Failed while cleaning up ", e); } finally { - HadoopJobExecHelper.runningJobs.remove(rj); + HadoopJobExecHelper.runningJobs.remove(rj); } } http://git-wip-us.apache.org/repos/asf/hive/blob/11b0d857/ql/src/java/org/apache/hadoop/hive/ql/reexec/ReExecutionOverlayPlugin.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/reexec/ReExecutionOverlayPlugin.java b/ql/src/java/org/apache/hadoop/hive/ql/reexec/ReExecutionOverlayPlugin.java index 950903c..50803cc 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/reexec/ReExecutionOverlayPlugin.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/reexec/ReExecutionOverlayPlugin.java @@ -42,7 +42,7 @@ public class ReExecutionOverlayPlugin implements IReExecutionPlugin { if (hookContext.getHookType() == HookType.ON_FAILURE_HOOK) { Throwable exception = hookContext.getException(); if (exception != null) { - if (exception.getMessage().contains("Vertex failed,")) { + if (exception.getMessage() != null && exception.getMessage().contains("Vertex failed,")) { retryPossible = true; } }
