HBase 典型应用场景与阿里实践

HBase适用于海量数据(亿级以上)、高写入(百万级/秒)和按主键查询的场景,典型应用包括:

  1. 日志/事件存储(用户行为日志)
  2. 时序数据(IoT设备监控)
  3. 用户画像(动态标签)
  4. 订单轨迹(状态变更记录)
  5. 实时特征(推荐系统)

阿里巴巴深度应用HBase:

  • 交易历史:采用"反转用户ID_反转时间戳"的Rowkey设计,支持双十一万亿级请求
  • 用户画像:通过BulkLoad实现千万级标签5分钟更新
  • 混合推拉模型支撑信息流推荐
  • 创新性优化包括热点打散、冷热分离和Group隔离

典型特征:数据量超百亿、写入密集型、简单查询为主、列结构动态变化。与MySQL等相比,HBase在大数据量场景下展现显著优势。

HBase 实际应用场景举例


一、HBase 适合做什么?(核心判断标准)

场景特征 适合HBase 不适合HBase
数据量 亿级~千亿级 万级以下(用MySQL)
查询方式 主要按rowkey查 复杂SQL多表JOIN
写入速度 每秒百万级写入 每秒几千写入
数据变化 追加写入多,更新少 频繁更新/事务
列结构 列经常变化 列固定不变

二、典型应用场景(5大类)

场景1:日志/事件数据存储

行业: 互联网、物联网、运维监控

bash

复制代码
# 场景描述
用户行为日志、APP埋点、服务器日志、设备上报数据
每天产生几十亿条数据,需要存储和查询

# HBase优势
- 写入快:每秒百万级写入
- 扩展好:加机器就能存更多
- 按时间查询快:rowkey设计成"设备ID_时间戳"

# 实际案例
某APP用户行为日志:
rowkey = userId_reversedTimestamp
列簇 = behavior
  - page_view: 浏览页面
  - click: 点击位置
  - duration: 停留时长

查询示例:

bash

复制代码
# 查用户123最近100条行为
scan 'user_log', {STARTROW => '123_', LIMIT => 100}

场景2:时序数据(IoT/监控)

行业: 工业物联网、智能家居、车联网

bash

复制代码
# 场景描述
10万台设备,每5秒上报温度、湿度、电量等
每天数据量:10万 × 17280次 ≈ 17亿条

# HBase优势
- 海量时序数据存储
- 按设备ID+时间范围查询快
- 支持TTL自动过期(保留最近30天)

# 实际案例
智能电表数据:
rowkey = 电表ID_反转时间戳
列簇 = metrics
  - voltage: 电压
  - current: 电流
  - power: 功率
  - temperature: 温度

查询示例:

bash

复制代码
# 查电表A1001最近24小时数据
scan 'meter_data', {
    STARTROW => 'A1001_9223370000000000000',
    ENDROW => 'A1001_9223379999999999999'
}

场景3:用户画像/标签系统

行业: 电商、广告、推荐系统

bash

复制代码
# 场景描述
每个用户有几百个标签(年龄、兴趣、购买力、活跃度...)
标签经常新增、修改,2亿用户

# HBase优势
- 列动态增加:新增标签不用改表结构
- 单行读取快:查一个用户的所有标签O(1)
- 适合稀疏数据:用户A有100个标签,用户B只有10个

# 实际案例
用户画像表:
rowkey = userId
列簇 = basic(基础信息)
  - age: 年龄
  - gender: 性别
  - city: 城市
列簇 = interest(兴趣标签)
  - sport: 是否喜欢运动
  - tech: 是否喜欢科技
  - fashion: 是否喜欢时尚
列簇 = behavior(行为标签)
  - avg_order_price: 平均订单金额
  - last_login: 最后登录时间

查询示例:

bash

复制代码
# 查用户123的所有标签
get 'user_profile', '123'

# 查用户123的兴趣标签
get 'user_profile', '123', 'interest'

场景4:消息/订单/状态记录

行业: 电商、物流、金融

bash

复制代码
# 场景描述
物流轨迹:一个订单几十条状态变更(已下单→已支付→已发货→派送中→已签收)
查询需求:查订单的完整轨迹

# HBase优势
- 时间戳版本:自动记录每次状态变更
- 查询历史:可以看到订单的完整状态变化

# 实际案例
物流订单轨迹:
rowkey = 订单号
列簇 = track
  - status: 状态(有多个版本)
  
插入数据:
put 'order_track', 'OD123', 'track:status', '已下单'    # 版本1
put 'order_track', 'OD123', 'track:status', '已支付'    # 版本2
put 'order_track', 'OD123', 'track:status', '已发货'    # 版本3

# 查完整轨迹
get 'order_track', 'OD123', {COLUMN => 'track:status', VERSIONS => 10}
# 返回:已发货 → 已支付 → 已下单

场景5:推荐/机器学习特征存储

行业: 推荐系统、广告、风控

bash

复制代码
# 场景描述
离线计算好的用户特征、商品特征需要在线服务实时读取
要求:毫秒级响应、高并发

# HBase优势
- 随机读取快(毫秒级)
- 高并发支持好
- 列式存储:只读需要的列

# 实际案例
商品特征表:
rowkey = 商品ID
列簇 = static(静态特征)
  - category: 类目
  - brand: 品牌
  - price: 价格
列簇 = dynamic(动态特征)
  - ctr_7d: 7天点击率
  - sales_30d: 30天销量
  - hot_score: 热度分(每小时更新)

# 实时推荐:读商品特征
get 'item_features', 'ITEM001', 'dynamic:ctr_7d'

三、场景 vs 技术选型对照表

场景 HBase MySQL Redis ES 原因
用户日志 🟡 数据量大,写入快
IoT时序数据 🟡 海量+时间范围查询
用户画像 🟡 🟡 列动态+单行读
订单轨迹 🟡 版本特性好用
实时特征 高并发+毫秒级
商品信息 数据量小+复杂查询
报表统计 需要聚合/多表JOIN
  • ✅ 首选 | 🟡 可选 | ❌ 不推荐

四、知名公司实际用法

公司 用途 规模
阿里巴巴 淘宝/天猫交易历史、用户画像 千亿级
小米 智能设备数据上报、存储 亿级设备
滴滴 行程轨迹、司机行为数据 百亿级
今日头条 用户行为、推荐特征 千亿级
美团 订单状态、物流轨迹 百亿级
中国移动 通话记录、上网日志 万亿级

五、一句话判断:用不用HBase?

text

复制代码
问自己3个问题:

1. 数据量超过10亿吗?
   否 → 考虑MySQL
   是 → 继续

2. 查询主要是按主键吗?(不是多表JOIN)
   否 → 考虑ES或ClickHouse
   是 → 继续

3. 列会经常变化吗?
   否 → 考虑Hive
   是 → HBase ✅

六、面试回答模板

面试官:HBase主要用在哪些场景?

HBase主要用在三种场景:

第一,海量日志数据。比如用户行为日志每天几十亿条,HBase写入快、扩展好,按用户和时间查很快。

第二,用户画像和标签系统。用户标签经常新增,用MySQL需要频繁改表结构,HBase列动态增加就很方便。

第三,时序数据。比如IoT设备上报数据,按设备ID和时间范围查询是典型场景。

举例来说,淘宝的用户交易历史就是存HBase的,几千亿条数据,查一个用户的订单很快。

知名公司 HBase 实际用法详解


一、阿里巴巴(淘宝/天猫)

维度 说明
业务场景 交易历史、用户画像、购物车、收藏夹、评价系统
数据量级 千亿级记录,PB级存储
读写特点 写入峰值:每秒千万级;读取:百万级QPS
具体用途 • 用户订单记录(按时间倒序) • 商品浏览历史 • 用户实时画像标签 • 购物车临时数据 • 优惠券领取记录
Rowkey设计 userId_reversedTimestamp(查用户订单) buyerId_sellerId_timestamp(查买卖双方交易)
集群规模 上万台服务器,全球多机房部署
公开资料 阿里云HBase服务底层就是基于HBase优化

典型查询:

bash

复制代码
# 查用户最近100条订单(按时间倒序)
scan 'order', {
    STARTROW => '用户ID_',
    LIMIT => 100
}

二、小米

维度 说明
业务场景 小米手环、智能家居设备数据上报
数据量级 5亿+设备,每天万亿级数据点
读写特点 写入:每秒数亿数据点;读取:按设备和时间范围查
具体用途 • 手环心率、步数、睡眠数据 • 智能插座用电数据 • 空气净化器PM2.5数据 • 扫地机器人轨迹数据
Rowkey设计 设备ID_反转时间戳(最新数据排前面)
关键配置 TTL自动过期(只保留30天),节省存储

典型查询:

bash

复制代码
# 查设备最近24小时数据
scan 'device_metrics', {
    STARTROW => '设备ID_9223370000000000000',
    ENDROW => '设备ID_9223379999999999999'
}

三、滴滴出行

维度 说明
业务场景 行程轨迹、司机行为、订单状态、乘客匹配
数据量级 每天3000万+订单,轨迹点百亿级
读写特点 写入:持续写入GPS点;读取:查司机/乘客行程
具体用途 • 司机行驶轨迹(实时+历史) • 订单状态变更记录(利用timestamp版本) • 司机端行为日志 • 乘客取消订单记录
Rowkey设计 司机ID_订单ID_时间戳 订单ID_反转时间戳
技术亮点 用HBase版本特性存订单状态变更历史

典型查询:

bash

复制代码
# 查订单完整状态变更历史
get 'order_status', '订单ID', {VERSIONS => 20}

四、字节跳动(今日头条/抖音)

维度 说明
业务场景 用户行为、推荐特征、视频元数据、评论点赞
数据量级 日活10亿+,用户行为日志每天千亿级
读写特点 写入:埋点数据持续涌入;读取:推荐引擎高并发读
具体用途 • 用户点击、滑动、停留时长(训练推荐模型) • 用户实时特征(在线服务读取) • 视频基础信息(标题、时长、作者) • 用户点赞/评论/转发记录
Rowkey设计 userId_反转时间戳(用户行为) userId_特征类型(用户画像) 视频ID_属性(视频信息)
集群规模 数千台服务器,支撑毫秒级推荐响应

典型查询:

bash

复制代码
# 推荐引擎读用户特征(毫秒级)
get 'user_features', '用户ID'

# 读视频信息
get 'video_info', '视频ID'

五、美团

维度 说明
业务场景 订单状态、骑手轨迹、商家评价、物流追踪
数据量级 每天5000万+订单,骑手轨迹点百亿级
读写特点 写入:订单状态频繁更新;读取:用户/商家查订单
具体用途 • 订单状态机(已支付→商家接单→骑手取餐→配送中→已完成) • 骑手配送轨迹 • 商家实时订单列表 • 用户历史订单查询
Rowkey设计 用户ID_订单ID(用户视角) 商家ID_订单ID(商家视角) 订单ID_时间戳(订单详情)
技术亮点 订单状态用多版本存状态变更历史,便于客诉排查

典型查询:

bash

复制代码
# 商家查看今日订单
scan 'merchant_orders', {
    STARTROW => '商家ID_20250529',
    ENDROW => '商家ID_20250530'
}

# 排查订单状态变更
get 'order_track', '订单ID', {VERSIONS => 50}

六、中国移动

维度 说明
业务场景 通话记录、短信记录、上网日志、用户套餐
数据量级 10亿+用户,每天万亿级话单记录
读写特点 写入:每日峰值极高;读取:用户查详单、运营商分析
具体用途 • 语音通话详单 • 短信发送记录 • 4G/5G上网日志 • 套餐变更历史 • 流量使用明细
Rowkey设计 手机号_反转时间戳(查用户通话记录) 手机号_日期_业务类型(分业务查询)
存储策略 • 3个月内数据存HBase(在线查询) • 3个月以上存Hive冷存储

典型查询:

bash

复制代码
# 用户查最近1个月通话记录
scan 'call_records', {
    STARTROW => '138xxxx_20250501',
    ENDROW => '138xxxx_20250601'
}

七、快手

维度 说明
业务场景 社交关系、粉丝列表、关注列表、消息推送
数据量级 数亿用户,社交关系千亿级
读写特点 写入:用户关注/取关频繁;读取:粉丝列表频繁查询
具体用途 • 关注关系存储 • 粉丝列表 • 双向好友判断 • 消息推送记录
Rowkey设计 用户ID_f_关注用户ID(关注列表) 用户ID_fans_粉丝用户ID(粉丝列表) min(A,B)_max(A,B)(双向关系)
技术亮点 用HBase存超大粉丝列表,刷抖音/快手时拉取粉丝就是读HBase

典型查询:

bash

复制代码
# 判断A是否关注B
get 'follows', '用户A_f_用户B'

# 查用户A的所有关注
scan 'follows', {STARTROW => '用户A_f_', ENDROW => '用户A_f_z'}

# 查用户A的粉丝列表
scan 'followers', {STARTROW => '用户A_fans_', ENDROW => '用户A_fans_z'}

八、银行/金融行业

维度 说明
业务场景 交易流水、风控记录、对账数据、合规审计
数据量级 千万级用户,流水万亿级
读写特点 写入:交易实时写入;读取:用户查流水、风控查行为
具体用途 • 账户交易流水 • 用户操作日志(合规审计) • 风控规则命中记录 • 反欺诈行为图谱
Rowkey设计 账号_反转时间戳(查流水) 身份证号_业务类型(用户画像) 交易ID(唯一定位)
安全要求 数据加密、审计日志、多副本容灾

典型查询:

bash

复制代码
# 用户查近3个月流水
scan 'transaction', {
    STARTROW => '账号_20250301',
    ENDROW => '账号_20250601'
}

# 风控查用户行为
scan 'risk_log', {
    STARTROW => '身份证号_',
    LIMIT => 100
}

九、完整对比总结表

公司 核心场景 数据量级 Rowkey特点 特别说明
阿里巴巴 交易历史、画像 千亿级 userId_反转时间戳 全球最大HBase集群之一
小米 IoT设备数据 万亿/天 设备ID_反转时间戳 TTL自动过期
滴滴 轨迹、订单 百亿级 司机ID_订单ID_时间戳 版本存状态变更
字节跳动 用户行为、特征 千亿级 userId_反转时间戳 支撑推荐引擎
美团 订单、骑手轨迹 百亿级 用户ID_订单ID 多视角存订单
中国移动 通话/上网日志 万亿级 手机号_反转时间戳 热冷数据分离
快手 社交关系 千亿级 用户ID_f_关注ID 粉丝列表超大
银行/金融 交易流水 万亿级 账号_反转时间戳 高安全要求

十、面试回答模板

面试官:哪些公司在用HBase?什么场景?

很多头部公司在用:

阿里用HBase存用户交易历史和画像,每天千亿级数据写入。

滴滴用HBase存司机轨迹和订单状态,利用多版本特性存状态变更历史。

字节用HBase存用户行为日志和实时特征,推荐引擎直接读。

小米用HBase存IoT设备上报数据,设备ID+时间戳做rowkey,按时间范围查很快。

共同点是:数据量极大(百亿级+)、写入频繁、查询主要是按主键或前缀扫描、列会动态变化

阿里巴巴 HBase 应用技术细节深度解析


一、发展历程与规模(你在杭州要知道的本土技术)

时间 里程碑 说明
2011年 毕玄引入HBase 从淘宝历史交易记录开始
2014年 天梧成为国内首位Committer 阿里开始深度回馈社区
2016年双11 百GB/秒读写 相当于全国人民每秒收发一条短信
2018年双11 2.4万亿次请求/天 单集群吞吐达千万级
至今 上万台服务器 22次/周的磁盘故障经验

你可能接触过的阿里产品底层都是HBase:

  • 淘宝/天猫订单历史

  • 支付宝账单

  • 菜鸟物流详情

  • 高德地图位置数据

  • 阿里妈妈广告点击流

二、核心场景1:交易历史库(淘宝/支付宝账单)

2.1 场景需求

需求 说明
数据量 万亿级记录,PB级存储
访问模式 99%是用户查自己的订单(按用户ID前缀扫描)
时间分布 近3个月热数据,3个月以上冷数据
查询延迟 P99 < 50ms

2.2 Rowkey设计(核心机密)

bash

复制代码
# 淘宝订单表的Rowkey设计
rowkey = 用户ID(反转) + 订单创建时间(反转)

# 具体例子
用户ID = 12345678
反转用户ID = 87654321
订单时间 = 2025-05-29 14:30:00 → 1700000000(时间戳)
反转时间 = 9223372036854775807 - 1700000000

最终rowkey = 87654321_9223370336854775807

为什么这样设计?

设计决策 原因 效果
用户ID在前 一个用户的所有订单连续存储 单次scan就能查出用户所有订单
用户ID反转 避免新用户ID集中写入同一个Region 写入负载均匀分散
时间戳反转 最新订单排在最前面 查最近N条订单无需扫全量
复合分隔符 清晰区分各段 支持前缀范围扫描

2.3 双十一峰值处理

text

复制代码
2016年双11:
- 写入:上百GB/秒
- 读取:上百GB/秒
- 总请求量:数万亿次/天[citation:1]

技术挑战:
1. 热点服务器:个别RegionServer被打爆
2. 复制延迟:跨机房数据同步跟不上
3. 磁盘故障:22次/周的硬件故障需要自动处理[citation:5]

2.4 阿里针对性的优化

优化1:热点打散 - 利用整个集群能力

java

复制代码
// 传统方式:热点服务器自己消化复制积压 ❌
// 阿里方案:空闲服务器帮忙消化积压HLog ✅
// 原理:打破"自生产自推送"的设计,让集群所有节点参与复制[citation:1]

优化2:冷热分离 - 成本降低90%

bash

复制代码
# 策略:
- 3个月内的热数据:SSD存储,高性能
- 3个月以上的冷数据:OSS归档,低成本(0.11元/GB/月)[citation:3]

# 查询透明化:
- 应用无感知,自动路由到热或冷
- 90%查询在热存储完成
- 年账单等全量查询访问冷存储[citation:3]

优化3:表级多链路复制

bash

复制代码
# 场景:单元化架构,多地多数据中心
- 上海集群 -> 北京集群 -> 深圳集群
- 按表维度控制复制流向
- 可视化链路监控,延迟秒级可见[citation:1]

三、核心场景2:用户画像与标签系统

3.1 数据规模

bash

复制代码
用户量:数亿
标签数:数千个(年龄、性别、兴趣、消费能力...)
每日更新:千万级用户标签变更

3.2 表结构设计

bash

复制代码
# 用户画像表
create 'user_profile', 
  'basic',      # 基础属性(年龄、性别、城市)
  'interest',   # 兴趣标签(运动、科技、时尚)
  'behavior',   # 行为特征(近30天活跃度、平均客单价)
  'algorithm'   # 算法打分(推荐分、风险分)

# Rowkey设计
rowkey = 用户ID(直接,不反转)

3.3 画像构建流程

text

复制代码
离线计算(每天凌晨)
    ↓
Spark分析用户行为日志
    ↓
计算出用户新的标签值
    ↓
BulkLoad批量加载到HBase(千万级数据5分钟完成)[citation:8]
    ↓
在线服务实时读取(毫秒级响应)

3.4 核心优化技术

技术1:BulkLoad(千万级更新神器)

bash

复制代码
# 传统方式:逐条put ❌
for user in users:
    put 'user_profile', user.id, 'interest:sport', score
# 问题:千万级需要几个小时

# 阿里方式:BulkLoad ✅
1. 离线生成HFile文件(与HBase底层存储格式一致)
2. 直接把HFile加载到Region
3. 千万级数据5-10分钟完成[citation:8]

技术2:RoaringBitmap(标签圈人利器)

bash

复制代码
# 场景:找出"既喜欢运动又喜欢科技的用户"
# 不用RoaringBitmap:JOIN两张千万级表 → 慢
# 用RoaringBitmap:位图交运算 → 毫秒级

bitmap_sport = 运动兴趣用户位图  # [1,0,1,0,1...]
bitmap_tech = 科技兴趣用户位图  # [1,1,0,0,1...]
result = bitmap_sport & bitmap_tech  # 位运算交集[citation:2]

技术3:Group隔离(大集群多租户)

bash

复制代码
# 场景:一个HBase集群服务多个业务
- 淘宝订单表和支付宝账单表在同一个集群
- 订单表双十一流量暴涨,不能影响支付宝

# 阿里方案:Group隔离
- 物理隔离:不同业务的RegionServer在不同Group
- 逻辑共享:底层HDFS存储共享[citation:5]

# 效果:
- 订单表打爆不影响支付宝
- 存储利用率提升(共享底层)
- 资源按需伸缩[citation:5]

四、核心场景3:Feeds流与推荐(信息流)

4.1 推拉模型选择

bash

复制代码
# 场景:大V发帖 → 推送给千万粉丝

# 拉模型(读放大)
- 粉丝刷Feed时实时拉取大V的帖子
- 每个粉丝刷一次读一次
- 适合:大V少,粉丝少

# 推模型(写放大)
- 大V发帖时,写入所有粉丝的收件箱
- 每个粉丝的收件箱里都有一份
- HBase基于LSM,写放大可接受[citation:4]

# 阿里策略:混合模型
- 普通用户:推模型(写放大,读效率高)
- 大V:拉模型+缓存(避免写爆炸)
- 动态调整:热点事件切换模型[citation:4]

4.2 推荐系统的实时特征存储

bash

复制代码
# 场景:用户刷淘宝推荐,需要实时读取用户特征
- 用户ID → 查用户兴趣标签
- 商品ID → 查商品相似特征
- 要求:毫秒级响应,十万级QPS

# Rowkey设计
推荐特征表:
- rowkey = 用户ID
- 列簇 = features
  - ctr_1h: 最近1小时点击率
  - price_tier: 价格敏感度
  - brand_pref: 品牌偏好

# 更新策略
- 实时更新:用户点击行为触发增量put
- 批量更新:每小时离线计算批量BulkLoad[citation:4]

五、高可用与稳定性(双十一0故障的秘诀)

5.1 三大稳定性问题及解法

问题 现象 阿里解法
内存碎片引发FGC RegionServer每2个月挂一次 BucketCache + SharedBucketCache,彻底解决FGC
大查询拖垮集群 数十个大查询并发,服务器假死 大请求识别+限流+主动终止
HDFS慢盘 单盘故障引起整个集群抖动 并发写2副本即算成功 + WAL自动换路径

5.2 大查询限流机制(源码级优化)

java

复制代码
// 阿里在RegionServer层面做的优化
if (request.estimatedMemory() > THRESHOLD) {
    markAsLargeRequest(request);  // 标记为大请求
    if (concurrentLargeRequests > MAX_LIMIT) {
        throttling(request);  // 限流
    }
}
// 客户端超时后,服务端主动终止大查询
// 解决了支付宝账单热点查询的性能波动[citation:5]

5.3 高可用架构

text

复制代码
部署架构:
- 同城双机房:主备异步复制,秒级切换
- 异地多活:单元化部署,数据按单元流动

故障切换:
- ZK自动检测RegionServer故障(< 30秒)
- WAL重放恢复未刷盘数据
- 备集群提升为主(< 2分钟)

关键指标:
- 可用性:99.995%(双11期间)
- RTO:< 2分钟
- RPO:< 1秒(异步复制)[citation:1][citation:5]

六、阿里技术栈完整生态

七、总结:阿里HBase的独特价值

维度 社区HBase 阿里HBase
集群规模 几十台 单集群700+节点
可用性 99.9% 99.995%
单集群吞吐 万级 千万级
跨城复制延迟 分钟级 秒级
冷热分离 需自研 内置透明
大查询限流 不支持 内置

你在杭州,阿里就在身边。你现在学的HBase,正是支撑淘宝双十一的核心技术之一。


需要我继续展开某个技术细节吗?比如:

  • BucketCache如何解决内存碎片?

  • BulkLoad的具体操作步骤?

  • Group隔离的配置方式?

相关推荐
大帅点兵21 小时前
设计一个金融交易监控系统
大数据·clickhouse·flink·spark·kafka·hbase
abcy0712131 天前
HBase Region数据恢复详解
hbase
abcy0712131 天前
RegionServer 自动重启原因详解
hbase
r-t-H5 天前
从零开始搭建CDH-第十二章
linux·hive·spark·centos·hbase
阿坤带你走近大数据7 天前
Hbase的基本概念,基本用法及常见使用场景
大数据·数据库·hbase
zhojiew8 天前
使用Redis Stream订阅HUATUO发布SSE内核可观测性事件并进行AI分析的数据管道实践
运维·hbase·aws
o丁二黄o8 天前
上下文工程实战:用Gemini镜像站构建高效办公信息处理管线
zookeeper·oracle·hbase
旺仔Sec8 天前
HBase 分布式集群部署实战:从解压到启动的完整指南
数据库·分布式·hbase
zhojiew10 天前
在AWS中国区的EMR集群中实现基于向量语义搜索的HBase运维诊断系统
运维·hbase·aws