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)即可,相比逐条写入,批量写入能大幅减少网络交互次数,提升整体吞吐量。参考2

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)来实现更精细的过滤。参考2

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)可以在服务端提前过滤,避免传输无用数据。参考2

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

相关推荐

  • 共享带宽和独享带宽哪个好?如何选择更划算?

    对于追求业务稳定性、数据安全性和访问体验的企业级用户,独享带宽是绝对的首选;而对于预算有限、业务处于初期探索阶段或对网络波动容忍度较高的个人及中小型项目,共享带宽则具备更高的性价比, 选择的核心在于“业务匹配度”而非单纯的技术优劣,企业在决策时应基于自身的业务规模、流量模型及预算约束进行综合考量,在服务器托管与……

    2026年3月6日
    12400
  • 大带宽服务器跑直播推流配置怎么选?直播推流带宽计算公式

    CPU至少8核16线程,内存32GB起步,带宽选择50Mbps以上独享带宽,系统盘100GB SSD,数据盘500GB HDD,以保障高清直播流畅不卡顿,直播行业对服务器性能的要求早已超越了简单的“能跑起来”阶段,2026年的直播生态更加精细化,无论是游戏直播、电商带货还是高清视频会议,观众对画质的期待都在提升……

    2026年6月16日
    3010
  • 独立站用哪个建站平台好?跨境电商独立站建站平台推荐

    2026年跨境电商独立站建站,Shopify依然是综合体验与生态最成熟的全球首选,而Shopline和店匠则更适合深耕本土化运营与亚洲市场的新手卖家,选择建站平台不仅仅是选一个工具,更是选择你的生意底盘,在2026年的今天,跨境电商的门槛看似降低,实则对运营效率、移动端体验和本地化支付的要求达到了前所未有的高度……

    2026年6月22日
    2600
  • 广州bgp高防ip配置怎么做,广州bgp高防ip配置教程

    广州BGP高防IP配置的核心价值在于实现“极速访问”与“海量防御”的完美融合,通过智能切换线路与精准清洗策略,确保业务在遭受DDoS攻击时仍能稳定运行,是金融、游戏及企业级应用保障业务连续性的首选方案, 广州BGP高防IP配置的核心逻辑与架构配置高防IP并非简单的IP地址替换,而是一个构建在BGP智能路由技术与……

    2026年4月1日
    10400
  • 服务器经常卡顿?可能是带宽问题,服务器带宽不足会导致卡顿吗

    服务器出现频繁卡顿,核心症结往往不在于硬件配置不足,而是带宽资源遭遇瓶颈,当业务流量激增、遭遇突发攻击或带宽选型错误时,网络通道的拥堵会直接导致数据传输延迟、丢包率飙升,最终表现为服务器响应迟缓甚至服务不可用,解决服务器卡顿问题,必须优先排查带宽质量与容量,精准匹配业务需求,才能从根本上保障业务的连续性与流畅度……

    2026年3月5日
    12900
  • 企业带宽选多大?企业宽带多少兆合适?

    企业带宽选多大?直接参考这个核心公式:并发终端数 × 20% × 单终端保障带宽 = 企业实际所需带宽,这是经过大量实战验证的带宽估算黄金法则,企业无需为昂贵的闲置资源买单,也不应因带宽瓶颈影响业务效率,掌握这一公式,结合业务场景进行微调,即可实现成本与性能的最优平衡, 为什么大多数企业都选错了带宽?很多企业在……

    2026年3月6日
    13900
  • 如何免费给域名生成SSL证书?域名申请SSL证书方法

    给域名生成SSL证书最直接的方法是通过域名注册商或云服务商的控制台申请免费或付费证书,安装过程通常只需在服务器配置文件中指向证书文件并重启服务即可实现全站HTTPS加密,在2026年的互联网环境下,搜索引擎对网站安全性的权重评估达到了前所未有的高度,百度算法早已将HTTPS作为基础收录门槛,这意味着没有SSL证……

    2026年6月21日
    2400
  • 虚拟机快照保存失败怎么回事,如何正确保存快照数据?

    虚拟机快照保存失败,通常源于存储空间不足、快照文件损坏或虚拟机处于特殊状态;正确做法是先清理存储、检查磁盘格式,再通过图形界面或命令行按顺序创建快照,快照保存失败的常见原因排查快照不是简单的“复制粘贴”,它依赖于宿主机与虚拟机之间的联动,当你点击“保存快照”却收到报错时,先别急着重试,按下面几个方向逐一排除,存……

    2026年9月4日
    200
  • WordPress外贸网站邮件营销插件怎么选?哪个插件好用

    对于2026年的WordPress外贸建站者而言,ActiveCampaign与Mailchimp依然是构建自动化营销闭环的首选,但针对特定预算和复杂度的场景,FluentCRM和Brevo提供了更具性价比或功能深度的替代方案,外贸业务的核心在于客户生命周期管理,而电子邮件营销(EDM)是转化率最高的渠道之一……

    2026年6月20日
    3100
  • 美国Krypt服务器的CDN技术服务介绍

    美国Krypt服务器通过其底层网络架构与全球CDN节点的深度耦合,为跨境业务提供了低延迟、高可用的加速服务,是解决海外访问卡顿和丢包问题的有效技术方案,在数字化全球化的今天,服务器选址不再仅仅是硬件的堆砌,而是网络通路的博弈,对于许多面向北美或全球用户的企业而言,选择美国Krypt服务器往往是因为其充沛的带宽资……

    2026年6月18日
    4500

发表回复

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