Search in sources :

Example 1 with ErrorAndSolution

use of org.apache.hadoop.hive.ql.exec.errors.ErrorAndSolution in project hive by apache.

the class JobDebugger method showJobFailDebugInfo.

private String showJobFailDebugInfo() throws IOException {
    console.printError("Error during job, obtaining debugging information...");
    if (!conf.get("mapred.job.tracker", "local").equals("local")) {
        // Show Tracking URL for remotely running jobs.
        console.printError("Job Tracking URL: " + rj.getTrackingURL());
    }
    // Loop to get all task completion events because getTaskCompletionEvents
    // only returns a subset per call
    TaskInfoGrabber tlg = new TaskInfoGrabber();
    Thread t = new Thread(tlg);
    try {
        t.start();
        t.join(HiveConf.getIntVar(conf, HiveConf.ConfVars.TASKLOG_DEBUG_TIMEOUT));
    } catch (InterruptedException e) {
        console.printError("Timed out trying to finish grabbing task log URLs, " + "some task info may be missing");
    }
    // Remove failures for tasks that succeeded
    for (String task : successes) {
        failures.remove(task);
    }
    if (failures.keySet().size() == 0) {
        return null;
    }
    // Find the highest failure count
    computeMaxFailures();
    // Display Error Message for tasks with the highest failure count
    String jtUrl = null;
    try {
        jtUrl = JobTrackerURLResolver.getURL(conf);
    } catch (Exception e) {
        console.printError("Unable to retrieve URL for Hadoop Task logs. " + e.getMessage());
    }
    String msg = null;
    for (String task : failures.keySet()) {
        if (failures.get(task).intValue() == maxFailures) {
            TaskInfo ti = taskIdToInfo.get(task);
            String jobId = ti.getJobId();
            String taskUrl = (jtUrl == null) ? null : jtUrl + "/taskdetails.jsp?jobid=" + jobId + "&tipid=" + task.toString();
            TaskLogProcessor tlp = new TaskLogProcessor(conf);
            for (String logUrl : ti.getLogUrls()) {
                tlp.addTaskAttemptLogUrl(logUrl);
            }
            if (HiveConf.getBoolVar(conf, HiveConf.ConfVars.JOB_DEBUG_CAPTURE_STACKTRACES) && stackTraces != null) {
                if (!stackTraces.containsKey(jobId)) {
                    stackTraces.put(jobId, new ArrayList<List<String>>());
                }
                stackTraces.get(jobId).addAll(tlp.getStackTraces());
            }
            if (HiveConf.getBoolVar(conf, HiveConf.ConfVars.SHOW_JOB_FAIL_DEBUG_INFO)) {
                List<ErrorAndSolution> errors = tlp.getErrors();
                StringBuilder sb = new StringBuilder();
                // We use a StringBuilder and then call printError only once as
                // printError will write to both stderr and the error log file. In
                // situations where both the stderr and the log file output is
                // simultaneously output to a single stream, this will look cleaner.
                sb.append("\n");
                sb.append("Task with the most failures(" + maxFailures + "): \n");
                sb.append("-----\n");
                sb.append("Task ID:\n  " + task + "\n\n");
                if (taskUrl != null) {
                    sb.append("URL:\n  " + taskUrl + "\n");
                }
                for (ErrorAndSolution e : errors) {
                    sb.append("\n");
                    sb.append("Possible error:\n  " + e.getError() + "\n\n");
                    sb.append("Solution:\n  " + e.getSolution() + "\n");
                }
                sb.append("-----\n");
                sb.append("Diagnostic Messages for this Task:\n");
                String[] diagMesgs = ti.getDiagnosticMesgs();
                for (String mesg : diagMesgs) {
                    sb.append(mesg + "\n");
                }
                msg = sb.toString();
                console.printError(msg);
            }
            // Only print out one task because that's good enough for debugging.
            break;
        }
    }
    return msg;
}
Also used : MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) Exception(java.lang.Exception) ErrorAndSolution(org.apache.hadoop.hive.ql.exec.errors.ErrorAndSolution) TaskLogProcessor(org.apache.hadoop.hive.ql.exec.errors.TaskLogProcessor) ArrayList(java.util.ArrayList) List(java.util.List)

Aggregations

IOException (java.io.IOException)1 Exception (java.lang.Exception)1 MalformedURLException (java.net.MalformedURLException)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 ErrorAndSolution (org.apache.hadoop.hive.ql.exec.errors.ErrorAndSolution)1 TaskLogProcessor (org.apache.hadoop.hive.ql.exec.errors.TaskLogProcessor)1