You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@hive.apache.org by Xiaoyong Zhu <xi...@microsoft.com> on 2015/04/10 10:57:40 UTC
RE: ATS Hook for Hive Query Text
+Hive users in case there are some experts there...
Xiaoyong
From: Joe Zhang (SDE)
Sent: Friday, April 10, 2015 4:57 PM
To: user@tez.apache.org
Cc: Xiaoyong Zhu
Subject: ATS Hook for Hive Query Text
Hi Hive&Tez experts:
I was using ws/v1/timeline/HIVE_QUERY_ID/ AST APIs to get tez query text for each DAG, but I am not sure whether the code has been optimized or it is same with the previous user-submmited hive code?
I has read hive<https://github.com/apache/hive/tree/8c4c158d40b0ac3b17fe1e7f01e3e9d6fb02fe08>/ql<https://github.com/apache/hive/tree/8c4c158d40b0ac3b17fe1e7f01e3e9d6fb02fe08/ql>/src<https://github.com/apache/hive/tree/8c4c158d40b0ac3b17fe1e7f01e3e9d6fb02fe08/ql/src>/java<https://github.com/apache/hive/tree/8c4c158d40b0ac3b17fe1e7f01e3e9d6fb02fe08/ql/src/java>/org<https://github.com/apache/hive/tree/8c4c158d40b0ac3b17fe1e7f01e3e9d6fb02fe08/ql/src/java/org>/apache<https://github.com/apache/hive/tree/8c4c158d40b0ac3b17fe1e7f01e3e9d6fb02fe08/ql/src/java/org/apache>/hadoop<https://github.com/apache/hive/tree/8c4c158d40b0ac3b17fe1e7f01e3e9d6fb02fe08/ql/src/java/org/apache/hadoop>/hive<https://github.com/apache/hive/tree/8c4c158d40b0ac3b17fe1e7f01e3e9d6fb02fe08/ql/src/java/org/apache/hadoop/hive>/ql<https://github.com/apache/hive/tree/8c4c158d40b0ac3b17fe1e7f01e3e9d6fb02fe08/ql/src/java/org/apache/hadoop/hive/ql>/hooks<https://github.com/apache/hive/tree/8c4c158d40b0ac3b17fe1e7f01e3e9d6fb02fe08/ql/src/java/org/apache/hadoop/hive/ql/hooks>/ATSHook.java source code and confuse whether the QueryPlan has been optimized QueryPlan plan = hookContext.getQueryPlan();
@Override
public void run(final HookContext hookContext) throws Exception {
final long currentTime = System.currentTimeMillis();
final HiveConf conf = new HiveConf(hookContext.getConf());
executor.submit(new Runnable() {
@Override
public void run() {
try {
QueryPlan plan = hookContext.getQueryPlan();
if (plan == null) {
return;
}
String queryId = plan.getQueryId();
String opId = hookContext.getOperationId();
long queryStartTime = plan.getQueryStartTime();
String user = hookContext.getUgi().getUserName();
String requestuser = hookContext.getUserName();
if (hookContext.getUserName() == null ){
requestuser = hookContext.getUgi().getUserName() ;
}
int numMrJobs = Utilities.getMRTasks(plan.getRootTasks()).size();
int numTezJobs = Utilities.getTezTasks(plan.getRootTasks()).size();
if (numMrJobs + numTezJobs <= 0) {
return; // ignore client only queries
}
switch(hookContext.getHookType()) {
case PRE_EXEC_HOOK:
ExplainTask explain = new ExplainTask();
explain.initialize(conf, plan, null);
String query = plan.getQueryStr();
List<Task<?>> rootTasks = plan.getRootTasks();
JSONObject explainPlan = explain.getJSONPlan(null, null, rootTasks,
plan.getFetchTask(), true, false, false);
fireAndForget(conf, createPreHookEvent(queryId, query,
explainPlan, queryStartTime, user, requestuser, numMrJobs, numTezJobs, opId));
break;
case POST_EXEC_HOOK:
fireAndForget(conf, createPostHookEvent(queryId, currentTime, user, requestuser, true, opId));
break;
case ON_FAILURE_HOOK:
fireAndForget(conf, createPostHookEvent(queryId, currentTime, user, requestuser , false, opId));
break;
default:
//ignore
break;
}
} catch (Exception e) {
LOG.info("Failed to submit plan to ATS: " + StringUtils.stringifyException(e));
}
}
});
}
Best wishes
Joe zhang