未完待续,排版全部更新完后再整理
项目部署
虚拟机环境配置下载
整体设计
日志划分
业务日志批量更新,用户行为日志事实更新
虚拟机
虚拟机登录 root root
sudo systemctl start/status mysqld
mysql -uroot -p '000000'
gmail
bin/sqoop list-databases --connect jdbc:mysql://warehouse:3306/ --username root --password 000000
hadoop通过yarn控制datanode的资源配置,通过zookeeper控制namenode的高可用(数据同步,主从选举),zk和yarn无关
kafka通过zk记录注册的broker信息,选举leader,消费组reblance
/opt/module/hadoop-3.1.3
启动hadoop
sbin/start-dfs.sh
启动yarn
sbin/start-yarn.sh
启动zk
zookeeper-3.5.7/bin/zkServer.sh start /status看状态
群启/停hadoop/yarn
/home/atguigu/bin
sh hdp.sh start/stop
启停zookeeper
sh zk.sh/stop
启停kafka
sh kf.sh start/stop
启停flume采集,channel存kafka上
f1.sh
启停flume消费上个flume的kafka channel,通过file channel
f2.sh
(flume默认按照机器时间来判定数据落盘位置,会造成数据0点飘逸
所以flume需要代码自定义拦截器设置按照日志产生的时间戳来判定数据落盘位置,
通过读取数据body解析日志内提前设定好的时间戳字段,然后赋值给flume header时间戳)
cluster.sh 包含上面所有
熟悉业务表含义,表结构
结合业务过程分析数据变化
业务日志设计
一 业务日志分析(批量mysql信息更新)
1 设计业务过程的时候,需要考虑订单/订单详情的类似情况。比如订单详情数据量更大,后续做分析很多时候并不需要详情的信息,所以添加一个订单事实表可以提高分析效率
2 DWT对DWS层对汇聚的时候,很多情况DWS和DWD是完全相同的计算,仅仅是如时间长短的汇聚区别,为了避免重复计算。可以一次计算保存在一个宽表,来记录不同时间粒度的汇聚。后续直接读取宽表即可
二 sqoop 装载数据
三 全量表入hive
全量表分区规划
四 新增和变化表入hive
新增和变化的用户表可以用拉链表记录,并动态分区写入
1 动态分区和静态分区区别
表象:静态分区与动态分区的主要区别在于静态分区是手动指定,而动态分区是通过数据来进行判断。详细来说,静态分区的列实在编译时期,通过用户传递来决定的;动态分区只有在SQL执行时才能决定
深层次:动态分区与静态分区还有一个细微的差别是,静态分区一 定会创建分区,不管SELECT语句的结果有没有数据。而动态分区,只有在SELECT结果的记录数>0的时候,才会创建分区。因此在不同的业务场景下,可能会选择不同的方案。
另外使用动态分区时需要注意的比较重要的一点是,动态分区会为每一个分区分配reduce数。比如说你在脚本上面写了:set mapred.reduce.tasks=100;
并且有两个分区:pt, if_online。如果结果集中pt=20121023,if_online=0/1,那么它就会为pt=20121023/if_online=0,pt=20121023/if_online=1各分配100个reduce。也就是说,namenode会同时处理200个文件的写操作。这在分区值很多的情况下,会成为一个灾难,容易直接把namenode给搞挂掉,是非常危险的。因此使用动态分区时,一定要清楚地知道产生的动态分区值,并且合理地设置reduce数量
2 Why 拉链表
3 用户拉链表分区规划走向
4 SQL实现思路
用户行为日志(实时flume+kafka)
页面埋点日志和启动日志