Hbase 常用工具類

jopen 9年前發布 | 2K 次閱讀 Java HBase

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.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HConnection; import org.apache.hadoop.hbase.client.HConnectionManager; import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.HTablePool;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.util.Bytes;

/*

  • @author create by khj / @SuppressWarnings("all") public class OperHbaseUtil {

    public static Configuration configuration;

    private static HConnection conn = null;

    static {

     configuration = HBaseConfiguration.create();
     configuration.set("hbase.zookeeper.property.clientPort", "2181");
     configuration.set("hbase.zookeeper.quorum", "192.168.1.100");
     try {
         conn = HConnectionManager.createConnection(configuration);
     } catch (IOException e) {
         e.printStackTrace();
     }
    

    }

    public static void main(String[] args) {

    }

    /**

    • 創建表
    • @param tableName */

      public static void createTable(String tableName) {
      System.out.println("start create table ......");
      try {

       HBaseAdmin hBaseAdmin = new HBaseAdmin(configuration);  
       if (hBaseAdmin.tableExists(tableName)) {// 如果存在要創建的表,那么先刪除,再創建  
           hBaseAdmin.disableTable(tableName);  
           hBaseAdmin.deleteTable(tableName);  
           System.out.println(tableName + " is exist,detele....");  
       }  
       HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);  
       tableDescriptor.addFamily(new HColumnDescriptor("column1"));  
       tableDescriptor.addFamily(new HColumnDescriptor("column2"));  
       tableDescriptor.addFamily(new HColumnDescriptor("column3"));  
       hBaseAdmin.createTable(tableDescriptor);  
      

      } catch (MasterNotRunningException e) {

       e.printStackTrace();  
      

      } catch (ZooKeeperConnectionException e) {

       e.printStackTrace();  
      

      } catch (IOException e) {

       e.printStackTrace();  
      

      }
      System.out.println("end create table ......");
      }

      /**

    • 插入數據
    • @param tableName */
      public static void insertData(String tableName) {
      System.out.println("start insert data ......");
      HTablePool pool = new HTablePool(configuration, 1000);
      HTable table = (HTable) pool.getTable(tableName);
      Put put = new Put("112233bbbcccc".getBytes());// 一個PUT代表一行數據,再NEW一個PUT表示第二行數據,每行一個唯一的ROWKEY,此處rowkey為put構造方法中傳入的值
      put.add("column1".getBytes(), null, "name".getBytes());// 本行數據的第一列
      put.add("column2".getBytes(), null, "type".getBytes());// 本行數據的第三列
      put.add("column3".getBytes(), null, "desc".getBytes());// 本行數據的第三列
      try {

       table.put(put);  
      

      } catch (IOException e) {

       e.printStackTrace();  
      

      }
      System.out.println("end insert data ......");
      }

      /**

    • 刪除一張表
    • @param tableName */
      public static void dropTable(String tableName) {
      try {

       HBaseAdmin admin = new HBaseAdmin(configuration);  
       admin.disableTable(tableName);  
       admin.deleteTable(tableName);  
      

      } catch (MasterNotRunningException e) {

       e.printStackTrace();  
      

      } catch (ZooKeeperConnectionException e) {

       e.printStackTrace();  
      

      } catch (IOException e) {

       e.printStackTrace();  
      

      }

      }
      /**

    • 根據 rowkey刪除一條記錄
    • @param tablename
    • @param rowkey */
      public static void deleteRow(String tablename, String rowkey) {
      try {

       HTable table = new HTable(configuration, tablename);  
       List list = new ArrayList();  
       Delete d1 = new Delete(rowkey.getBytes());  
       list.add(d1);  
      
       table.delete(list);  
       System.out.println("刪除行成功!");  
      
      

      } catch (IOException e) {

       e.printStackTrace();  
      

      }

}  

 /**
  * 組合條件刪除
  * @param tablename
  * @param rowkey
  */  
 public static void deleteByCondition(String tablename, String rowkey)  {  
        //目前還沒有發現有效的API能夠實現 根據非rowkey的條件刪除 這個功能能,還有清空表全部數據的API操作  

}  


/**
 * 查詢所有數據
 * @param tableName
 */  
public static void QueryAll(String tableName) {  
    HTablePool pool = new HTablePool(configuration, 1000);  
    HTable table = (HTable) pool.getTable(tableName);  
    try {  
        ResultScanner rs = table.getScanner(new Scan());  
        for (Result r : rs) {  
            System.out.println("獲得到rowkey:" + new String(r.getRow()));  
            for (KeyValue keyValue : r.raw()) {  
                System.out.println("列:" + new String(keyValue.getFamily())  
                        + "====值:" + new String(keyValue.getValue()));  
            }  
        }  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
}  

/**
 * 單條件查詢,根據rowkey查詢唯一一條記錄
 * @param tableName
 */  
public static void QueryByCondition1(String tableName) {  

    HTablePool pool = new HTablePool(configuration, 1000);  
    HTable table = (HTable) pool.getTable(tableName);  
    try {  
        Get scan = new Get("abcdef".getBytes());// 根據rowkey查詢  
        Result r = table.get(scan);  
        System.out.println("獲得到rowkey:" + new String(r.getRow()));  
        for (KeyValue keyValue : r.raw()) {  
            System.out.println("列:" + new String(keyValue.getFamily())  
                    + "====值:" + new String(keyValue.getValue()));  
        }  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
}  

/**
 * 單條件按查詢,查詢多條記錄
 * @param tableName
 */  
public static void QueryByCondition2(String tableName) {  

    try {  
        HTablePool pool = new HTablePool(configuration, 1000);  
        HTable table = (HTable) pool.getTable(tableName);  
        Filter filter = new SingleColumnValueFilter(Bytes  
                .toBytes("column1"), null, CompareOp.EQUAL, Bytes  
                .toBytes("name")); // 當列column1的值為aaa時進行查詢  
        Scan s = new Scan();  
        s.setFilter(filter);  
        ResultScanner rs = table.getScanner(s);  
        for (Result r : rs) {  
            System.out.println("獲得到rowkey:" + new String(r.getRow()));  
            for (KeyValue keyValue : r.raw()) {  
                System.out.println("列:" + new String(keyValue.getFamily())  
                        + "====值:" + new String(keyValue.getValue()));  
            }  
        }  
    } catch (Exception e) {  
        e.printStackTrace();  
    }  

}  

/**
 * 組合條件查詢
 * @param tableName
 */  
public static void QueryByCondition3(String tableName) {  

    try {  
        HTablePool pool = new HTablePool(configuration, 1000);  
        HTable table = (HTable) pool.getTable(tableName);  

        List<Filter> filters = new ArrayList<Filter>();  

        Filter filter1 = new SingleColumnValueFilter(Bytes  
                .toBytes("column1"), null, CompareOp.EQUAL, Bytes  
                .toBytes("name"));  
        filters.add(filter1);  

        Filter filter2 = new SingleColumnValueFilter(Bytes  
                .toBytes("column2"), null, CompareOp.EQUAL, Bytes  
                .toBytes("type"));  
        filters.add(filter2);  

        Filter filter3 = new SingleColumnValueFilter(Bytes  
                .toBytes("column3"), null, CompareOp.EQUAL, Bytes  
                .toBytes("desc"));  
        filters.add(filter3);  

        FilterList filterList1 = new FilterList(filters);  

        Scan scan = new Scan();  
        scan.setFilter(filterList1);  
        ResultScanner rs = table.getScanner(scan);  
        for (Result r : rs) {  
            System.out.println("獲得到rowkey:" + new String(r.getRow()));  
            for (KeyValue keyValue : r.raw()) {  
                System.out.println("列:" + new String(keyValue.getFamily())  
                        + "====值:" + new String(keyValue.getValue()));  
            }  
        }  
        rs.close();  

    } catch (Exception e) {  
        e.printStackTrace();  
    }  

}  

} </pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!