Hbase-API增刪改查掃描等操作

說明:
這是一個maven工程,需要導入相關配置。

在這裏插入圖片描述
代碼

package com.HbasePractice.hbase;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

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

/**
 * @author lv
 * @version 1.0, 20:44 2019/4/15
 */
public class HbaseTest {

    //配置信息
    public static Configuration conf;

    //獲取配置信息
    static {
        //alt + enter
        conf = HBaseConfiguration.create();
    }

    //1.判斷一張表是否存在
    public static boolean isExist(String tableName) throws IOException {
        //對錶操作需要用HbaseAdmin
        Connection connection = ConnectionFactory.createConnection(conf);
        //管理表
        HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();

        return admin.tableExists(TableName.valueOf(tableName));
    }
    //2.在hbase集羣創建表  create 'user','info','info1'
    // String... 表示可變參數
    public static void createTable(String tableName,String... columnFamilly) throws IOException {
        //對錶操作需要用HbaseAdmin
        Connection connection = ConnectionFactory.createConnection(conf);
        //管理表
        HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();

        //1.表如果存在 請輸入其它表名
        if(isExist(tableName)){
            System.out.println("表存在,請輸入其它表名");
        }else{
            //2.注意:創建表的話 需要創建一個描述器
            HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName));

            //3.創建列族
            for(String cf:columnFamilly){
                htd.addFamily(new HColumnDescriptor(cf));
            }

            //4.創建表
            admin.createTable(htd);
            System.out.println("表已創建成功!");
        }
    }
    // 3:刪除hbase中的表
    public static void deleteTable(String tableName) throws IOException {
        //對錶操作需要用HbaseAdmin
        Connection connection = ConnectionFactory.createConnection(conf);
        //管理表
        HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();

        //1.如果表存在 刪除 否則打印不存在
        //需要先指定表不可用 再刪除
        if(isExist(tableName)){
            //2.指定不可用,然後再刪除
            admin.disableTable(TableName.valueOf(tableName));
            admin.deleteTable(TableName.valueOf(tableName));
        }else{
            System.out.println("表不存在,請重新輸入表名!");
        }
    }

    //4.添加數據put 'user','rowkey',''
    public static void addRow(String tableName,String rowkey,String cf,String column,String value) throws IOException {
        //對錶操作需要用HbaseAdmin
        Connection connection = ConnectionFactory.createConnection(conf);
        //拿到表對象
        Table t = connection.getTable(TableName.valueOf(tableName));


        //1.用put方式加入數據
        Put p =  new Put(Bytes.toBytes(rowkey));
        //2.加入數據
        p.addColumn(Bytes.toBytes(cf),Bytes.toBytes(column),Bytes.toBytes(value));
        t.put(p);
    }



    //5.刪除表中一行數據
    public static void deleteRow(String tableName,String rowkey,String cf) throws IOException {
        //對錶操作需要用HbaseAdmin
        Connection connection = ConnectionFactory.createConnection(conf);
        //拿到表對象
        Table t = connection.getTable(TableName.valueOf(tableName));

        //1.根據rowkey刪除數據
        Delete d = new Delete(Bytes.toBytes(rowkey));
        //2.刪除
        t.delete(d);
    }

    //6.刪除多行數據
    public static void deleteAll(String tableName,String... rowkeys) throws IOException {
        //對錶操作需要用HbaseAdmin
        Connection connection = ConnectionFactory.createConnection(conf);
        //拿到表對象
        Table t = connection.getTable(TableName.valueOf(tableName));

        //1.把delete封裝到集合
        List<Delete> list = new ArrayList<Delete>();
        //2.遍歷
        for(String row:rowkeys){
            Delete d = new Delete(Bytes.toBytes(row));
            list.add(d);
        }
        t.delete(list);
    }
    //7.掃面表數據 scan全表掃描
    public static void scanAll(String tableName) throws IOException {
        //對錶操作需要用HbaseAdmin
        Connection connection = ConnectionFactory.createConnection(conf);
        //拿到表對象
        Table t = connection.getTable(TableName.valueOf(tableName));

        //1.實例scan
        Scan s = new Scan();
        //2,拿到Scanner對象
        ResultScanner rs = t.getScanner(s);

        //3.遍歷
        for(Result r:rs){
            Cell[] cells = r.rawCells();
            //遍歷具體數據
            for(Cell c:cells){
                System.out.println("行鍵爲:" + Bytes.toString(CellUtil.cloneRow(c)));
                System.out.println("列族爲:" + Bytes.toString(CellUtil.cloneFamily(c)));
                System.out.println("值爲:" + Bytes.toString(CellUtil.cloneValue(c)));
                
            }
        }
    }

    //8.掃描指定的數據
    public static void getRow(String tableName,String rowkey) throws IOException {
        //對錶操作需要用HbaseAdmin
        Connection connection = ConnectionFactory.createConnection(conf);
        //拿到表對象
        Table t = connection.getTable(TableName.valueOf(tableName));

        //1.掃描指定數據需要實例Get
        Get g = new Get(Bytes.toBytes(rowkey));
        //2.可加過濾條件
        g.addFamily(Bytes.toBytes("info"));

        Result rs = t.get(g);
        Cell[] cells = rs.rawCells();
        //3.遍歷
        //遍歷具體數據
        for(Cell c:cells){
            System.out.println("行鍵爲:" + Bytes.toString(CellUtil.cloneRow(c)));
            System.out.println("列族爲:" + Bytes.toString(CellUtil.cloneFamily(c)));
            System.out.println("值爲:" + Bytes.toString(CellUtil.cloneValue(c)));


        }

    }

    public static void main(String[] args) throws IOException {
//        System.out.println(isExist("emp1"));
//        deleteTable("Hunter");
//        createTable("LeronQ","henshuai","feichangshuai");
//         createTable("LeronQ2","info");
//        deleteTable("LeronQ2");
//                addRow("LeronQ2","101","info","age","18");
//                deleteRow("LeronQ2","101","info");
                   deleteAll("emp","1001","1002r");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章