您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
HBase在人资数据预处理平台中的实践
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
HBase在人资数据预处理平台中的实践
自猿其说Tech
2021-05-06
IP归属:未知
476960浏览
计算机编程
数据库
# 背景 人资绩效系统数据预处理平台,负责接收所有上游业务量数据。具有数据量大、非结构化数据、更新单个业务量数据,查询性能要求高等特性。通常技术上可以选择OSS、MySql数据库、ES等存储方案。其中OSS云存储方案,查询性能与更新单个业务量数据上无法满足。MySql数据库如果每对接一种业务量创建一个表的方式,对于更新查询等方面复杂度较高,不利于系统扩展。而ES存储量与查询量都可以满足,但更新单个字段不够友好,且ES成本较高。 # 现状 技术选型时,充分考虑到人资数据预处理平台的特性,数据量大,数据非结构化,高性能、开源稳定等要求,选型HBase。 HBase是一个分布式的、面向列的开源数据库,它是一个适合于非结构化数据存储的数据库,它在Hadoop之上提供了类似于Bigtable的能力,同时又是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,同时HBase技术可在廉价PC Server上搭建起大规模结构化存储集群,性价非常高。 京东内部提供JDNosql即通过HBase搭建,参考文档 http://doc.nosql.jd.com/ # HBase适用场景 **对象存储**:不少的头条类、新闻类的的新闻、网页、图片存储在HBase之中,一些病毒公司的病毒库也是存储在HBase之中。 **时序数据**:HBase之上有OpenTSDB模块,可以满足时序类场景的需求。 **推荐画像**:特别是用户的画像,是一个比较大的稀疏矩阵,蚂蚁的风控就是构建在HBase之上。 **时空数据**:主要是轨迹、气象网格之类,滴滴打车的轨迹数据主要存在HBase之中,另外在技术所有大一点的数据量的车联网企业,数据都是存在HBase之中。 **消息/订单**:在电信领域、银行领域,不少的订单查询底层的存储,另外不少通信、消息同步的应用构建在HBase之上。 **Feeds流** :典型的应用就是xx朋友圈类似的应用。 # HBase基础概念 **命名空间**:类比MySql中数据库库名。 **表名**:类比MySql中表名。 **列族**:一组列的集合为列族。列族下的列可以N个。 **列名称**:存在列族下的单个列,列族下的名称。 **RowKey**:Hbase存储采用 key-value方式,RowKey就是Key,所有的修改,查询等操作都只能基于RowKey,必须唯一。 # HBase整体架构 <center>![](//img1.jcloudcs.com/developer.jdcloud.com/79d81816-e3ed-465f-9a4a-48bdabd2d63e20210506134532.png)</center> HBase由三种类型的服务器以主从模式构成 **Region Server**:负责数据的读写服务,用户通过与Region server交互来实现对数据的访问。每个Region服务器中包含最多1000个Region,每个Region里面包含了StartKey到EndKey的一个区间数据。 **HBase HMaster**:分组分配Region和操作DDL,在集群处于数据恢复或者动态调整时,监控所有Region Server的状态。 **ZooKeeper**:负责维护集群的状态(某台服务器是否在线,服务器之间数据的同步操作及Hmaster的选举等)。 # 集群与协同工作 Region Server,会通过心跳方式与Zookeeper保持连接,并创建一个临时节点,当无法监听到心跳时,会通知Zookeeper,同时删除临时节点,而HMaser会通过zookeeper得到Region Server服务器的状态,当服务器下线时,会进行数据恢复,容灾等操作。HMaster同样会同Zookeeper保持心跳,用于监控HMaster状态,当HMaster下线时,会通过选举方式,将HMaster集群中的一台机器设置成Active,其他机器设置成InActive状态,来保证整个集群的高可用性。 # 数据写入过程 1.HBase客户端发起Put请求时,会先将数据写入预写日志(WAL)中,将操作记录写入WAL末尾。WAL用于Region Server服务器崩溃时,恢复MemStore中数据,WAL存储在Hadoop的HDFS中。 2.数据在写入Wal后,会将数据先写入Region Server下Region中MemStore中(写入缓存,内存级别) 3.在写入MemStore成功后,反馈给客户端本次写入已经完成。 4.当MemStore达到一定量级时,会通过Flush方式,生成HFile,存入Hadoop的HDFS中。HFile在生成前,会在内存中对Key进行升序排序,将排序好的数据顺序写入HFile中,并在HFile中生成一个多级索引,还有一个尾部指针。 # 数据读取过程 1.客户端发起请求,从Zookeeper中获取一个叫MetaTable的元数据。注:如果本地有缓存会优先读取本地缓存。 2.客户端通过MetaTable,得知RowKey所有在的Region Server服务器得到Region位置。 3.客户端优先从Region中的BlockCache(读取缓存)中获取数据,如果BlockCache中不存在,会通过MemStore(写入缓存)中获取数据,如果还不存在,会通过HFile中读取,并将数据返回给客户端。 4.读取HFIle时,会通过尾部指针中布隆过滤区域与时间区域,可以快读定位RowKey是否在HFile文件当中。 5.HFile读取后,会将多级索引加载在BlockCache中,用于读加速 # 最佳实践 ## HBase主要特点(人资绩效数据预处理平台实践适配的特点) 1.HBase为分布式列式数据库,可以横向进行扩展,解决系统数据量大的问题。 2.HBase为列式存储数据库,一个列族下可以支持成百上千列,解决系统非结构化数据存储与更新单个列数据的问题。 3.HBase具备毫秒级读写,随机读写,实时读写,无线存储拓展,数据高可用,多级缓存,服务不中断,主备自动切换,异地双活等特性,解决系统对于性能,存储的问题。 4.HBase存储自带多种压缩算法,降低数据存储量。 5.HBase数据支持多版本,对修改的数据可以支持多个版本数据。 6.HBase自带数据有效期功能,对于长时间无需使用的数据,可以进行删除。 ## HBase缺点 1.HBase核心是Rowkey的设计,Rowkey需要保证唯一的同时还需要散列,所有查询全部需要经过Rowkey查询,因次需要在数据库或者ES中建立二级索引辅助搜索。 2.HBase为列式存储,无法根据单独的列进行查询,只能通过RowKey进行查询。 ## HBase注意事项 **1:数据热点问题以及解决方法** HBase每张表下默认会有10个Region,如果使用不正确会导致所有数据写入同一个Region服务器下,造成数据热点问题,解决数据热点问题一共需要注意两个方面。 第一方面是建表时(预分区建表),要根据自己的RowKey特性选择正确的分区规则,一共有三种方式,每种分区方式都不一样,在这里建议使用 HexStringSplit这种方式。 第二方面是RowKey的设计,需要保证唯一的同时尽量散列。人资侧采用雪花算法生成唯一ID,对唯一ID进行MD5转16进制加上反转后的唯一ID作为RowKey,可以将数据均匀的分散到多个Region中,避免数据热点问题。 **2:HBase批量获取数据大小建议** 对HBase进行批量查询时,将批量数据控制到100以内,超过后性能会下降非常明显。 **3:配额与限流** 申请HBase实例时需要注意,如申请时配额写成10000QPS,意味着这个实例下所有表的读+写每秒不能超过10000次,超过配额后,服务会报警超出配额,并会进行重试。当10000次不能满足要求时,可以申请提升配额或者改成批量操作,减少与服务器连接次数。 **4:单行数据大小限制** 单行不建议超过400KB,KV存储系统非对象存储系统。如果Value过大会导致处理性能直线下降表初始化后默认只能接受512KB大小的VALUE入库。 **5:HBase连接注意事项** HBase每次连接耗时较高,构建Connect对象时,需要在程序启动时进行,不能在使用时进行创建。 # HBase在人资绩效数据预处理平台中的性能参考 <center>![](//img1.jcloudcs.com/developer.jdcloud.com/517c9d5a-04de-4a72-a260-553d9c00259520210506135338.png)</center> **HBase写入最近30天TP99** <center>![](//img1.jcloudcs.com/developer.jdcloud.com/a51d23c4-ccf0-4e8c-b936-9dd3ff8629a620210506135413.png)</center> **HBase写入均值** <center>![](//img1.jcloudcs.com/developer.jdcloud.com/abf69563-752d-4f71-bc16-b8ff7005049420210506135458.png)</center> **HBase查询速度TP99** <center>![](//img1.jcloudcs.com/developer.jdcloud.com/dd8692d9-594a-4c80-b468-b458588b4fe320210506135537.png)</center> **HBase查询均值** <center>![](//img1.jcloudcs.com/developer.jdcloud.com/075c7a99-f659-4c60-9164-dbb056b4b4b320210506135622.png)</center> # 附录 HBase官方介绍:http://hbase.apache.org/ 京东大数据平台:http://doc.nosql.jd.com/ ------------ ###### 自猿其说Tech-JDL京东物流技术发展部 ###### 作者:职能产品部-人资研发组 陈强 ------------
原创文章,需联系作者,授权转载
上一篇:Airbnb:用设计建立情感链接
下一篇:深度解析移动端各技术栈
相关文章
Taro小程序跨端开发入门实战
Flutter For Web实践
配运基础数据缓存瘦身实践
自猿其说Tech
文章数
426
阅读量
2149964
作者其他文章
01
深入JDK中的Optional
本文将从Optional所解决的问题开始,逐层解剖,由浅入深,文中会出现Optioanl方法之间的对比,实践,误用情况分析,优缺点等。与大家一起,对这项Java8中的新特性,进行理解和深入。
01
Taro小程序跨端开发入门实战
为了让小程序开发更简单,更高效,我们采用 Taro 作为首选框架,我们将使用 Taro 的实践经验整理了出来,主要内容围绕着什么是 Taro,为什么用 Taro,以及 Taro 如何使用(正确使用的姿势),还有 Taro 背后的一些设计思想来进行展开,让大家能够对 Taro 有个完整的认识。
01
Flutter For Web实践
Flutter For Web 已经发布一年多时间,它的发布意味着我们可以真正地使用一套代码、一套资源部署整个大前端系统(包括:iOS、Android、Web)。渠道研发组经过一段时间的探索,使用Flutter For Web技术开发了移动端可视化编程平台—Flutter乐高,在这里希望和大家分享下使用Flutter For Web实践过程和踩坑实践
01
配运基础数据缓存瘦身实践
在基础数据的常规能力当中,数据的存取是最基础也是最重要的能力,为了整体提高数据的读取能力,缓存技术在基础数据的场景中得到了广泛的使用,下面会重点展示一下配运组近期针对数据缓存做的瘦身实践。
自猿其说Tech
文章数
426
阅读量
2149964
作者其他文章
01
深入JDK中的Optional
01
Taro小程序跨端开发入门实战
01
Flutter For Web实践
01
配运基础数据缓存瘦身实践
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号