Package com.atlantbh.jmeter.plugins.hadooputilities.jobstatistics

Source Code of com.atlantbh.jmeter.plugins.hadooputilities.jobstatistics.JobLayer

/*!
* AtlantBH Custom Jmeter Components v1.0.0
* http://www.atlantbh.com/jmeter-components/
*
* Copyright 2011, AtlantBH
*
* Licensed under the under the Apache License, Version 2.0.
*/

package com.atlantbh.jmeter.plugins.hadooputilities.jobstatistics;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.mapred.Counters.Group;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.JobID;
import org.apache.hadoop.mapred.RunningJob;
import org.apache.hadoop.mapred.Counters;
import org.apache.hadoop.mapred.Counters.Counter;

/**
* This class exposes functionalities on Job layer. Those functionalities are:
* 1. getJobCountersByJobId
* 2. getJobCountersByJobIdAndGroupName
* 3. getJobStatisticsByJobId
*
* @author Bakir Jusufbegovic / AtlantBH
*/
public class JobLayer {
 
  private static final long serialVersionUID = 1L;

  private String jobId = "";
  private String jobTracker = "";
  private String jobState = "";
  private String groupName = "";
 
  public JobLayer() {};
 
  public String getJobId() {
    return jobId;
  }
 
  public void setJobId(String jobId) {
    this.jobId = jobId;
  }
 
  public String getJobTracker() {
    return jobTracker;
  }
 
  public void setJobTracker(String jobTracker) {
    this.jobTracker = jobTracker;
  }
 
  public String getJobState() {
    return jobState;
  }
 
  public void setJobState(String jobState) {
    this.jobState = jobState;
  }
 
  public String getGroupName() {
    return groupName;
  }
 
  public void setGroupName(String groupName) {
    this.groupName = groupName;
 

  public JobClient prepareJobClient(String jobTracker) throws IOException {
    Configuration conf = new Configuration();
    conf.set("mapred.job.tracker", jobTracker);
   
    JobConf jobConf = new JobConf(conf);
    JobClient client = new JobClient(jobConf);
   
    return client;
  }
 
  public JobID convertToJobId(String jobId) {
    String id = jobId.replace("job_", "");
    return new JobID(id.split("_")[0],Integer.valueOf(id.split("_")[1]));
  }
 
  public String getCountersAsXml(Map<String, String> jobCounters) throws IOException {
   
    StringBuilder stBuilder = new StringBuilder();
    stBuilder.append("<counters>\n");
   
    for (Map.Entry<String,String> entry : jobCounters.entrySet())
    {     
      stBuilder.append(" <counter name=\"" + entry.getKey() + "\" value=\"" + entry.getValue() + "\"/>\n");
    }
   
    stBuilder.append("</counters>\n");       
    return stBuilder.toString();
  }
 
  public Map<String, String> getJobCounters(String jobTracker, String jobId) throws IOException {
    JobClient client = prepareJobClient(jobTracker);
   
    JobID id = this.convertToJobId(jobId);
   
    Map<String, String> counters = new HashMap<String, String>();
   
    RunningJob job = client.getJob(id);
    Counters counter = job.getCounters();
    Iterator<Group> iter = counter.iterator();   
     
    if (!getGroupName().equalsIgnoreCase(""))
    {   
      while (iter.hasNext()) {
      Group group = iter.next();
     
        if (group.getDisplayName().equalsIgnoreCase(getGroupName()))
        {     
          Iterator<Counter> cIter = group.iterator();
          while (cIter.hasNext()) {
            Counter c = cIter.next();
            counters.put(c.getDisplayName(), String.valueOf(c.getValue()));
          }
        }
      }
    }
    else
    {
      while (iter.hasNext()) {
        Group group = iter.next();       
        Iterator<Counter> cIter = group.iterator();
          while (cIter.hasNext()) {
            Counter c = cIter.next();
            counters.put(c.getDisplayName(), String.valueOf(c.getValue()));
          }
      }
    }
    return counters;
  }
 
  public Map<String, String> getJobCountersByJobId(String jobTracker, String jobId) throws IOException {
    return getJobCounters(jobTracker, jobId);
  }
 
  public Map<String, String> getJobCountersByJobIdAndGroupName(String jobTracker, String jobId, String groupName) throws IOException {
    setGroupName(groupName);
    return getJobCounters(jobTracker, jobId);
  }
 
  public String getJobStatisticsByJobId(String jobTracker, String jobId) throws IOException {
    StringBuilder jobStatistics = new StringBuilder();
   
    JobClient client = prepareJobClient(jobTracker);   
    JobID id = convertToJobId(jobId);
   
    RunningJob job = client.getJob(id);
   
    double mapProgress = job.mapProgress() * 100;
    double reduceProgress = job.reduceProgress() * 100;
    String mapPercentage = Double.toString(mapProgress) + "%";
    String reducePercentage = Double.toString(reduceProgress) + "%";
   
    jobStatistics.append("<job id='"+ jobId +"'" + " name='"+ job.getJobName() +"'>\n");
    jobStatistics.append(" <mapProgress>"+mapPercentage+"</mapProgress>\n");
    jobStatistics.append(" <reduceProgress>"+reducePercentage+"</reduceProgress>\n");
    jobStatistics.append(" <complete>"+job.isComplete()+"</complete>\n");
    jobStatistics.append(" <successful>"+job.isSuccessful()+"</successful>\n");
    jobStatistics.append(" <url>"+job.getTrackingURL()+"</url>\n");
    jobStatistics.append("</job>");
   
    return jobStatistics.toString();
  }
}
TOP

Related Classes of com.atlantbh.jmeter.plugins.hadooputilities.jobstatistics.JobLayer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.