diff --git a/ql/src/java/org/apache/hadoop/hive/ql/hooks/HiveProtoLoggingHook.java b/ql/src/java/org/apache/hadoop/hive/ql/hooks/HiveProtoLoggingHook.java index eef6ac9462..bddca1acf8 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/hooks/HiveProtoLoggingHook.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/hooks/HiveProtoLoggingHook.java @@ -366,6 +366,7 @@ private HiveHookEventProto getPreHookEvent(HookContext hookContext) { ApplicationId llapId = determineLlapId(conf, executionMode); if (llapId != null) { addMapEntry(builder, OtherInfoType.LLAP_APP_ID, llapId.toString()); + builder.setQueue(conf.get(HiveConf.ConfVars.LLAP_DAEMON_QUEUE_NAME.varname)); } conf.stripHiddenConfigurations(conf); @@ -391,7 +392,10 @@ private HiveHookEventProto getPostHookEvent(HookContext hookContext, boolean suc builder.setOperationId(hookContext.getOperationId()); } addMapEntry(builder, OtherInfoType.STATUS, Boolean.toString(success)); - JSONObject perfObj = new JSONObject(hookContext.getPerfLogger().getEndTimes()); + JSONObject perfObj = new JSONObject(); + for (String key : hookContext.getPerfLogger().getEndTimes().keySet()) { + perfObj.put(key, hookContext.getPerfLogger().getDuration(key)); + } addMapEntry(builder, OtherInfoType.PERF, perfObj.toString()); return builder.build(); diff --git a/ql/src/test/org/apache/hadoop/hive/ql/hooks/TestHiveProtoLoggingHook.java b/ql/src/test/org/apache/hadoop/hive/ql/hooks/TestHiveProtoLoggingHook.java index 98b73e8108..96fb73c5f7 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/hooks/TestHiveProtoLoggingHook.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/hooks/TestHiveProtoLoggingHook.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; +import java.util.Map; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; @@ -46,6 +47,9 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + public class TestHiveProtoLoggingHook { @@ -106,6 +110,8 @@ public void testPreEventLog() throws Exception { @Test public void testPostEventLog() throws Exception { context.setHookType(HookType.POST_EXEC_HOOK); + context.getPerfLogger().PerfLogBegin("test", "LogTest"); + context.getPerfLogger().PerfLogEnd("test", "LogTest"); EventLogger evtLogger = new EventLogger(conf, SystemClock.getInstance()); evtLogger.handle(context); @@ -119,7 +125,11 @@ public void testPostEventLog() throws Exception { Assert.assertEquals("test_op_id", event.getOperationId()); assertOtherInfo(event, OtherInfoType.STATUS, Boolean.TRUE.toString()); - assertOtherInfo(event, OtherInfoType.PERF, null); + String val = findOtherInfo(event, OtherInfoType.PERF); + Map map = new ObjectMapper().readValue(val, + new TypeReference>() {}); + // This should be really close to zero. + Assert.assertTrue("Expected LogTest in PERF", map.get("LogTest") < 100); } @Test @@ -158,15 +168,20 @@ private HiveHookEventProto loadEvent(HiveConf conf, String tmpFolder) return event; } - private void assertOtherInfo(HiveHookEventProto event, OtherInfoType key, String value) { + private String findOtherInfo(HiveHookEventProto event, OtherInfoType key) { for (MapFieldEntry otherInfo : event.getOtherInfoList()) { if (otherInfo.getKey().equals(key.name())) { - if (value != null) { - Assert.assertEquals(value, otherInfo.getValue()); - } - return; + return otherInfo.getValue(); } } - Assert.fail("Cannot find key: " + key); + Assert.fail("Cannot find key " + key); + return null; + } + + private void assertOtherInfo(HiveHookEventProto event, OtherInfoType key, String value) { + String val = findOtherInfo(event, key); + if (value != null) { + Assert.assertEquals(value, val); + } } }