使用HBase Client访问阿里云NoSQL数据库表格存储

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 如何使用HBase Client访问阿里云分布式NoSQL数据库表格存储

Apache HBase

  • Apache HBase是Hadoop database,属于Hadoop生态系统。
  • 自从十四年前Google相继发布论文:《The Google File System》、《MapReduce: Simplified Data Processing on Large Clusters》和《Bigtable: A Distributed Storage System for Structured Data》后,开源界开始模仿论文设计开源版本的这三个系统,其中佼佼者就是Hadoop生态,分别对应于Hadoop,HDFS和HBase。
  • 经过十几年业界大规模的使用和锤炼,目前Hadoop生态已经成为一种事实上的业界规范,导致NoSQL的鼻祖Google的Bigtable都支持HBase wrapper,提供了Bigtable HBase client。

Tablestore

  • Tablestore,中文名表格存储,是阿里云自主研发的NoSQL数据库,不同于HBase使用了Java,表格存储和Bigtable一样使用了C++语言来开发。
  • 作为同类型的NoSQL数据库,HBase的大部分功能也同样存在于表格存储中,甚至大部分场景下性能更优,但是表格存储还是不同于HBase,有部分高级功能,HBase并不拥有,这个后面单独文章介绍。

HBase client

  • HBase client是HBase提供的便于用户访问HBase的客户端,支持读、写、扫描、批量、表管理等功能。

场景

Hadoop生态作为长久以来唯一的开源大数据解决方案,被广泛用于各个公司中。目前,大部分自建数据处理系统的公司使用了HBase等Hadoop生态的系统。当这部分用户想将数据迁移到阿里云的NoSQL数据库表格存储时,之前都需要用户重写客户端代码才能使用表格存储,虽然这种方式性能更好,对后续的使用也更友好的,但是还是初期比较耗时间,为了解决这个问题,表格存储年前也推出了TableStore HBase client。

如何使用

用户如果之前使用HBase Client访问HBase,现在只需要在项目中将对HBase Client的依赖 修改为对Tablestore HBase client的依赖,同时修改hbase-site.xml中的hbase.client.connection.impl值为com.alicloud.tablestore.hbase.TablestoreConnection即可。其他代码都不需要任何改动。

例子

代码位置

当前示例程序使用了HBase API访问表格存储服务,完整的示例程序位于Github的Aliyun Tablestore HBase client for Java项目中,目录位置是src/test/java/samples/HelloWorld.java。

配置项目依赖

Maven的依赖配置如下:

   <dependencies>
        <dependency>
            <groupId>com.aliyun.openservices</groupId>
            <artifactId>tablestore-hbase-client</artifactId>
            <version>1.2.0</version>
        </dependency>
    </dependencies>

配置文件

hbase-site.xml中增加下列配置项:

<configuration>
    <property>
        <name>hbase.client.connection.impl</name>
        <value>com.alicloud.tablestore.hbase.TablestoreConnection</value>
    </property>
    <property>
        <name>tablestore.client.endpoint</name>
        <value>endpoint</value>
    </property>
    <property>
        <name>tablestore.client.instancename</name>
        <value>instance_name</value>
    </property>
    <property>
        <name>tablestore.client.accesskeyid</name>
        <value>access_key_id</value>
    </property>
    <property>
        <name>tablestore.client.accesskeysecret</name>
        <value>access_key_secret</value>
    </property>
    <property>
        <name>hbase.client.tablestore.family</name>
        <value>f1</value>
    </property>
    <property>
        <name>hbase.client.tablestore.table</name>
        <value>ots_adaptor</value>
    </property>
</configuration>

连接表格存储

通过创建一个TableStoreConnection对象链接表格存储服务。

        Configuration config = HBaseConfiguration.create();
        
        // 创建一个Tablestore Connection
        Connection connection = ConnectionFactory.createConnection(config);
        
        // Admin 负责创建、管理、删除等
        Admin admin = connection.getAdmin();

创建表

通过指定表名创建一张表,MaxVersion和TimeToLive都是用默认值。

        // 创建一个HTableDescriptor,只有一个列族
        HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(TABLE_NAME));
        
        // 创建一个列族,MaxVersion和TimeToLive使用默认值,MaxVersion默认值是1,TimeToLive默认值是Integer.INF_MAX。
        descriptor.addFamily(new HColumnDescriptor(COLUMN_FAMILY_NAME));
        
        // 通过Admin的createTable接口创建表
        System.out.println("Create table " + descriptor.getNameAsString());
        admin.createTable(descriptor);

写数据

写入一行数据到表格存储。

        // 创建一个TablestoreTable,用于单个表上的读写更新删除等操作
        Table table = connection.getTable(TableName.valueOf(TABLE_NAME));
        
        // 创建一个Put对象,主键是row_1
        System.out.println("Write one row to the table");
        Put put = new Put(ROW_KEY);
        
        // 增加一列,表格存储只支持单列族,列族名称在hbase-site.xml中配置,如果没有配置默认是“f”,所以写入数据时COLUMN_FAMILY_NAME可以是空值
        put.addColumn(COLUMN_FAMILY_NAME, COLUMN_NAME, COLUMN_VALUE);
        
        // 执行Table的put操作,使用Hbase API将这一行数据写入表格存储
        table.put(put);

读数据

读取指定行的数据。

        // 创建一个Get对象,读取主键为ROW_KEY的行
        Result getResult = table.get(new Get(ROW_KEY));
        Result result = table.get(get);
        
        // 打印结果
        String value = Bytes.toString(getResult.getValue(COLUMN_FAMILY_NAME, COLUMN_NAME));
        System.out.println("Get one row by row key");
        System.out.printf("\t%s = %s\n", Bytes.toString(ROW_KEY), value);

扫描数据

范围读取数据。

    扫描全表所有行数据
    System.out.println("Scan for all rows:");
    Scan scan = new Scan();

    ResultScanner scanner = table.getScanner(scan);
    
    // 循环打印结果
    for (Result row : scanner) {
        byte[] valueBytes = row.getValue(COLUMN_FAMILY_NAME, COLUMN_NAME);
        System.out.println('\t' + Bytes.toString(valueBytes));
    }

删表

使用Admin API删除一张表。

        print("Delete the table");
        admin.disableTable(table.getName());
        admin.deleteTable(table.getName());

完结

按照上面的步骤就可以使用Tablestore HBase client了,目前,已经有用户开始使用,后续,我们会根据用户的反馈持续优化Tablestore HBase client,使其性能能追赶到原生的表格存储(Tablestore)。

虽然通过Tablestore HBase Client也可以访问表格存储,但是还是建议用户直接使用表格存储的SDK访问表格存储,这样性能更好,功能更多,价格更便宜。表格存储的官方网站:https://cn.aliyun.com/product/ots

ff

相关实践学习
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
|
26天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL是关系型DB,依赖预定义的表格结构,适合结构化数据和复杂查询,但扩展性有限。NoSQL提供灵活的非结构化数据存储(如JSON),无统一查询语言,但能横向扩展,适用于大规模、高并发场景。选择取决于应用需求和扩展策略。
114 1
|
27天前
|
关系型数据库 分布式数据库 数据库
成都晨云信息技术完成阿里云PolarDB数据库产品生态集成认证
近日,成都晨云信息技术有限责任公司(以下简称晨云信息)与阿里云PolarDB PostgreSQL版数据库产品展开产品集成认证。测试结果表明,晨云信息旗下晨云-站群管理系统(V1.0)与阿里云以下产品:开源云原生数据库PolarDB PostgreSQL版(V11),完全满足产品兼容认证要求,兼容性良好,系统运行稳定。
|
1月前
|
缓存 安全 Java
阿里云数据库 SelectDB 内核 Apache Doris 2.0.6 版本正式发布
阿里云数据库 SelectDB 内核 Apache Doris 2.0.6 版本正式发布
|
1月前
|
存储 NoSQL 数据库
阿里云数据库Cassandra的产品价格
阿里云数据库Cassandra提供多地域服务,如中国、亚太、欧洲、美洲及中东。计费分为实例主机节点规格费和存储费用,实例价格因节点数和副本数而异,存储费用按挂载云盘计算。生产系统建议配置多节点以确保冗余。公网流量目前免费,具体收费时间未定。详细价格以购买页面为准。
421 3
|
1月前
|
SQL 关系型数据库 MySQL
2024年阿里云数据库创建_数据库账号密码和连接教程
阿里云数据库怎么使用?阿里云百科整理阿里云数据库从购买到使用全流程,阿里云支持MySQL、SQL Server、PostgreSQL和MariaDB等数据库引擎,阿里云数据库具有高可用、高容灾特性,阿里云提供数据库备份、恢复、迁移全套解决方案。详细阿里云数据库购买和使用流程方法如下
|
1月前
|
SQL 存储 JSON
阿里云数据库 SelectDB 内核 Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
亲爱的社区小伙伴们,Apache Doris 2.1.0 版本已于 2024 年 3 月 8 日正式发布,新版本开箱盲测性能大幅优化,在复杂查询性能方面提升100%,新增Arrow Flight接口加速数据读取千倍,支持半结构化数据类型与分析函数。异步多表物化视图优化查询并助力仓库分层建模。引入自增列、自动分区等存储优化,提升实时写入效率。Workload Group 资源隔离强化及运行时监控功能升级,保障多负载场景下的稳定性。新版本已经上线,欢迎大家下载使用!
阿里云数据库 SelectDB 内核 Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
|
22天前
|
存储 NoSQL Java
Java数据库编程指南:实现高效数据存储与访问
【4月更文挑战第2天】Java开发者必须掌握数据库编程,尤其是JDBC,它是连接数据库的标准接口。使用Spring JDBC或JPA能简化操作。选择合适的JDBC驱动,如MySQL Connector/J,对性能至关重要。最佳实践包括事务管理、防SQL注入、优化索引和数据库设计。NoSQL数据库如MongoDB也日益重要,Java有对应的驱动支持。理解这些概念和技术是构建高效数据库应用的基础。
Java数据库编程指南:实现高效数据存储与访问
|
1月前
|
SQL 安全 数据管理
在阿里云数据管理DMS(Data Management Service)中,您可以按照以下步骤来创建和管理数据库
【2月更文挑战第33天】在阿里云数据管理DMS(Data Management Service)中,您可以按照以下步骤来创建和管理数据库
36 7
|
4天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
37 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
8天前
|
SQL 缓存 Java
Java数据库连接池:优化数据库访问性能
【4月更文挑战第16天】本文探讨了Java数据库连接池的重要性和优势,它能减少延迟、提高效率并增强系统的可伸缩性和稳定性。通过选择如Apache DBCP、C3P0或HikariCP等连接池技术,并进行正确配置和集成,开发者可以优化数据库访问性能。此外,批处理、缓存、索引优化和SQL调整也是提升性能的有效手段。掌握数据库连接池的使用是优化Java企业级应用的关键。