Hbase For Java

package cn.hwadee.wuyang.hbase.utils;

import java.io.IOException;
import java.util.Iterator;
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.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
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.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;

public class HbaseUtil {
    static Configuration conf=null;
    static{
        conf = HBaseConfiguration.create();
        //conf.set("hbase.rootdir", "hdfs://centos201:9000/hbase");  
        conf.set("hbase.zookeeper.quorum", "centos201"); //必須加這個,不然無法定位
        //conf.set("hbase.zookeeper.property.clientPort", "2181");
    }

    /*  
     * 創建表  
     *   
     * @tableName 表名  
     *   
     * @family 列族列表  
     */  
    public static Boolean creatTable(String tableName, String[] family)  
            throws Exception {  
        @SuppressWarnings({ "resource", "deprecation" })
        HBaseAdmin admin = new HBaseAdmin(conf);
        @SuppressWarnings("deprecation")
        HTableDescriptor desc = new HTableDescriptor(tableName);  
        for (int i = 0; i < family.length; i++) {  
            desc.addFamily(new HColumnDescriptor(family[i]));  
        }  
        if (admin.tableExists(tableName)) {  
            System.out.println("table Exists!");  
            return false;
        } else {  
            admin.createTable(desc);  
            System.out.println("create table Success!");
            return true;
        }  
    }


    /*  
     * 爲表添加數據(適合知道有多少列族的固定表)  
     *   
     * @rowKey rowKey  
     *   
     * @tableName 表名  
     *   
     * @column1 第一個列族列表  
     *   
     * @value1 第一個列的值的列表  
     *   
     * @column2 第二個列族列表  
     *   
     * @value2 第二個列的值的列表  
     */  
    @SuppressWarnings({ "resource", "deprecation" })
    public static void addData(String rowKey, String tableName,  
            String[] column1, String[] value1, String[] column2, String[] value2)  
            throws IOException {  
        Put put = new Put(Bytes.toBytes(rowKey));// 設置rowkey  
        HTable table = new HTable(conf, Bytes.toBytes(tableName));// HTabel負責跟記錄相關的操作如增刪改查等//  
                                                                    // 獲取表  
        HColumnDescriptor[] columnFamilies = table.getTableDescriptor() // 獲取所有的列族  
                .getColumnFamilies();  

        for (int i = 0; i < columnFamilies.length; i++) {  
            String familyName = columnFamilies[i].getNameAsString(); // 獲取列族名  
            if (familyName.equals("familytest1")) { // familytest1列族put數據  
                for (int j = 0; j < column1.length; j++) {  
                    put.add(Bytes.toBytes(familyName),  
                            Bytes.toBytes(column1[j]), Bytes.toBytes(value1[j]));  
                }  
            }  
            if (familyName.equals("familytest2")) { // familytest2列族put數據  
                for (int j = 0; j < column2.length; j++) {  
                    put.add(Bytes.toBytes(familyName),  
                            Bytes.toBytes(column2[j]), Bytes.toBytes(value2[j]));  
                }  
            }  
        }  
        table.put(put);  
        System.out.println("add data Success!");  
    }  

    /*  
     * 根據rwokey查詢  
     *   
     * @rowKey rowKey  
     *   
     * @tableName 表名  
     */  
    @SuppressWarnings({ "deprecation", "resource" })
    public static Result getResult(String tableName, String rowKey)  
            throws IOException {  
        Get get = new Get(Bytes.toBytes(rowKey));  
        HTable table = new HTable(conf, Bytes.toBytes(tableName));// 獲取表  
        Result result = table.get(get);  
        for (KeyValue kv : result.list()) {  
            System.out.println("family:" + Bytes.toString(kv.getFamily()));  
            System.out  
                    .println("qualifier:" + Bytes.toString(kv.getQualifier()));  
            System.out.println("value:" + Bytes.toString(kv.getValue()));  
            System.out.println("Timestamp:" + kv.getTimestamp());  
            System.out.println("-------------------------------------------");  
        }  
        return result;  
    }  


    /*  
     * 遍歷查詢hbase表  
     *   
     * @tableName 表名  
     */  
    @SuppressWarnings({ "deprecation", "resource" })
    public static void getResultScann(String tableName) throws IOException {  
        Scan scan = new Scan();  
        ResultScanner rs = null;  
        HTable table = new HTable(conf, Bytes.toBytes(tableName));  
        try {  
            rs = table.getScanner(scan);  
            for (Result r : rs) {  
                for (KeyValue kv : r.list()) {  
                    System.out.println("row:" + Bytes.toString(kv.getRow()));  
                    System.out.println("family:"  
                            + Bytes.toString(kv.getFamily()));  
                    System.out.println("qualifier:"  
                            + Bytes.toString(kv.getQualifier()));  
                    System.out  
                            .println("value:" + Bytes.toString(kv.getValue()));  
                    System.out.println("timestamp:" + kv.getTimestamp());  
                    System.out  
                            .println("-------------------------------------------");  
                }  
            }  
        } finally {  
            rs.close();  
        }  
    }

    /*  
     * 遍歷查詢hbase表  
     *   
     * @tableName 表名  
     */  
    @SuppressWarnings({ "resource", "deprecation" })
    public static void getResultScann(String tableName, String start_rowkey,  
            String stop_rowkey) throws IOException {  
        Scan scan = new Scan();  
        scan.setStartRow(Bytes.toBytes(start_rowkey));  
        scan.setStopRow(Bytes.toBytes(stop_rowkey));  
        ResultScanner rs = null;  
        HTable table = new HTable(conf, Bytes.toBytes(tableName));  
        try {  
            rs = table.getScanner(scan);  
            for (Result r : rs) {  
                for (KeyValue kv : r.list()) {  
                    System.out.println("row:" + Bytes.toString(kv.getRow()));  
                    System.out.println("family:"  
                            + Bytes.toString(kv.getFamily()));  
                    System.out.println("qualifier:"  
                            + Bytes.toString(kv.getQualifier()));  
                    System.out  
                            .println("value:" + Bytes.toString(kv.getValue()));  
                    System.out.println("timestamp:" + kv.getTimestamp());  
                    System.out  
                            .println("-------------------------------------------");  
                }  
            }  
        } finally {  
            rs.close();  
        }  
    }

    /*  
     * 查詢表中的某一列  
     *   
     * @tableName 表名  
     *   
     * @rowKey rowKey  
     */  
    @SuppressWarnings({ "resource", "deprecation" })
    public static void getResultByColumn(String tableName, String rowKey,  
            String familyName, String columnName) throws IOException {  
        HTable table = new HTable(conf, Bytes.toBytes(tableName));  
        Get get = new Get(Bytes.toBytes(rowKey));  
        get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName)); // 獲取指定列族和列修飾符對應的列  
        Result result = table.get(get);  
        for (KeyValue kv : result.list()) {  
            System.out.println("family:" + Bytes.toString(kv.getFamily()));  
            System.out  
                    .println("qualifier:" + Bytes.toString(kv.getQualifier()));  
            System.out.println("value:" + Bytes.toString(kv.getValue()));  
            System.out.println("Timestamp:" + kv.getTimestamp());  
            System.out.println("-------------------------------------------");  
        }  
    } 

    /*  
     * 更新表中的某一列  
     *   
     * @tableName 表名  
     *   
     * @rowKey rowKey  
     *   
     * @familyName 列族名  
     *   
     * @columnName 列名  
     *   
     * @value 更新後的值  
     */  
    @SuppressWarnings({ "resource", "deprecation" })
    public static void updateTable(String tableName, String rowKey,  
            String familyName, String columnName, String value)  
            throws IOException {  
        HTable table = new HTable(conf, Bytes.toBytes(tableName));  
        Put put = new Put(Bytes.toBytes(rowKey));  
        put.add(Bytes.toBytes(familyName), Bytes.toBytes(columnName),  
                Bytes.toBytes(value));  
        table.put(put);  
        System.out.println("update table Success!");  
    } 


    /*  
     * 查詢某列數據的多個版本  
     *   
     * @tableName 表名  
     *   
     * @rowKey rowKey  
     *   
     * @familyName 列族名  
     *   
     * @columnName 列名  
     */  
    @SuppressWarnings({ "resource", "deprecation" })
    public static void getResultByVersion(String tableName, String rowKey,  
            String familyName, String columnName) throws IOException {  
        HTable table = new HTable(conf, Bytes.toBytes(tableName));  
        Get get = new Get(Bytes.toBytes(rowKey));  
        get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));  
        get.setMaxVersions(5);  
        Result result = table.get(get);  
        for (KeyValue kv : result.list()) {  
            System.out.println("family:" + Bytes.toString(kv.getFamily()));  
            System.out  
                    .println("qualifier:" + Bytes.toString(kv.getQualifier()));  
            System.out.println("value:" + Bytes.toString(kv.getValue()));  
            System.out.println("Timestamp:" + kv.getTimestamp());  
            System.out.println("-------------------------------------------");  
        }  

          List<?> results = table.get(get).list(); 
          Iterator<?> it =  results.iterator(); while (it.hasNext()) {  
          System.out.println(it.next().toString()); }  

    }  


    /*  
     * 刪除指定的列  
     *   
     * @tableName 表名  
     *   
     * @rowKey rowKey  
     *   
     * @familyName 列族名  
     *   
     * @columnName 列名  
     */  
    @SuppressWarnings({ "deprecation", "resource" })
    public static void deleteColumn(String tableName, String rowKey,  
            String falilyName, String columnName) throws IOException {  
        HTable table = new HTable(conf, Bytes.toBytes(tableName));  
        Delete deleteColumn = new Delete(Bytes.toBytes(rowKey));  
        deleteColumn.deleteColumns(Bytes.toBytes(falilyName),  
                Bytes.toBytes(columnName));  
        table.delete(deleteColumn);  
        System.out.println(falilyName + ":" + columnName + "is deleted!");  
    } 

    /*  
     * 刪除所有的列  
     *   
     * @tableName 表名  
     *   
     * @rowKey rowKey  
     */  
    @SuppressWarnings({ "resource", "deprecation" })
    public static void deleteAllColumn(String tableName, String rowKey)  
            throws IOException {  
        HTable table = new HTable(conf, Bytes.toBytes(tableName));  
        Delete deleteAll = new Delete(Bytes.toBytes(rowKey));  
        table.delete(deleteAll);  
        System.out.println("all columns are deleted!");  
    } 


    /*  
     * 刪除表  
     *   
     * @tableName 表名  
     */  
    @SuppressWarnings({ "resource", "deprecation" })
    public static void deleteTable(String tableName) throws IOException {  
        HBaseAdmin admin = new HBaseAdmin(conf);  
        admin.disableTable(tableName);  
        admin.deleteTable(tableName);  
        System.out.println(tableName + "is deleted!");  
    }  

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章