企业级系统用户浏览数据存储实例(hbase,hive,impala整合)


1.hbase表设计

建表语句

create 'behavior', 'view', 'attention'

view用于用户的浏览信息的收集,

attention用于用户的关注信息的收集

数据如下

put 'behavior','user1', 'view:2015-10-22', "\x00\x00\x00\x09"

put 'behavior','user1', 'attention:2015-10-23', "\x00\x00\x00\x08"

put 'behavior','user2', 'view:2015-10-22', "\x00\x00\x00\x06"

put 'behavior','user2', 'attention:2015-10-23', "\x00\x00\x00\x05"

put 'behavior','user1', 'view:2015-10-24', "\x00\x00\x00\x0F"

put 'behavior','user2', 'attention:2015-10-24', "\x00\x00\x00\x04"

view:的列为用户操作的时间戳,值为浏览的或关注的用户id

2.hive设计

与hbase集成建表语句如下

create external table behavior (

username STRING

, visits map<STRING, INT>

, attention map<STRING, INT>

)

STORED BY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, view:#s:b,attention:#s:b")

TBLPROPERTIES("hbase.table.name"= "behavior");

至此用户的行为数据已经存储好了

由于要集成impala,而impala没有复合数据类型,所以用hive进行高层次的ETL然后供impala使用,由过成还可以对hive表进行分区。根据具成情况而定,如果每天的数据量都很大那就要可以按月分区后在按天进行分区。

hive高层抽取并分区

根据月进行分区

CREATE TABLE behavior_month (

username STRING,

num INT,

event_day STRING

)

PARTITIONED BY(event_month string)

ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t'

STORED AS textfile;

定期执行分区脚本:

FROM behavior LATERAL VIEW EXPLODE(visits) t as ts, user_id

INSERT OVERWRITE TABLE behavior_month PARTITION(event_month)

select username,  user_id, ts, substr(ts, 1,7) ;

至此已经根据月进行了数据的分区并且抽取去掉了复合数据类型,此表可以在impala中进行计算。

根据月,日进行分区(如果单日数据量都很大时选择此种方式)

CREATE TABLE behavior_month_day (

username STRING,

num INT

)

PARTITIONED BY(event_month STRING, event_day STRING)

ROW FORMATDELIMITED FIELDS TERMINATED BY '\t'

STORED AS textfile;

定期执行分区脚本

FROM behavior LATERAL VIEW EXPLODE(visits) t as ts, user_id

INSERT OVERWRITE TABLE behavior_month_day PARTITION(event_month, event_day)

select username,  user_id, substr(ts, 1,7), ts;

至此已经根据月进行了数据的分区并且抽取去掉了复合数据类型,此表可以在impala中进行计算。

关注的抽取方法同上

数据进入大数据平台的方式

可以在后台用HBASE API进行插入,也可以在前台用js通过HBASE REST 方式进行插入

 

你可能感兴趣的:(impala,hbase,实例,数据存储,企业级)