【HBase】HBaseAPI代码

【HBase】HBaseAPI代码,第1张

【HBase】HBaseAPI代码
package com.chris.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;

public class hbaseAPI {

    private static Admin admin = null;

    private static Connection connection= null;

    // 当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化
    static {
        try {
            // 1.获取配置信息
            Configuration conf = HbaseConfiguration.create();
            conf.set("hbase.zookeeper.quorum","hadoop102,hadoop103,hadoop104");
            // 2.创建连接对象
            connection = ConnectionFactory.createConnection(conf);
            // 3.创建Admin对象
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //关闭资源
    public static void close(){
        if(admin!=null){
            try {
                admin.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if(connection!=null){
            try {
                connection.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    // 判断表是否存在
    public static boolean isTableExist(String tableName) throws IOException {
        boolean ans = admin.tableExists(TableName.valueOf(tableName));
        return ans;
    }

    // 创建表
    public static void createTable(String tableName,String... columnFamilies) throws IOException {
        // 1.判断是否存在列族信息
        if(columnFamilies.length<=0){
            System.out.println("请设置列族信息!");
            return;
        }
        // 2.判断表是否存在
        if(isTableExist(tableName)){
            System.out.println(tableName+"表已存在!");
        }
        // 3.创建表描述器
        HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf(tableName));
        // 4.循环添加列族信息
        for (String cfs : columnFamilies) {
            // 5.创建列族描述器
            HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(cfs);

            // 6.添加具体的列族信息
            hTableDescriptor.addFamily(hColumnDescriptor);
        }
        // 7.创建表
        admin.createTable(hTableDescriptor);
    }

    // 创建命名空间
    public static void createNameSpace(String name){
        NamespaceDescriptor descriptor = NamespaceDescriptor.create(name).build();
        try {
            admin.createNamespace(descriptor);
            System.out.println("----"+name+"命名空间创建成功!");
        } catch (NamespaceExistException e){
            System.out.println("该命名空间已存在!");
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 删除表
    public static void deleteTable(String tableName) throws IOException {
        // 1.判断表是否存在
        if(!isTableExist(tableName)){
            System.out.println(tableName+"--该表不存在!");
        }
        TableName name = TableName.valueOf(tableName);
        // 2. 先disable表
        admin.disableTable(name);
        // 3.再删除表
        admin.deleteTable(name);
        System.out.println("----该表删除成功!");
    }

    // 插入数据
    // cf : 列族   cn:列
    public static void putData(String tableName,String rowKey,String cf,String cn,String value) throws IOException {
        // 1.获取表对象
        Table table = connection.getTable(TableName.valueOf(tableName));
        // 2.创建put对象
        Put put = new Put(Bytes.toBytes(rowKey));
        // 3.添加 列族、列、值 (批量添加数据:1、批量添加列 2、批量添加rowKey)
        put.addColumn(Bytes.toBytes(cf),Bytes.toBytes(cn),Bytes.toBytes(value));
        // 4.插入数据
        table.put(put);
        System.out.println("-----数据插入成功!");
        // 关闭资源
        table.close();
    }

    // 获取数据 (get)
    public static void getData(String tableName, String rowKey, String cf, String cn) throws IOException {
        // 1.获取表对象
        Table table = connection.getTable(TableName.valueOf(tableName));
        // 2.创建get对象
        Get get = new Get(Bytes.toBytes(rowKey));
        // 2.1 指定获取的列族
//        get.addFamily(Bytes.toBytes(cf));
        // 2.2 指定列族和列
        get.addColumn(Bytes.toBytes(cf),Bytes.toBytes(cn));
        // 2.3 设置获取的版本数
        get.setMaxVersions(2);
        // 3.获取数据
        Result result = table.get(get);
        for (Cell cell : result.rawCells()) {
            // 4.打印数据
            System.out.println("CF:"+Bytes.toString(CellUtil.cloneFamily(cell))+
                    ",CN:"+Bytes.toString(CellUtil.cloneQualifier(cell))+
                    ",Value:"+Bytes.toString(CellUtil.clonevalue(cell)));
        }
        // 5.关闭表连接
        table.close();
    }

    // 获取数据 (scan)
    public  static void scan(String tableName) throws IOException {
        Table table = connection.getTable(TableName.valueOf(tableName));
        Scan scan = new Scan(Bytes.toBytes("1001"),Bytes.toBytes("1002"));
        ResultScanner scanner = table.getScanner(scan);
        for (Result result : scanner) {
            for (Cell cell : result.rawCells()) {
                // 4.打印数据
                System.out.println("RowKey:"+Bytes.toString(CellUtil.cloneRow(cell))+
                        ",CF:"+Bytes.toString(CellUtil.cloneFamily(cell))+
                        ",CN:"+Bytes.toString(CellUtil.cloneQualifier(cell))+
                        ",Value:"+Bytes.toString(CellUtil.clonevalue(cell)));

            }
        }
        table.close();
    }

    // 删除数据(delete)
    public static void deleteData(String tableName,String rowKey,String cf,String cn) throws IOException {
        // 1.创建表对象
        Table table = connection.getTable(TableName.valueOf(tableName));
        // 2.创建delete对象
        Delete delete = new Delete(Bytes.toBytes(rowKey));
        // 2.1 指定删除的列 (type=DeleteColumn ,删除所有版本)
//        delete.addColumns(Bytes.toBytes(cf),Bytes.toBytes(cn));
        // 2.2 指定删除的列 (type=Delete ,删除当前版本,再次查询会发现历史版本)
        delete.addColumn(Bytes.toBytes(cf),Bytes.toBytes(cn));
        // 3.执行删除操作 (只提供tableName和rowKey,会删除整个列族,type=DeleteFamily )
        table.delete(delete);
        System.out.println("----删除成功!");
        // 4.关闭连接
        table.close();
    }

    public static void main(String[] args) throws IOException {
        // 1.判断表是否存在
        boolean exist = isTableExist("stu");
        System.out.println("stu是否存在?"+exist);
        // 2.创建表
        System.out.println(isTableExist("stu2"));
        createTable("stu2","info");
        System.out.println(isTableExist("stu2"));
        // 3.删除表
        deleteTable("stu1");
        // 4.创建命名空间
        createNameSpace("2022");
        // 5.向表中插入数据
        putData("stu","1001","info","name","Booker");
        putData("stu","1002","info","name","Ayton");
        // 6.获得表数据 (get)
        getData("stu","1004","info", "name");
        // 7.获取表数据 (scan)
        scan("stu");
        // 8.删除数据
        deleteData("stu1","1001","info1","name");
        
        close();
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5706235.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存