diff --git a/tez-api/src/main/java/org/apache/tez/dag/api/TezConstants.java b/tez-api/src/main/java/org/apache/tez/dag/api/TezConstants.java index cf5ab11ec7..81733a6f7d 100644 --- a/tez-api/src/main/java/org/apache/tez/dag/api/TezConstants.java +++ b/tez-api/src/main/java/org/apache/tez/dag/api/TezConstants.java @@ -52,6 +52,7 @@ public class TezConstants { public static final String TEZ_PB_BINARY_CONF_NAME = "tez-conf.pb"; public static final String TEZ_PB_PLAN_BINARY_NAME = "tez-dag.pb"; public static final String TEZ_PB_PLAN_TEXT_NAME = "tez-dag.pb.txt"; + public static final String TEZ_PB_PLAN_JSON_NAME = "tez-dag.pb.json"; /* * Logger properties diff --git a/tez-dag/src/main/java/org/apache/tez/dag/app/DAGAppMaster.java b/tez-dag/src/main/java/org/apache/tez/dag/app/DAGAppMaster.java index abc10bd86c..b0623d6664 100644 --- a/tez-dag/src/main/java/org/apache/tez/dag/app/DAGAppMaster.java +++ b/tez-dag/src/main/java/org/apache/tez/dag/app/DAGAppMaster.java @@ -1038,6 +1038,7 @@ private void writeDebugArtifacts(DAGPlan dagPB, DAGImpl newDag) { if (debugArtifacts) { Utils.generateDAGVizFile(newDag, dagPB, logDirs, newDag.getDAGScheduler()); writePBTextFile(newDag); + writePBJsonFile(dagPB, newDag); } } @@ -1056,6 +1057,21 @@ private void writePBTextFile(DAG dag) { } } + private void writePBJsonFile(DAGPlan dagPB, DAGImpl newDag) { + String logFile = logDirs[new Random().nextInt(logDirs.length)] + File.separatorChar + newDag.getID() + "-" + + TezConstants.TEZ_PB_PLAN_JSON_NAME; + + LOG.info("Writing DAG JSON plan to: " + logFile); + File outFile = new File(logFile); + try { + PrintWriter printWriter = new PrintWriter(outFile, "UTF-8"); + printWriter.println(DAGUtils.generateSimpleJSONPlan(dagPB)); + printWriter.close(); + } catch (IOException | JSONException e) { + LOG.warn("Failed to write TEZ_PLAN JSON to " + outFile, e); + } + } + protected void addIfService(Object object, boolean addDispatcher) { if (object instanceof Service) { Service service = (Service) object;