HBase数据读写示例程序如何编写,HBase存储原理是什么

HBase数据读写示例程序的核心操作是Put和Get,通过Java API可以快速实现数据的写入和读取,掌握这些示例代码是HBase开发的基础。

HBase数据读写示例程序:Put与Get操作详解

HBase的读写操作分别对应Put和Get两个核心类,Put负责写入数据,Get负责查询数据,下面通过具体示例展示从单行操作到批量处理的基本用法。

16_5.3.5 读写HBase数据(配置Spark并编写程序读取HBase数据)
加载中
16_5.3.5 读写HBase数据(配置Spark并编写程序读取HBase数据)

Put写入示例:从单行到批量

单行写入是最简单的模式,先构造一个Put对象,指定行键,然后通过addColumn方法添加列族、列名和值,最后调用Table的put方法提交。

Put put = new Put(Bytes.toBytes("rowKey1"));
put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("name"), Bytes.toBytes("Alice"));
put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("age"), Bytes.toBytes("30"));
table.put(put);

当需要写入多条数据时,建议使用批量写入,将多个Put对象放入List中,调用table.put(List)即可,相比逐条写入,批量写入能大幅减少网络交互次数,提升整体吞吐量

List<Put> puts = new ArrayList<>();
puts.add(new Put(Bytes.toBytes("row1")).addColumn(/.../));
puts.add(new Put(Bytes.toBytes("row2")).addColumn(/.../));
table.put(puts);

在HBase Java API写入示例中,批量操作是常规推荐做法,需要注意,如果批量中某条失败,整批是否会回滚取决于配置,通常建议将一批数据控制在合理大小,避免占用过多内存。

Get读取示例:精确查询与范围扫描

精确查询使用Get对象,指定行键即可获取整行数据,也可以指定列族和列来缩小返回量。

Get get = new Get(Bytes.toBytes("rowKey1"));
get.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("name"));
Result result = table.get(get);
byte[] value = result.getValue(Bytes.toBytes("cf"), Bytes.toBytes("name"));

HBase数据读写示例程序如何编写,HBase存储原理是什么

范围扫描则使用Scan对象,通过设置起始行和结束行,可以获取一个区间的多行数据,Scan还支持过滤器(如PrefixFilter、FilterList)来实现更精细的过滤。

Scan scan = new Scan();
scan.setStartRow(Bytes.toBytes("row1"));
scan.setStopRow(Bytes.toBytes("row3"));
ResultScanner scanner = table.getScanner(scan);
for (Result r : scanner) {
    // 处理每一行
}
scanner.close();

扫描后必须关闭ResultScanner,否则会占用RegionServer资源,这是HBase读写操作代码示例中容易忽略的细节。

HBase存储示例:批量写入与读取优化

实际生产环境中,单条读写往往无法满足性能要求,批量写入和读取优化是HBase存储示例中最常被关注的部分,直接关系到系统吞吐量。

批量写入:提升吞吐量的关键

除了上述table.put(List)方式,还可以使用BufferedMutator,它内部维护一个写缓冲区,当缓冲区满或达到一定时间后自动批量提交,适合持续写入的场景。

BufferedMutator mutator = connection.getBufferedMutator(tableName);
mutator.mutate(put);
mutator.flush(); // 手动刷出

批量写入可以显著减少RPC调用次数,据统计,当数据量较大时,批量写入的吞吐量可能是逐条写入的5倍以上(具体数值因环境而异),但也要注意,批量大小不宜过大,否则可能触发RegionServer的写压力,导致RegionTooBusyException,建议根据Row大小和网络条件调整,一般每批1000-5000条较为常见。

读取优化:合理使用Scan缓存

Scan默认每次只从服务器拉取一行,导致大量小包交互,通过setCaching()设置缓存行数,可以一次拉取多行,减少网络往返。

scan.setCaching(500); // 一次拉取500行

缓存行数越大,查询越快,但会占用更多客户端内存。

HBase数据读写示例程序如何编写,HBase存储原理是什么

行业共识认为,对于RowKey均匀分布的场景,设置1000左右的缓存是一个平衡点,使用过滤器(如SingleColumnValueFilter、PageFilter)可以在服务端提前过滤,避免传输无用数据。

HBase读写操作代码示例:Java API 实战

下面是一个完整的示例,从创建表到写入数据,再到读取和删除,涵盖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;
public class HBaseDemo {
    public static void main(String[] args) throws Exception {
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "localhost:2181");
        try (Connection conn = ConnectionFactory.createConnection(conf);
             Admin admin = conn.getAdmin()) {
            TableName tableName = TableName.valueOf("test_table");
            // 创建表
            if (!admin.tableExists(tableName)) {
                TableDescriptor desc = TableDescriptorBuilder.newBuilder(tableName)
                        .setColumnFamily(ColumnFamilyDescriptorBuilder.of("cf"))
                        .build();
                admin.createTable(desc);
            }
            // 写入数据
            try (Table table = conn.getTable(tableName)) {
                Put put = new Put(Bytes.toBytes("row1"));
                put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col1"), Bytes.toBytes("value1"));
                table.put(put);
                // 读取数据
                Get get = new Get(Bytes.toBytes("row1"));
                Result result = table.get(get);
                System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("cf"), Bytes.toBytes("col1"))));
            }
            // 删除表(可选)
            // admin.disableTable(tableName);
            // admin.deleteTable(tableName);
        }
    }
}

HBase数据读写示例程序如何编写,HBase存储原理是什么

代码中使用了try-with-resources自动关闭资源,这是推荐做法,Connection是重量级对象,应全局复用,不要每次操作都创建。

常见错误与调试

  • ZooKeeper连接失败:检查hbase.zookeeper.quorum配置是否正确,端口是否开放。
  • RegionTooBusyException:通常由写入超出RegionServer处理能力引起,可增大写缓冲区或增加Region数量。
  • Scan没有结果:检查StartRow和StopRow的设置,注意行键是字节数组,比较是字典序。
  • 表不存在异常:确认表名正确,且已经创建。

通过上述示例,你可以快速掌握HBase数据读写的基本方法,在实际项目中,结合批量操作、缓存优化和合理的表设计,能更好地发挥HBase在大数据场景下的存储优势。

HBase数据读写示例程序常见问题解答

问题1:HBase读写示例中如何连接HBase集群?

需要配置ZooKeeper地址,通过HBaseConfiguration创建Configuration对象,然后调用ConnectionFactory.createConnection获取连接,示例代码中已包含具体配置方式,注意Connection是线程安全的,应在整个应用生命周期内复用。

问题2:批量写入时出现RegionTooBusyException怎么办?

可以尝试增大写缓冲区大小(通过BufferedMutator的setWriteBufferSize),或增加客户端重试次数,如果问题持续,说明RegionServer写入压力过大,建议通过预分区或增加RegionServer实例来分摊负载。

问题3:使用Scan扫描时如何设置缓存?

通过Scan.setCaching(int)设置一次远程调用返回的行数,默认值1,建议根据行的大小和可用内存调整,通常设置100到2000之间,注意,扫描完成后需要调用ResultScanner.close()释放资源,否则可能导致RegionServer端连接泄漏。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/532630.html

(0)
html播放音乐地址怎么用?,怎么设置?
上一篇 2026年7月31日 03:34
HTTPS证书购买和管理有哪些注意事项,哪个平台便宜
下一篇 2026年7月31日 03:35

相关推荐

  • InMotionHosting虚拟主机支持哪些邮件功能?如何设置企业邮箱

    InMotion Hosting的虚拟主机套餐全面集成了基于cPanel的Webmail、基于Roundcube的现代Web邮件客户端、专业的MX记录配置支持以及自动垃圾邮件过滤功能,能够满足从个人博客到中小企业官网的多样化邮件收发与管理需求,对于许多刚开始搭建网站的用户来说,拥有一个专属的域名邮箱(如 nam……

    2026年6月24日
    1510
  • html5手机网站怎么制作?html5手机网站开发费用多少

    HTML5手机网站是2026年移动端流量获取的核心载体,它通过一套代码适配所有屏幕,彻底解决了传统多端开发成本高、维护难的问题,是中小企业实现移动转型的必选项,在2026年的数字营销环境中,用户的手指比鼠标更频繁地触碰屏幕,如果你还在为不同手机型号开发不同的网页版本,或者依赖跳转式的wap页面,那么你的业务正在……

    2026年6月8日
    4300
  • 服务器租用要注意什么?租用服务器需要注意哪些陷阱

    服务器租用的核心在于“稳”与“安”,而非单纯的低价,选择服务器租用,本质上是在买服务、买售后、买硬件的稳定性,而非仅仅买一台机器, 过来人的经验告诉我们,价格战背后的隐形陷阱往往比性能参数更致命,真正靠谱的服务商,应当具备IDC/ISP资质,提供全天候人工运维支持,并承诺硬件故障的快速响应机制,对于企业级用户而……

    2026年3月5日
    11800
  • 带宽流量怎么计算?带宽流量计算公式是什么?

    带宽流量的计算核心在于明确“带宽”与“流量”的换算关系,即:流量 = 带宽 × 时间,在实际应用中,需根据业务场景选择合适的计算方式,并考虑单位换算(如Mbps与MB的转换)、峰值与均值差异、协议开销等因素,以下从基础概念、计算方法、优化策略及案例展开分析,基础概念:带宽与流量的定义带宽(Bandwidth)指……

    2026年3月8日
    16700
  • Debian怎么安装PHP Composer?Composer安装教程

    在Debian系统上安装PHP Composer,最稳定且推荐的方式是通过官方脚本下载并全局配置,这能确保你获得最新的依赖管理功能,避免手动编译带来的兼容性问题,Composer是PHP生态中不可或缺的工具,它解决了依赖管理的痛点,对于许多开发者而言,如何在Linux环境下高效配置这一工具,直接关系到项目的构建……

    2026年6月20日
    2400
  • html链接网站怎么建立?网站外链建设对SEO排名有什么影响

    建立高质量HTML链接网站的核心在于获取高权重外链、优化锚文本相关性以及保持链接生态的自然增长,这是提升搜索引擎排名的关键路径,在2026年的搜索引擎生态中,单纯依靠堆砌关键词或购买廉价链接已无法获得稳定的排名优势,百度算法对链接质量的评估更加精细,侧重于链接来源的权威性、上下文的相关性以及用户行为的真实性,对……

    2026年6月5日
    3100
  • HP服务器U盘启动不了怎么办?电脑开机U盘启动项找不到

    HPE服务器无法通过U盘启动的核心原因通常在于BIOS中Legacy/UEFI引导模式设置冲突、USB接口未被识别为第一启动项,或U盘本身未制作成符合服务器硬件要求的启动介质,需优先检查BIOS设置与介质兼容性,在数据中心运维或IT基础设施维护场景中,HPE ProLiant系列服务器因硬件架构复杂,其启动逻辑……

    2026年6月7日
    2800
  • 服务器带宽知识这篇讲透了吗?服务器带宽怎么看才正确

    服务器带宽决定了网站和应用的生死存亡,核心结论在于:带宽并非越大越好,而是越“匹配”越好,选择带宽的本质,是在成本、速度与并发能力之间寻找最优解,很多企业盲目追求大带宽,结果造成资源浪费;或者为了省钱选择低质带宽,导致业务高峰期宕机,真正专业的服务器带宽配置,必须基于精确的流量模型测算,并结合业务类型(如视频……

    2026年3月6日
    13000
  • HTML5网站建设公司哪家好?如何选择靠谱的建站服务商

    2026年选择HTML5网站建设公司时,核心在于评估其响应式适配能力、加载速度优化水平及后续维护成本,建议优先考察具备全栈开发经验且报价透明的服务商,避免陷入低价陷阱,随着移动互联网流量红利见顶,企业官网已不再仅仅是展示窗口,而是转化客户的核心阵地,HTML5技术因其跨平台兼容性、良好的交互体验以及对SEO的友……

    2026年6月12日
    5100
  • WordPress网站备份方法是什么?如何设置自动备份

    WordPress网站备份的核心在于“手动备份”用于深度定制与迁移,“自动备份”用于日常容灾,二者结合才能构建完整的数据安全防线,建议新手从自动备份插件入手,老手则需掌握手动数据库与文件的双重导出,数据是网站的灵魂,一旦丢失,不仅心血付诸东流,更可能面临SEO排名断崖式下跌的风险,许多站长在遭遇黑客攻击或服务器……

    2026年6月19日
    3000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注