(New API)HBase Java API的一些常规操作

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.*;

/**
 * Copyright (c) 2019 bigdata ALL Rights Reserved
 * Project: learning
 * Package: PACKAGE_NAME
 * Version: 1.0
 *
 * @author qingzhi.wu 2020/9/12 16:54
 */
public class HomeWork implements HBaseInterface {
    private static final String ZK_CONNECT_STR = "cdh01:2181,cdh02:2181,cdh04:2181";
    private static Configuration config;
    private static Admin admin;
    private static Connection connection;

    static {
        try {
            config = HBaseConfiguration.create();
            config.set("hbase.zookeeper.quorum", ZK_CONNECT_STR);
            connection = ConnectionFactory.createConnection(config);
            admin = connection.getAdmin();

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

    @Override
    public void getAllTables() throws Exception {
        TableName[] tableNames = admin.listTableNames();
        System.out.println(Arrays.toString(tableNames));
    }

    @Override
    public void createTable(String tableName, String[] family) throws Exception {
        TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));
        List<ColumnFamilyDescriptor> list = new ArrayList<>();
        for (String s : family) {
            ColumnFamilyDescriptor columnFamilyDescriptor = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(s)).build();
            list.add(columnFamilyDescriptor);
        }
        TableDescriptor tableDescriptor = tableDescriptorBuilder.setColumnFamilies(list).build();
        createTable(tableDescriptor);

    }

    @Override
    public void createTable(TableDescriptor tds) throws Exception {
        admin.createTable(tds);
    }

    @Override
    public void createTable(String tableName, TableDescriptor tds) throws Exception {
        //无法实现

    }

    @Override
    public void descTable(String tableName) throws Exception {
        TableDescriptor descriptor = admin.getDescriptor(TableName.valueOf(tableName));
        Set<byte[]> columnFamilyNames = descriptor.getColumnFamilyNames();
        StringBuilder stringBuilder = new StringBuilder();
        for (byte[] columnFamilyName : columnFamilyNames) {
            String s = Bytes.toString(columnFamilyName);
            stringBuilder.append(s+",");
        }
        System.out.println(stringBuilder.toString());

    }

    @Override
    public boolean existTable(String tableName) throws Exception {
        return admin.tableExists(TableName.valueOf(tableName));
    }

    @Override
    public void disableTable(String tableName) throws Exception {
        admin.disableTable(TableName.valueOf(tableName));
    }

    @Override
    public void dropTable(String tableName) throws Exception {
        disableTable(tableName);
        admin.deleteTable(TableName.valueOf(tableName));
    }

    @Override
    public void modifyTable(String tableName) throws Exception {
        // 修改表(增加和删除)

        if (existTable(tableName)){
            dropTable(tableName);
        }else{
            String[] defultFamily = {"d"};
            createTable(tableName,defultFamily);
        }
    }

    @Override
    public void modifyTable(String tableName, String[] addColumn, String[] removeColumn) throws Exception {
        TableName tn =TableName.valueOf(tableName);
        for (String s : addColumn) {
            ColumnFamilyDescriptor columnFamilyDescriptor = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(s)).build();
            admin.addColumnFamily(tn,columnFamilyDescriptor);
        }
        for (String s : removeColumn) {
            admin.deleteColumnFamily(tn,Bytes.toBytes(s));
        }
    }

    @Override
    public void modifyTable(String tableName, ColumnFamilyDescriptor cfds) throws Exception {
        String name = Bytes.toString(cfds.getName());
        TableDescriptor descriptor = admin.getDescriptor(TableName.valueOf(tableName));
        Set<byte[]> columnFamilyNames = descriptor.getColumnFamilyNames();
        Set<String> colNames = new HashSet<>();
        for (byte[] columnFamilyName : columnFamilyNames) {
            String s = Bytes.toString(columnFamilyName);
            colNames.add(s);
        }

        if (!colNames.contains(name)){
            ColumnFamilyDescriptor col = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(name)).build();
            admin.addColumnFamily(TableName.valueOf(tableName),col);
        }
    }

    @Override
    public void addData(String tableName, String rowKey, String[] column, String[] value) throws Exception {
        Put put = new Put(Bytes.toBytes(rowKey));
        Table table = getTable(tableName);
        ColumnFamilyDescriptor[] columnFamilies = table.getDescriptor().getColumnFamilies();
        for (ColumnFamilyDescriptor columnFamily : columnFamilies) {
            String familyName = columnFamily.getNameAsString();
            if ("base".equals(familyName)){
                for (int i = 0; i < column.length; i++) {
                    put.addColumn(Bytes.toBytes(familyName),
                            Bytes.toBytes(column[i]), Bytes.toBytes(value[i]));
                }
            }

        }
        table.put(put);
        System.out.println("add data Success!");
    }
    private  Table getTable(String tableName) throws Exception{
        return connection.getTable(TableName.valueOf(tableName));
    }

    @Override
    public void putData(String tableName, String rowKey, String familyName, String columnName, String value) throws Exception {
        Put put = new Put(Bytes.toBytes(rowKey));
        Table table = getTable(tableName);
        put.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName),Bytes.toBytes(value));
        table.put(put);
        System.out.println("add one data Success!");
    }

    @Override
    public void putData(String tableName, String rowKey, String familyName, String columnName, String value, long timestamp) throws Exception {
        Put put = new Put(Bytes.toBytes(rowKey));
        Table table = getTable(tableName);
        put.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName),Bytes.toBytes(value));
        put.setTimestamp(timestamp);
        table.put(put);
        System.out.println("add one data Success!");

    }
    private void  print(Result result) throws Exception{
        CellScanner cellScanner = result.cellScanner();
        while (cellScanner.advance()){
            Cell cell = cellScanner.current();
            System.out.println("行键:"+Bytes.toString(CellUtil.copyRow(cell)));
            System.out.println("列族:"+Bytes.toString(CellUtil.cloneFamily(cell)));
            System.out.println("列名:"+Bytes.toString(CellUtil.cloneQualifier(cell)));
            System.out.println("值:"+Bytes.toString(CellUtil.cloneValue(cell)));
        }

    }

    @Override
    public void putData(Put put) throws Exception {
        //无法实现
    }

    @Override
    public void putData(List<Put> putList) throws Exception {
        //无法实现
    }

    @Override
    public Result getResult(String tableName, String rowKey) throws Exception {
        Get get = new Get(rowKey.getBytes());
        Table table = getTable(tableName);
        Result result = table.get(get);
        return result;
    }

    @Override
    public Result getResult(String tableName, String rowKey, String familyName) throws Exception {
        Get get = new Get(rowKey.getBytes());
        Table table = getTable(tableName);
         get.addFamily(familyName.getBytes());
        Result result = table.get(get);
        return result;
    }

    @Override
    public Result getResult(String tableName, String rowKey, String familyName, String columnName) throws Exception {
        Get get = new Get(rowKey.getBytes());
        Table table = getTable(tableName);
        get.addColumn(familyName.getBytes(),columnName.getBytes());
        Result result = table.get(get);
        return result;
    }

    @Override
    public Result getResultByVersion(String tableName, String rowKey, String familyName, String columnName, int versions) throws Exception {
        Get get = new Get(rowKey.getBytes());
        Table table = getTable(tableName);
        //get.addFamily(familyName.getBytes());
        get.addColumn(familyName.getBytes(),columnName.getBytes());
        get.setMaxVersions(versions);
        //get.readVersions(versions);
        Result result = table.get(get);
        return result;
    }

    @Override
    public ResultScanner getResultScann(String tableName) throws Exception {
        Scan scan = new Scan();
        Table table = getTable(tableName);
        ResultScanner scanner = table.getScanner(scan);
        return scanner;
    }

    @Override
    public ResultScanner getResultScann(String tableName, Scan scan) throws Exception {
        Table table = getTable(tableName);
        ResultScanner scanner = table.getScanner(scan);
        return scanner;
    }

    @Override
    public ResultScanner getResultScann(String tableName, String columnFamily, String qualifier) throws Exception {
        Scan scan = new Scan();
       // scan.addFamily(columnFamily.getBytes());
        scan.addColumn(columnFamily.getBytes(),qualifier.getBytes());
        Table table = getTable(tableName);
        ResultScanner scanner = table.getScanner(scan);
        return scanner;
    }

    @Override
    public void deleteColumn(String tableName, String rowKey) throws Exception {
        Delete delete = new Delete(rowKey.getBytes());
        Table table = getTable(tableName);
        table.delete(delete);
    }

    @Override
    public void deleteColumn(String tableName, String rowKey, String falilyName) throws Exception {
        Table table = getTable(tableName);
        Delete delete = new Delete(rowKey.getBytes());
        table.delete(delete);
    }

    @Override
    public void deleteColumn(String tableName, String rowKey, String falilyName, String columnName) throws Exception {
        Delete delete = new Delete(rowKey.getBytes());
        delete.addColumn(falilyName.getBytes(),columnName.getBytes());
        Table table = getTable(tableName);
        table.delete(delete);
    }

    private static void close() {
        try {
            connection.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        HomeWork homeWork = new HomeWork();
        String tableName = "test2";
//        String[] fams = {"d","m"};

        //homeWork.createTable(tableName,fams);
        // homeWork.getAllTables();
//        TableDescriptor test3 = TableDescriptorBuilder.newBuilder(TableName.valueOf("test3")).build();
//        homeWork.createTable(test3);

       // homeWork.getAllTables();
        //homeWork.modifyTable("test2");
      //  homeWork.getAllTables();
        //homeWork.descTable("test1");
//        String[] fams = {"d"};
//        String[] ss = {"m"};
//        ColumnFamilyDescriptor ss = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("ss")).build();
//        homeWork.modifyTable("test2",ss);

//        homeWork.descTable("test2");
       // homeWork.putData("test2","1","m","age","22");
        //homeWork.putData("test2","1","m","name","lisi");
        //Result result = homeWork.getResult(tableName, "1");
      //  Result result = homeWork.getResult(tableName, "1","m","age");
        homeWork.putData("test2","1","m","age","22");
        homeWork.putData("test2","1","m","name","22");
        homeWork.deleteColumn(tableName,"1","m","age");

        Result result = homeWork.getResult(tableName, "1","m");

        homeWork.print(result);
        close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值