JavaAPI如何操作HBase完成CRUD

简介: JavaAPI如何操作HBase完成CRUD

1.只需要引入HBase的客户端依赖即可。

        <!--Hbase客户端-->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.2.1</version>
        </dependency>

2.HBaseUtils.java 工具类抽取

public class HBaseUtils {
    private static Configuration configuration;
    // 1.获取配置对象
    static {
        configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum","hadoop1:2181,hadoop2:2181,hadoop3:2181");
    }
    // 2.获取连接对象
    public static Admin getAdmin() throws IOException {
        Connection connection = ConnectionFactory.createConnection(configuration);
        Admin admin = connection.getAdmin();
        return admin;
    }
    /*获取table*/
    public static Table getTable() throws IOException {
        return getTable("user_info");
    }
    public static Table getTable(String tablename) throws IOException {
        Connection connection = ConnectionFactory.createConnection(configuration);
        return connection.getTable(TableName.valueOf(tablename));
    }
    /*关闭table*/
    public static void close(Table table) throws IOException {
        if (table != null){
            table.close();
        }
    }
    // 3.释放admin
    public static void close(Admin admin) throws IOException {
        admin.close();
    }
    public static void close(Admin admin,Table table) throws IOException {
        close(admin);
        close(table);
    }
}


3.DDL 操作

public class TableDDL {
    private HBaseAdmin admin;
    @Before
    public void before() throws IOException {
        admin = (HBaseAdmin) HBaseUtils.getAdmin();
    }
    /*创建表*/
    @Test
    public void createTable() throws IOException {
        // 1.创建表描述器对象
        HTableDescriptor ht = new HTableDescriptor(TableName.valueOf("user_info"));
        // 2.添加列簇
        HColumnDescriptor familyColumn1 = new HColumnDescriptor("base_info");
        HColumnDescriptor familyColumn2 = new HColumnDescriptor("extra_info");
        ht.addFamily(familyColumn1);
        ht.addFamily(familyColumn2);
        admin.createTable(ht);
    }
    /*删除表*/
    @Test
    public void deleteTable() throws IOException {
        TableName tableName = TableName.valueOf("user_info");
        HTableDescriptor user_info = new HTableDescriptor(tableName);
        if (!admin.isTableDisabled(tableName)){
            admin.disableTable(tableName);
        }
        admin.deleteTable(tableName);
    }
    /*修改表*/
    @Test
    public void modifyTable() throws IOException {
        TableName tableName = TableName.valueOf("user_info");
        HTableDescriptor user_info = admin.getTableDescriptor(tableName);
        // 2.添加列簇
        HColumnDescriptor familyColumn1 = new HColumnDescriptor("base_info2");
        HColumnDescriptor familyColumn2 = new HColumnDescriptor("extra_info2");
        user_info.addFamily(familyColumn1);
        user_info.addFamily(familyColumn2);
        admin.modifyTable(tableName,user_info);
    }
    /*查询所有的列簇*/
    @Test
    public void listAllFamily() throws IOException {
        //查询所有的列簇
        HTableDescriptor user_info = admin.getTableDescriptor(TableName.valueOf("user_info"));
        HColumnDescriptor[] columnFamilies = user_info.getColumnFamilies();
        for (HColumnDescriptor ht : columnFamilies){
            System.out.println(ht.getNameAsString());
        }
    }
    /*删除一个列簇*/
    @Test
    public void removeFamily() throws IOException {
        TableName tableName = TableName.valueOf("user_info");
        HTableDescriptor user_info = admin.getTableDescriptor(tableName);
        //删除
        //user_info.removeFamily(Bytes.toBytes("extra_info"));
        //提交修改
        //admin.modifyTable(tableName,user_info);
        admin.deleteColumn(tableName,Bytes.toBytes("extra_info"));
    }
    @After
    public void after() throws IOException {
        HBaseUtils.close(admin);
    }
}

4.DML 操作

public class TableDML {
    private Table table;
    @Before
    public void before() throws IOException {
        table = HBaseUtils.getTable();
    }
    /*插入一条记录
    * put 'ns1:t1','r1','c1','value'
    * 批量插入的话,直接放入list集合即可
    * */
    @Test
    public void put() throws IOException {
        // 1.创建put对象
        Put put = new Put(Bytes.toBytes("001")); //行建
        // 2.添加列数据
        put.addColumn(Bytes.toBytes("base_info"),Bytes.toBytes("name"),Bytes.toBytes("wang"));
        table.put(put);
    }
    /*查询一条记录*/
    @Test
    public void get1() throws IOException {
        // 1.创建get对象
        Get get = new Get(Bytes.toBytes("001"));
        Result result = table.get(get);
        NavigableMap<byte[], byte[]> base_info = result.getFamilyMap(Bytes.toBytes("base_info"));
        // 2.便利有序集合
        Set<Map.Entry<byte[], byte[]>> entries = base_info.entrySet();
        for (Map.Entry<byte[], byte[]> entry : entries){
            System.out.println(new String(entry.getKey() + "--->"+new String(entry.getValue())));
        }
    }
    /*查询一条记录*/
    @Test
    public void get2() throws IOException {
        // 1.创建get对象
        Get get = new Get(Bytes.toBytes("001"));
        Result result = table.get(get);
        CellScanner cellScanner = result.cellScanner();
        // 2.遍历
        while (cellScanner.advance()){
            //当前的cell
            Cell cell = cellScanner.current();
            System.out.println(new String(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength()));//列簇
            System.out.println(new String(cell.getQualifierArray(),cell.getQualifierOffset(),cell.getQualifierLength()));//列名
            System.out.println(new String(cell.getValueArray(),cell.getValueOffset(),cell.getValueLength()));//列值
        }
    }
    /*查询一条记录*/
    @Test
    public void get3() throws IOException {
        // 1.创建get对象
        Get get = new Get(Bytes.toBytes("001"));
        Result result = table.get(get);
        CellScanner cellScanner = result.cellScanner();
        // 2.遍历
        while (cellScanner.advance()){
            //当前的cell
            Cell cell = cellScanner.current();
            System.out.println(new String(CellUtil.cloneRow(cell)));//行建
            System.out.println(new String(CellUtil.cloneFamily(cell)));
            System.out.println(new String(CellUtil.cloneQualifier(cell)));
            System.out.println(new String(CellUtil.cloneValue(cell)));
        }
    }
    @After
    public void after() throws IOException {
        HBaseUtils.close(table);
    }
}


相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
5月前
|
分布式计算 资源调度 Hadoop
HBase表数据的读、写操作与综合操作
HBase表数据的读、写操作与综合操作
77 0
|
5月前
|
分布式计算 Hadoop Shell
熟悉常用的HBase操作
熟悉常用的HBase操作
101 3
熟悉常用的HBase操作
|
14天前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
25 3
|
3月前
|
DataWorks 数据管理 大数据
DataWorks操作报错合集之在连接HBase时出现超时问题,该怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4月前
|
Java 大数据 API
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
131 0
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
|
5月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之使用 Event Time Temporal Join 关联多个 HBase 后,Kafka 数据的某个字段变为 null 是什么原因导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
105 0
|
5月前
|
SQL 消息中间件 Kafka
实时计算 Flink版操作报错合集之使用 Event Time Temporal Join 关联多个 HBase 后,Kafka 数据的某个字段变为 null 是什么原因导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
76 0
|
5月前
|
存储 分布式计算 分布式数据库
对给定的数据利用MapReduce编程实现数据的清洗和预处理,编程实现数据存储到HBase数据库,实现数据的增删改查操作接口
对给定的数据利用MapReduce编程实现数据的清洗和预处理,编程实现数据存储到HBase数据库,实现数据的增删改查操作接口
50 0
|
5月前
|
Java 分布式数据库 Maven
Hbase的javaAPI
Hbase的javaAPI
44 0
|
5月前
|
SQL 存储 NoSQL
分布式NoSQL列存储数据库Hbase操作(二)
分布式NoSQL列存储数据库Hbase操作(二)
137 0