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 3651c9c..d947f88 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 @@ -17,7 +17,6 @@ */ package org.apache.hadoop.hive.ql.hooks; -import java.io.Serializable; import java.net.InetAddress; import java.util.ArrayList; import java.util.HashMap; @@ -119,6 +118,11 @@ public void run(final HookContext hookContext) throws Exception { final HiveConf conf = new HiveConf(hookContext.getConf()); final QueryState queryState = hookContext.getQueryState(); + final Map durations = new HashMap(); + for (String key : hookContext.getPerfLogger().getEndTimes().keySet()) { + durations.put(key, hookContext.getPerfLogger().getDuration(key)); + } + executor.submit(new Runnable() { @Override public void run() { @@ -175,10 +179,10 @@ public void run() { tablesRead, tablesWritten, conf)); break; case POST_EXEC_HOOK: - fireAndForget(conf, createPostHookEvent(queryId, currentTime, user, requestuser, true, opId, hookContext.getPerfLogger())); + fireAndForget(conf, createPostHookEvent(queryId, currentTime, user, requestuser, true, opId, durations)); break; case ON_FAILURE_HOOK: - fireAndForget(conf, createPostHookEvent(queryId, currentTime, user, requestuser , false, opId, hookContext.getPerfLogger())); + fireAndForget(conf, createPostHookEvent(queryId, currentTime, user, requestuser , false, opId, durations)); break; default: //ignore @@ -290,7 +294,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(); @@ -311,8 +315,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());