{
logger.error(new StringBuilder("taskId :").append(taskId).append("not exist!").toString());
continue;
}
Job job = jobs.get(jobTask.getJobName());
if(job == null) {
logger.error(new StringBuilder("job :").append(jobTask.getJobName()).append("not exist!").toString());
continue;
}
if (statusPool.replace(taskId, JobTaskStatus.DOING, JobTaskStatus.DONE)
|| statusPool.replace(taskId, JobTaskStatus.UNDO, JobTaskStatus.DONE)) {
logger.info("task " + jobTask.getJobName() + " of job " + job.getJobName() + " done");
jobTask.setStatus(JobTaskStatus.DONE);
jobTask.getTailCursor().compareAndSet(true, false);
jobTask.setEndTime(System.currentTimeMillis());
jobTask.setLastMergedEpoch(job.getEpoch().get());
job.getCompletedTaskCount().incrementAndGet();
} else {
if(!this.config.getDispatchMaster()) {
jobTask.setStatus(JobTaskStatus.DONE);
jobTask.getTailCursor().compareAndSet(true, false);
jobTask.setEndTime(System.currentTimeMillis());
jobTask.setLastMergedEpoch(job.getEpoch().get());
statusPool.put(taskId, JobTaskStatus.DONE);
iter.remove();
}
}
//对jobTask的执行结果打点
StringBuilder log = new StringBuilder(ReportUtil.SLAVE_LOG).append(",timeStamp=")
.append(System.currentTimeMillis()).append(",epoch=")
.append(job.getEpoch()).append(",jobName=");
log.append(jobTask.getJobName()).append(",taskId=")
.append(jobTask.getTaskId()).append(",recycleCounter=")
.append(jobTask.getRecycleCounter().get()).append(",slaveIp=")
.append(jobTaskResult.getSlaveIp()).append(",efficiency=")
.append(jobTaskResult.getEfficiency()).append(",");
JobTaskExecuteInfo executeInfo = jobTaskResult.getTaskExecuteInfos().get(jobTask.getTaskId());
if (executeInfo != null) {
log.append("analysisConsume=").append(executeInfo.getAnalysisConsume()).append(",")
.append("jobDataSize=").append(executeInfo.getJobDataSize()).append(",").append("totalLine=")
.append(executeInfo.getTotalLine()).append(",").append("errorLine=")
.append(executeInfo.getErrorLine()).append(",").append("emptyLine=")
.append(executeInfo.getEmptyLine()).append(",fileBegin=").append(executeInfo.getFileBegin())
.append(",fileLength=").append(executeInfo.getFileLength());
if(jobTask.getInput().startsWith("hub:")) {
jobTask.setJobSourceTimeStamp(executeInfo.getTimestamp());
job.updateCursor(jobTask.getUrl(), executeInfo.getFileBegin(), executeInfo.getFileLength(), executeInfo.getTimestamp());
}
}
else
logger.error(new StringBuilder().append("taskId : ").
append(jobTask.getTaskId()).append(" executeInfo is null!").toString());
ReportUtil.clusterLog(log.toString());
//增加一块对于zookeeper的支持
if (StringUtils.isNotEmpty(config.getZkServer()) && zk != null)
{
try
{
ZKUtil.updateOrCreateNode(zk,new StringBuilder()
.append(ZKUtil.getGroupMasterZKPath(config.getGroupId()))
.append("/").append(config.getMasterName())
.append("/runtime/").append(job.getEpoch())
.append("/").append(jobTask.getJobName())
.append("/").append(jobTask.getTaskId()).toString(),log.toString().getBytes("UTF-8"));
}
catch(Exception ex)