对于依赖内容创作和分享的大型平台如简书
、小红书
和CSDN
等,对高质量内容进行大数据分析是不可或缺的一环。本系列文章将从多个角度深入探讨如何利用Spark和HBase进行高效的数据处理和分析,适合初学者入门大数据开发,同时也为资深从业者提供有价值的参考。
作者简介
网名:大猪佩琪 姓名:不详 年龄:未知 身高:未知 性别:男
日志结构设计
日志存储结构采用JSON
格式,虽然占用更多空间,但具有更好的可读性和便于排查问题的特点。
{
"time": 1553269361115,
"data": {
"type": "read",
"aid": "10000",
"uid": "4229d691b07b13341da53f17ab9f2416",
"tid": "49f68a5c8493ec2c0bf489821c21fc3b",
"ip": "22.22.22.22"
}
}
参数说明
名称 |
值 |
说明 |
time |
精确到毫秒 |
时间戳 |
type |
login:登录 /register:注册 /read:阅读 /like:喜欢 /comment:评论 /share:分享 /reward:赞赏 /publish:发布文章 /update:发布更新 /private:设置私密 /delete:删除 |
操作类型 |
aid |
数字 |
文章编号 |
uid |
UUID |
用户编号 |
tid |
UUID |
用户临时缓存编号 |
ip |
IP地址 |
用户IP地址 |
HBase表结构设计
日志表
create 'LOG_TABLE',{NAME => 'info',TTL => '30 DAYS',
COnFIGURATION=> {'SPLIT_POLICY' => 'org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy','KeyPrefixRegionSplitPolicy.prefix_length'=>'2'},
COMPRESSION=>'SNAPPY'},
SPLITS => ['20', '40', '60', '80', 'a0', 'c0', 'e0']
- rowkey ----->
49|20190101000000000|f68a5c
(时间+用户ID) **设计原则:**支持按时间维度查询,并分散数据。
- 过期时间 30天 -----> 足够长,因为日志源文件仍然保留 **设计原则:**减少存储资源占用。
- 预分区 -----> 使用
rowkey
前两位,00~ff=256个region
**设计原则:**尽量将数据分散到各台Region Server
。
用户表
create 'USER_TABLE',{NAME => 'info',
COnFIGURATION=> {'SPLIT_POLICY' => 'org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy','KeyPrefixRegionSplitPolicy.prefix_length'=>'2'},
COMPRESSION=>'SNAPPY'},
SPLITS => ['20', '40', '60', '80', 'a0', 'c0', 'e0']
- rowkey -----> 49f68a5c8493ec2c0bf489821c21fc3b (用户ID,前8位) **设计原则:**唯一性,通过ID能直接找到用户信息。
目前尚未涉及具体的程序设计与实现,后续将在“百亿级流量实时分析统计”系列文章中逐一实现。