Package com.atlantbh.jmeter.plugins.hbasecrud

Source Code of com.atlantbh.jmeter.plugins.hbasecrud.HbaseCrudHelper

/*!
* 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.hbasecrud;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.util.Bytes;

/**
* This class exposes functionalities for hbase record crud operations. Those functionalities are:
* 1. addOrUpdateDataToHBase (by latest timestamp or with filter for excluded column families for timestamp evaluation)
* 2. deleteDataFromHbase (by latest timestamp or with filter for excluded column families for timestamp evaluation)
*
* @author Bakir Jusufbegovic / AtlantBH
*/
public class HbaseCrudHelper {

  private Configuration conf = null;
  private HTable hTable = null;
  private String responseMessage = "";
 
  private ArrayList<String> filterColumnFamilyList = new ArrayList<String>();
  private ArrayList<String> fullColumnNamesList = new ArrayList<String>();
 
  public HbaseCrudHelper() {};
 
  public String getResponseMessage()
  {
    return responseMessage;
  }
 
  public void setResponseMessage(String responseMessage)
  {
    this.responseMessage = responseMessage;
  }
 
  public void setConfiguration(String hbaseZK, String hbaseTable) throws IOException
  {
    conf = HBaseConfiguration.create();
    conf.set("hbase.zookeeper.quorum", hbaseZK);
    hTable = new HTable(conf, hbaseTable);
  }
 
  public void parseColumnFamilies(String columnFamilies)
  {
    String[] strTokens = columnFamilies.split(",");
   
    for (int i = 0; i<strTokens.length; i++) {
      filterColumnFamilyList.add(strTokens[i]);
    }
  }
 
  private void parseFullColumnNamesList(String columnNames)
  {
    String[] strTokens = columnNames.split(",");   
 
    for (int i = 0; i<strTokens.length; i++) {
      fullColumnNamesList.add(strTokens[i]);
    }
  }
 
  private long getMostRecentTimestamp(String rowKey) throws IOException
  {
    long maxTimestamp = Long.MIN_VALUE;
    Get get = new Get(Bytes.toBytes(rowKey));
     
    Result result = hTable.get(get);
   
    if (filterColumnFamilyList.isEmpty()) {
      for (KeyValue kv : result.list()) {
        if (maxTimestamp < kv.getTimestamp()) {
          maxTimestamp = kv.getTimestamp();
        }
      }
    } else {
      for (KeyValue kv : result.list()) {
        byte[] bytes = kv.getFamily();
        String str = new String(bytes);
        if (!filterColumnFamilyList.contains(str)) {
          if (maxTimestamp < kv.getTimestamp()) {
            maxTimestamp = kv.getTimestamp();
          }
        }
      }
    }       
    return maxTimestamp;
  }
 
  public void addOrUpdateDataToHBase(String rowKey, String columnFamilyColumnQualifiers) throws IOException
  {   
    List<Put> puts = new ArrayList<Put>();
    Put put = new Put(Bytes.toBytes(rowKey));
   
    parseFullColumnNamesList(columnFamilyColumnQualifiers);
    long timestamp;
    String response = "";
   
    timestamp = this.getMostRecentTimestamp(rowKey);
     
    String[] columnFamilyColumnValueToken = null;
    String[] columnValueToken = null;
   
    try {
      for (int i=0; i<fullColumnNamesList.size(); i++) {
        columnFamilyColumnValueToken = fullColumnNamesList.get(i).split(":");
        columnValueToken = columnFamilyColumnValueToken[1].split("=");
        put.add(Bytes.toBytes(columnFamilyColumnValueToken[0]), Bytes.toBytes(columnValueToken[0]), Long.valueOf(timestamp), Bytes.toBytes(columnValueToken[1]));
        puts.add(put)
        response += fullColumnNamesList.get(i) + " ";
      }
      hTable.put(puts);
      this.setResponseMessage("Added to POI:" + response);
    }
    catch (IOException ex) {
      throw ex;
    }
    finally {
      hTable.close();
    }
  }
 
  public void deleteDataFromHbase(String rowKey, String columnFamilyColumnQualifiers) throws IOException
  {
    List<Delete> deletes = new ArrayList<Delete>();
    Delete delete = new Delete(Bytes.toBytes(rowKey));
   
    parseFullColumnNamesList(columnFamilyColumnQualifiers);   
    long timestamp = this.getMostRecentTimestamp(rowKey);   
    String[] columnFamilyColumnValueToken = null;
   
    String response = "";
   
    try
    {
      for (int i=0; i<fullColumnNamesList.size(); i++)
      {
        if(fullColumnNamesList.get(i).contains(":")) {         
          columnFamilyColumnValueToken = fullColumnNamesList.get(i).split(":");
          delete.deleteColumn(Bytes.toBytes(columnFamilyColumnValueToken[0]), Bytes.toBytes(columnFamilyColumnValueToken[1]), Long.valueOf(timestamp));
          response += fullColumnNamesList.get(i) + " ";
        } else {         
          delete.deleteFamily(Bytes.toBytes(fullColumnNamesList.get(i)), Long.valueOf(timestamp));
          response += fullColumnNamesList.get(i) + " ";
        }
        deletes.add(delete);
      }   
      hTable.delete(deletes);
      this.setResponseMessage("Deleted from POI: " + response);
    }
    catch (IOException ex) {
      throw ex;
    }
    finally {
      hTable.close();
    }   
  } 
}
TOP

Related Classes of com.atlantbh.jmeter.plugins.hbasecrud.HbaseCrudHelper

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.