一、HBase基础与存储的优势
HBase主要具有五大核心优势,即海量存储、列式存储、易扩展、高并发以及稀疏矩阵。HBase所能够应用的场景包括对象存储、用户画像推荐、聊天消息实时流、索引、报表以及轨迹数据和监控数据等。
二、HBase应用分享
这里主要分享一下HBase在人脸识别场景中的应用。在京东,人脸识别主要应用于无人超市、动态广告牌以及AR试装镜等项目中。人脸识别主要可以分为离线人脸识别和在线人脸识别两个方面。分别而言,离线人脸识别包括人脸属性识别,包括性别、年龄以及表情等的识别,其次是小场景人脸识别,比如手机人脸识别等,小场景人脸识别速度比较高,数据和模型都存储在本地。第三个就是人脸个数检测,比如通过摄像头判断和分析某区域的客流量。对于在线人脸识别而言,需要对人脸信息进行录入,其次还有人脸搜索,比如常用的门禁场景。第三就是人脸校验,比如身份证与本人的对应识别。
日志记录
对于离线人脸识别而言,只需要将数据保存在本地即可,不需要在云端进行匹配,而需要定期将数据批量写入服务器。而对于人脸搜索这样的场景,比如门禁场景,当人去刷脸的时候,客户端会扣取图片中的人脸图,先判断图片中是否有人,如果有人才会去云端进行多线程搜索,只要其中一个线程能够搜索成功就认为搜索成功,之后就可以打开门禁。以上这些都属于日志批量写入的场景。
其次是列式存储场景,一些数据可能存在交叉,但是又不完全一样,比如上图中的6种场景,人脸搜索、人脸检验、人脸校验、人脸属性检测、人脸特征以及人脸活体等。在京东基于HBase的人脸识别实践中,主表的RowKey设计使用的data_time_uuid,其中time为最大时间减去当前时间,这样使得最新的数据放在最上面,而uuid则是随机id。因为直接通过主表查询数据比较麻烦,因此根据不同的业务维度建立不同的索引表,索引表中存储了当前的主表的RowKey。因此可以按照不同的业务维度找索引表,进而找到主表中的数据。
三、HBase数据分析
如下图所示,在刚开始的时候,按照不同的类型、不同的时间和不同的用户进行统计,写不同的work,如果统计的维度越多,那么work就越多,那么当需求无限增加,那么就需要使用更多地任务。并且这样一来使得任务管理变得异常繁琐。
因此,对于上述部分进行了如下图所示的改进。上层的各种应用将会把数据写入到HBase里面,同时实时地接入Kafka直接进入数据仓库里面,此外,数据仓库每天会增量地将HBase中的数据增量地抽取过去。
如下图所示的是数据仓库的设计,当将数据抽取过来之后需要对于数据进行清洗。因为有些字段没有作用,因此需要进行清洗之后,按照维度进行划分,最后按照需求归入到不同应用里面提供服务。
HBase中的数据将会主要应用于两个方面,其一是统计报表,离线查询基于Hive实现,因此这样就比较方便。另外一个方面就是实时数据大屏,需要将数据实时写入HBase,并对外提供API服务。
四、HBase使用中遇到的问题
在使用HBase的过程中也遇到了很多的问题,第一个就是因为项目是基于Spring实现的,但由于Spring HBase性能较差,发现当数据量变大之后,其读写性能变得很差,主要原因就是经常会出现需要重新连接的情况,根据这样的情况,在实践中选用了原生的API。其次,还出现了HBase的热点问题,在实践中采用预分区的方式进行了解决。
因为HBase具有诸多优势,因此非常适合大数据场景下的数据存储应用,比如当前比较热门的人脸识别场景,人脸识别分为在线和离线两种,各种方案具有不同的业务特点,而基于HBase的数据存储方案,能够满足多种需求。虽然目前而言,在项目实践中,HBase也需要面对性能以及热点问题等诸多挑战,但是往往都能够找到应对之道。