diff --git a/ql/src/java/org/apache/hadoop/hive/ql/hooks/ATSHook.java b/ql/src/java/org/apache/hadoop/hive/ql/hooks/ATSHook.java index 55b922b..72a1acc 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/hooks/ATSHook.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/hooks/ATSHook.java @@ -143,6 +143,11 @@ public void run(final HookContext hookContext) throws Exception { final QueryState queryState = hookContext.getQueryState(); final String queryId = queryState.getQueryId(); + final Map durations = new HashMap(); + for (String key : hookContext.getPerfLogger().getEndTimes().keySet()) { + durations.put(key, hookContext.getPerfLogger().getDuration(key)); + } + try { setupAtsExecutor(conf); @@ -203,10 +208,10 @@ public void run() { tablesRead, tablesWritten, conf, llapId)); break; case POST_EXEC_HOOK: - fireAndForget(createPostHookEvent(queryId, currentTime, user, requestuser, true, opId, hookContext.getPerfLogger())); + fireAndForget(createPostHookEvent(queryId, currentTime, user, requestuser, true, opId, durations)); break; case ON_FAILURE_HOOK: - fireAndForget(createPostHookEvent(queryId, currentTime, user, requestuser , false, opId, hookContext.getPerfLogger())); + fireAndForget(createPostHookEvent(queryId, currentTime, user, requestuser , false, opId, durations)); break; default: //ignore @@ -325,7 +330,7 @@ TimelineEntity createPreHookEvent(String queryId, String query, JSONObject expla } TimelineEntity createPostHookEvent(String queryId, long stopTime, String user, String requestuser, boolean success, - String opId, PerfLogger perfLogger) throws Exception { + String opId, Map durations) throws Exception { LOG.info("Received post-hook notification for :" + queryId); TimelineEntity atsEntity = new TimelineEntity(); @@ -346,8 +351,8 @@ TimelineEntity createPostHookEvent(String queryId, long stopTime, String user, S // Perf times JSONObject perfObj = new JSONObject(new LinkedHashMap<>()); - for (String key : perfLogger.getEndTimes().keySet()) { - perfObj.put(key, perfLogger.getDuration(key)); + for (Map.Entry entry : durations.entrySet()) { + perfObj.put(entry.getKey(), entry.getValue()); } atsEntity.addOtherInfo(OtherInfoTypes.PERF.name(), perfObj.toString());