【请关注】hBase要用的顺畅的思路

玩楞一下HBase,要让这玩意儿在大数据量下跑得顺,索引和优化可都是实打实的硬活。

先说索引这块。HBase就认RowKey这个主索引,所有数据都按它排得明明白白。平时查数据,只要RowKey设计得好,直接就能定位到对应的Region,速度快得很。但RowKey要是拍脑袋瞎写,比如全按时间戳排序,那准得出大问题------数据全往一个Region挤,妥妥的热点,集群直接卡住。所以设计RowKey时,我一般会用哈希打散,再拼上业务ID或者时间戳,让数据均匀分布在各个RegionServer上。

遇到按其他字段查数据的需求,HBase可没现成的方案,得自己动手搞二级索引。简单点的办法是建个索引表,把要查的字段和RowKey对应起来存好,查的时候先扫索引表捞RowKey,再去主表捞数据。要是业务场景允许,也能把索引字段直接塞到主表的列族里,在单Region内快速查,不过这种方法扩展性差点。

再说说优化。数据存进HBase,列族划分得讲究。把常用的列扔到一个列族,查询时I/O开销能小一大截。存储这块,我一般会开Snappy压缩,压缩比和性能都过得去,磁盘空间能省下不少。Region这块门道也多,建表时就得根据数据量和访问模式提前分好区,比如按日期、按ID区间,避免后期数据倾斜。线上跑着跑着,要是发现某个RegionServer负载太高,Master会自动迁移Region,但有时候也得手动干预,做些调优。

缓存这块也是重点。BlockCache专门存热数据,MemStore负责写缓存。调参数时,我一般会根据服务器内存和读写比例,把BlockCache设成堆内存的30% - 40%,MemStore的刷盘阈值也得根据写入频率微调,刷得太勤影响性能,攒太多又怕宕机丢数据。

最后是查询优化。线上用Filter用得特别多,比如查某个用户的所有数据,直接用PrefixFilter按RowKey前缀筛,数据都不用全拉到客户端。遇到复杂计算,我会写协处理器扔到RegionServer上算,减少网络传输压力。总之,HBase这玩意儿得边用边调,才能让大数据跑得又快又稳!

相关推荐
阿狸猿31 分钟前
论 NoSQL 数据库技术及其应用
数据库·nosql
FBI HackerHarry浩38 分钟前
DataGrip2023.2.3默认保存的数据库和.sql文件在哪里?怎么修改默认路径?
数据库
袁小皮皮不皮39 分钟前
3.HCIP OSPF补充知识(优化版)
服务器·网络·数据库·网络协议·智能路由器
运筹vivo@1 小时前
Python ContextVar 底层机制与内存模型拆解
前端·数据库·python
志栋智能1 小时前
超自动化巡检:知识沉淀与团队协作的新载体
大数据·运维·网络·数据库·人工智能·自动化
syt_biancheng2 小时前
Redis初识
数据库·redis·缓存
cmes_love2 小时前
股票逐笔level2历史行情下载十档订单薄五档tick分钟下载分享
数据库·区块链
仙俊红2 小时前
SQL 调优需要掌握的知识
数据库·sql
fofantasy3 小时前
NSK LH12AN 微型导轨技术手册
运维·网络·数据库·经验分享·规格说明书
杨运交3 小时前
[032][缓存模块]基于Redis Bitmap的用户行为统计实战:签到与日活分析
数据库·redis·缓存