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
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表进行分区。根据具成情况而定,如果每天的数据量都很大那就要可以按月分区后在按天进行分区。
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 方式进行插入