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

本文涉及的产品
对象存储 OSS,20GB 3个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
日志服务 SLS,月写入数据量 50GB 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>
AI 代码解读

配置文件

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>
AI 代码解读

连接表格存储

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

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

创建表

通过指定表名创建一张表,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);
AI 代码解读

写数据

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

        // 创建一个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);
AI 代码解读

读数据

读取指定行的数据。

        // 创建一个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);
AI 代码解读

扫描数据

范围读取数据。

    扫描全表所有行数据
    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));
    }
AI 代码解读

删表

使用Admin API删除一张表。

        print("Delete the table");
        admin.disableTable(table.getName());
        admin.deleteTable(table.getName());
AI 代码解读

完结

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

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

ff

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
打赏
0
0
0
1
3247
分享
相关文章
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
99 11
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
87 3
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
126 2
优化微服务架构中的数据库访问:策略与实践
随着微服务架构的普及,如何高效管理和优化数据库访问成为了关键挑战。本文探讨了在微服务环境中优化数据库访问的策略,包括数据库分片、缓存机制、异步处理等技术手段。通过深入分析实际案例和最佳实践,本文旨在为开发者提供实际可行的解决方案,以提升系统性能和可扩展性。
|
5月前
|
彻底革新你的数据库操作体验!Micronaut数据访问技巧让你瞬间爱上代码编写!
【9月更文挑战第10天】Java开发者们一直在寻找简化应用程序与数据库交互的方法。Micronaut作为一个现代框架,提供了多种工具和特性来提升数据访问效率。本文介绍如何使用Micronaut简化数据库操作,并提供具体示例代码。Micronaut支持JPA/Hibernate、SQL及NoSQL(如MongoDB),简化配置并无缝集成。通过定义带有`@Repository`注解的接口,可以实现Spring Data风格的命名查询。
108 6
C#一分钟浅谈:使用 ADO.NET 进行数据库访问
【9月更文挑战第3天】在.NET开发中,与数据库交互至关重要。ADO.NET是Microsoft提供的用于访问关系型数据库的类库,包含连接数据库、执行SQL命令等功能。本文从基础入手,介绍如何使用ADO.NET进行数据库访问,并提供示例代码,同时讨论常见问题及其解决方案,如连接字符串错误、SQL注入风险和资源泄露等,帮助开发者更好地利用ADO.NET提升应用的安全性和稳定性。
460 6
PolarDB Proxy配置与优化:提升数据库访问效率
【9月更文挑战第6天】PolarDB是阿里云推出的高性能分布式关系型数据库,PolarDB Proxy作为其关键组件,位于客户端与PolarDB集群间,负责SQL请求的解析与转发,并支持连接池管理、SQL过滤及路由规则等功能。本文详细介绍了PolarDB Proxy的配置方法,包括连接池、负载均衡和SQL过滤设置,并探讨了监控调优、缓存及网络优化策略,以帮助提升数据库访问效率。
103 1
Play Framework惊天秘密:如何让异常处理优雅得像芭蕾舞?
【8月更文挑战第31天】在Web应用开发中,异常处理至关重要,直接影响应用稳定性和用户体验。Play Framework作为轻量级Java Web框架,提供了基于Scala偏函数的灵活异常处理机制。通过实现`HttpErrorHandler`接口可定义全局异常逻辑,而在控制器中使用try-catch块则能捕获特定异常。定义自定义异常类也有助于表示特定错误情况。最佳实践包括保持处理一致性、提供有用错误信息、记录日志及分类处理异常。掌握这些技巧,能使Play应用更健壮可靠。
81 1

云存储

+关注
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等