浅谈Hbase在用户画像上的应用

背景

公司应制作C端用户肖像,方便运营商根据标签选择用户圈,然后为这些人做准确的广告。因此,需要在线接口实时调用数据库中的数据,并快速返回结果,并将结果反馈给推送平台进行推送。

目前公司的计划是全部走。ES。每天将Hive从用户标签结果数据的各个维度进行统计Hive推送到ES,然后ES筛选推送。虽然这个过程很快,但不可避免地会遇到一个问题,后续的数据量会越来越大。如果跨多维用户圈选择,可能会导致ES无法处理,准备采用第二套方案。在组合标签查询相应用户群场景时,首先通过组合标签的条件Elasticsearch查询相应的索引数据,然后通过索引数据HBase中批量获取rowkey相应的数据。

优化后方案流程图:

介绍

Hbase的简介

HBase它是一种高性能、列存储、可伸缩、实时读写的分布式存储系统,也在运行中HDFS之上。与Hive不同的是,HBase它可以在数据库上实时运行,而不是运行MapReduce适合实时查询大数据的任务。

Hadoop本质上:分布式文件系统(HDFS) 分布式计算框架(Mapreduce) 调度系统Yarn构建的分布式大数据处理框架。Hive:是一个基于Hadoop数据仓库适用于一些高延迟应用程序(离线开发),可以将结构化数据文件映射到数据库表,并提供简单的sql查询功能。Hive可以认为是MapReduce包装,好写的HQL转换为的MapReduce程序本身不存储和计算数据,完全依赖于HDFS和MapReduce,Hive中表为纯逻辑表。hive需要用到hdfs需要使用存储文件MapReduce计算框架。HBase:是一个Hadoop分布式、可扩展、大数据存储的数据库。hbase是物理表,不是逻辑表,提供超大内存hash表,搜索引擎通过它存储索引,便于查询操作。HBase可以认为是HDFS一个包装。他的本质是数据存储和数据存储NoSql数据库;HBase部署于HDFS而且克服了hdfs随机读写的缺点,提高查询效率。

HMaster

管理HRegionServer,实现负载平衡。管理和分配HRegion,比如在HRegion split时分配新的HRegion;在HRegionServer下线时迁移其内HRegion到其他HRegionServer上。实现DDL操作管理namespace和table元数据权限控制(ACL)

HRegionServer

管理HRegion读写HDFS,管理Table中的数据。Client直接通过HRegionServer读写数据(从HMaster获取元数据,找到RowKey所在的HRegion/HRegionServer后)

ZooKeeper

存放整个 HBase集群的元数据和集群的状态信息。HMaster主从节点的failover。

Rowkey

用来表示唯一行记录的主键,HBase根据数据row key全局排列字典顺序。HBase中行只有三种方式

通过单个row key访问通过row key全表扫描正则访问

由于HBase通过rowkey检索数据rowkey由于长度限制,许多查询条件无法拼接rowkey中,因此HBase不能像关系数据库那样根据各种条件筛选数据。一般来说,HBase根据复杂条件查询数据,需要建立二级索引。

Rowkey设计要遵循三个原则:

唯一性原则:rowkey需要保证独特性,没有重复。用户通常用于肖像中id作为rowkey。长度原则:rowkey长度一般为10-1000bytes。散列原则:rowkey散列分布有利于每个数据均衡分布RegionServer,负载平衡可以实现。

通常来说,RowKey 只能对条件中包含其首字段的查询提供满意的性能支持 查询其他字段时,性能不尽如人意。在极端情况下,某些字段的查询性能可能会退化为全表 由于字段在扫描水平 RowKey 地位不等价,它们在 RowKey 中的排位决 它们被检索时的性能,排名越高的字段在查询中越有优势,尤其是第一个字段 具有特殊的先发优势。如果查询中包含第一个字段,则可以通过检索第一个字段的值来确定 RowKey 前缀部分大大缩小了检索范围。如果不包括,则只能在所有数据中 RowKey 逐一搜索,可以想象两者在性能上的差距。

columns family

列簇,HBase每一列都属于某一列簇,列簇是表sche ** 使用表前必须定义部分。columns family原则如下:

数据格式是否相似;访问类型是否相似。Hbase伪分布式建筑

1、下载Hbase

https:// ** .apache.org/dyn/closer.lua/hbase/hbase-1.3.6/hbase-1.3.6-bin.tar.gzwget https://mirror.bit.edu.cn/apache/hbase/hbase-1.3.6/hbase-1.3.6-bin.tar.gz

2、解压

3、修改配置

1、设置J ** A_HOME

vim hbase-env.sh

export J ** A_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home

2、在hbase-site.xml设置HBase的核心配置

vim hbase-site.xml

<configuration>

<property>

<name>hbase.rootdir</name>

//Here you have to set the path where you want HBase to store its files.

<value>hdfs://localhost:9000/hbase</value>

</property>

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

<property>

<name>hbase. ** ster.info.port</name>

<value>60010</value>

</property>

</configuration>

注意:

hbase.rootdir要和hadoop中core-site.xml中fs.default.name相同。

3、启动Hbase

必须先启动Hadoop,然后启动Hbase。

./start-hbase.sh

4.图形界面

http://localhost:60010/ ** ster-status

5、hbase语法

create

语法: create '<table name>', '<column family>'

Demo: create 'TEST.USER_INFO', 'INFO'

put

语法:put '<table name>', 'row1','<colfamily:colname>','<value>'

demo:

put 'TEST.USER_INFO', 'R1', 'INFO:C1', 'r1_c1_value1'

put 'TEST.USER_INFO', 'R1', 'INFO:C2', 'r1_c2_value1'

put 'TEST.USER_INFO', 'R1', 'INFO:C3', 'r1_c3_value1'

scan

语法:scan '<table name>'

Demo: scan 'TEST.USER_INFO'

get

语法:get '<table name>','row1'

Demo: get 'TEST.USER_INFO' , 'R1'

count

语法:count '<table name>'

Demo: count 'TEST.USER_INFO'

delete

语法:delete '<table name>', '<row>', '<column name >', '<time stamp>'

Demo: delete 'TEST.USER_INFO', 'R1', 'INFO:C1'

deleteall

语法:deleteall '<table name>', '<row>'

Demo: deleteall 'TEST.USER_INFO', 'R1'

drop、disable

disable 'TEST.USER_INFO'

drop 'TEST.USER_INFO'用户肖像使用场景

文章开头画了整体架构图。

用户肖像不是数据的来源,而是基于数据仓库ODS层、DW层、DM与用户相关数据的二次建模处理。ETL将用户标签的计算结果写入过程中Hive,由于不同的数据库有不同的应用场景,需要进一步同步数据MySQL、HBase、Elasticsearch等数据库。

Hive:存储用户标签计算结果、用户群计算结果、用户特征库计算结果。MySQL:存储标签元数据,监控相关数据,导出到业务系统。HBase:存储在线接口实时调用数据,存储用户标签数据。Elasticserch:支持用户群计算和用户群透视分析所需的用户标签数据实时查询分析

一开始ETL建立数据标签系统ETL工程师和数据分析师的工作。

存在各种源数据、中间层数据和汇总数据Hive中间。用户标签源数据存储Mysql中间。用户标签的结果数据二级索引映射表存储HBase中。ES存储二次索引映射表批量获取索引。

例如:

为什么要使用二级索引?

查询在线接口HBase因为HBase不能像关系数据库那样根据各种条件筛选数据(类似于SQL语言中的where筛选条件)。一般地HBase根据复杂条件查询数据,需要建立二级索引。在组合标签查询相应的用户群场景时,首先通过组合标签的条件Elasticsearch查询相应的索引数据,然后通过索引数据HBase中批量获取rowkey对应的数据(Elasticsearch中的documentid和HBase中的rowkey都是为用户设计的id)。

ES二级索引的两个构建过程:

配套基于Spark/MR创建/更新批量索引程序, 用于现有的初次或重建HBase库表的索引

备注:

用户肖像的基本流程如下:

https://zhuanlan.zhihu.com/p/147722916

扫码免费用

源码支持二开

申请免费使用

在线咨询