大数据开发工程师-第十二周 综合项目:电商数据仓库之用户行为数仓2


第十二周 综合项目:电商数据仓库之用户行为数仓2

电商数仓技术选型

1
咱们前面对项目的需求进行了分析,整体上来说是需要三个大的功能模块,那下面我们就来分析一下,想要实现这些功能模块,具体使用哪些技术框架比较合适

数据采集

1
2
3
4
5
6
7
8
首先是数据采集:
咱们前面学习了Flume这个数据采集工具
其实还有一些类似的数据采集工具,Logstash、FileBeat,这两个也可以实现数据采集

那这三个日志采集工具我们需要如何选择呢?
首先从性能消耗上面来说,Flume和Logstash的性能消耗差不多,都是基于JVM执行的,都是重量级的组件,支持多种数据源和目的地。

FileBeat是一个只支持文件数据采集的工具,是一个轻量级组件,性能消耗比价低,它不是基于JVM执行的,它是使用go语言开发的。
1
我们在采集数据的时候可以分为两种情况

image-20230330203300260

1
2
3
4
5
6
7
8
9
10
11
12
13
14
第一种是把采集工具部署到产生数据的服务器上面
web项目产生的日志数据直接保存在服务器上面,并且这个服务器的性能比较高,可以允许我在上面部署Flume数据采集工具,这样也不会对上面的web项目的稳定性产生什么影响。

第二种是把采集工具部署在一个独立的服务器上面
web项目产生的日志数据直接保存在服务器上面,但是这个服务器的性能一般,并且对web项目的稳定性要求非常高,如果让你在上面部署一个其它服务,这样这个服务器的稳定性就没办法保证了,进而也就无法保证web项目的稳定性了,所以这个时候可以选择在产生日志的时候使用埋点上报的方式,通过http接口把日志数据传输到日志接收服务器中

那针对第一种情况肯定是要选择一个性能消耗比较低的数据采集工具,优先选择FileBeat
针对第二种情况的话就不需要考虑性能消耗了,因为采集工具是在独立的机器上,不会影响web项目,这个时候我们需要考虑的就是采集工具的功能是否完整,因为在采集数据的时候可能需要对数据进行一些简单的处理,以及后期可能会输出到不同的存储介质中。

Flume和Logstash都是支持多种输入、多种输出、以及都可以在采集数据的时候对数据做一些处理,那这个时候该如何选择呢?
注意了,这个时候我们就要考虑如果后期采集工具出现了问题,或者我们需要自定义一些功能,维护成本高不高,Flume是使用java开发的,而Logstash是使用ruby开发的,由于我们都是java出身,所以考虑到后期的维护成本,Flume是最优的选择。

在采集数据的时候,除了日志数据,有时候还需要采集一些业务系统的数据,这些数据一般保存在关系型数据库中,例如:MySQL
我们也需要把这些数据采集过来,如果MySQL开启了binlog,那我们可以使用Flume采集
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
什么是MySQL的binlog呢?
可以这样理解,MySQL对数据库的任何修改都会记录在binlog中,所以如果开启了binlog,那我们就可以使用Flume采集这个日志数据,就可以获取到MySQL中数据的变化了。

但是目前我们的MySQL没有开启binlog,并且也没有打算开启binlog,那怎么办?
因为我们这个需求不需要实时采集MySQL中的数据,所以不开启binlog也是没有问题的,Flume默认不支持直接采集MySQL中的数据,如果想要实现的话需要自定义Source,这样就比较麻烦了

其实采集MySQL中的数据有一个比较常用的方式是通过Sqoop实现。
Sqoop中有两大功能,数据导入和数据导出

数据导入是指把关系型数据库中的数据导入HDFS中
数据导出是指把HDFS中的数据导出到关系型数据库中

我们后期在做一些报表的时候其实也是需要把数据仓库中的数据(APP层)导出到MySQL中的,所以在这选择Sqoop也是非常实用的。

所以针对数据采集这块,我们主要选择了Flume和Sqoop

数据存储

1
2
数据采集过来以后,由于我们后面要构建数据仓库,数据仓库是使用Hive实现,Hive的数据是存储在HDFS中的,所以我们把采集到的数据也直接存储到HDFS里面
还有一点是后期在做一些数据报表的时候,是需要把数据仓库中的数据导出到MySQL中的,所以数据存储也需要使用到MySQL。

数据计算

1
2
3
在构建数据仓库的时候,我们前面说了,是使用Hive构建数据仓库,一般的数据处理通过SQL是可以搞定的,如果遇到了比较复杂的处理逻辑,可能还需要和外部的数据进行交互的,这个时候使用SQL就比较麻烦了,内置的函数有时候搞不定,还需要开发自定义函数

针对复杂的数据清洗任务我们也可以考虑使用Spark进行处理。

数据可视化

1
2
3
4
在数据可视化层面,我们可以使用Hue(无法出图表)数据查询

如果想实现写SQL直接出图表(简单的图表)zeppelin
如果想定制开发图表(复杂图表)的话可以使用Echarts(百度开源的)之类的图表库,这个时候是需要我们自己开发数据接口实现的。

整体架构设计

1
技术选型搞定后,下面我们来看一下整体的架构设计

image-20230330211658080

1
2
3
4
5
6
7
8
9
10
我们采集的数据主要分为服务端数据和客户端数据
什么是服务端数据,就是网站上的商品详情数据以及你下的订单信息之类的数据,这些数据都是在服务端存储着的,一般是存储在类似于MySQL之类的关系型数据库中,这些数据对事务性要求比较严格,所以会存放在关系型数据库中。

什么是客户端数据呢,就是用户在网站或者app上的一些滑动、点击、浏览、停留时间之类的用户行为数据,这些数据会通过埋点直接上报,这些其实就是一些日志类型的数据了,这种类型的数据没有事务性要求,并且对数据的完整性要求也不是太高,就算丢一些数据,对整体结果影响也不大。

针对服务端数据,在采集的时候,主要是通过Sqoop进行采集,按天采集,每天凌晨的时候把昨天的数据采集过来,存储到HDFS上面。
针对客户端数据,会通过埋点上报到日志接收服务器中,其实这里面就是一个Http服务,埋点上报就是调用了这个Http服务,把日志数据传输过来,日志接收服务收到数据之后,会把数据落盘,存储到本地,记录为日志文件,然后通过Flume进行采集,将数据采集到HDFS上面,按天分目录存储。

服务端数据和客户端数据都进入到HDFS之后,就需要对数据进行ETL,构建数据仓库了。
数据仓库构建好了以后可以选择把一些需要报表展现的数据导出到MySQL中,最终在页面进行展现。

服务器资源规划

1
2
整体架构分析好了,下面我们来分析一下,想要实现这个架构,服务器资源应该如何划分
针对我们的测试环境:

image-20230330210548415

1
针对生产环境,至少需要这些机器:

image-20230330210649799

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
说明
1:由于NameNode开启了HA,所以SecondaryNameNode进程就不需要了
2:NameNode需要使用单独的机器,并且此机器的内存配置要比较高,建议128G
3:DataNode和NodeManager需要部署在相同的集群上,这样可以实现数据本地化计算
4:Hadoop Client需要部署在需要和Hadoop交互的机器上
5:数据接口服务器需要使用至少两台,为了实现负载均衡及故障转移,保证数据接收服务的稳定性
6:Flume部署在日志服务器上面,便于采集本机保存的用户行为日志信息;还需要有单独的Flume机器,便于处理其它的日志采集需求
7:Hive需要部署在所有业务机器上
8:MySQL建议单独部署,至少两台,一主一备
9:Sqoop需要部署在所有业务机器上
10:Zeppelin可以单独部署在一台普通配置的机器上即可
11:Azkaban建议至少使用三台,一主两从,这样可以保证一个从节点挂掉之后不影响定时任务的调度
针对Hadoop集群的搭建在线上环境需要使用CDH或者HDP
具体Hadoop集群需要使用多少台集群需要根据当前的数据规模来预估
假设集群中的机器配置为8T,64 Core,128G
1:如果每天会产生1T的日志数据,需要保存半年的历史数据: 1T*180天=180T
2:集群中的数据默认是3副本: 180T*3=540T
3:预留20%左右的空间: 540T/0.8=675T
这样计算的话就需要675T/8T=85台服务器
如果我们在数据仓库中对数据进行分层存储,这样数据会出现冗余,存储空间会再扩容1~2倍
1
注意:没有必要一开始就上线全部的机器,我们可以前期上线30台,后面随着业务数据量的增长再去动态扩容机器即可。

本文标题:大数据开发工程师-第十二周 综合项目:电商数据仓库之用户行为数仓2

文章作者:TTYONG

发布时间:2023年03月30日 - 20:03

最后更新:2023年06月18日 - 16:06

原始链接:http://tianyong.fun/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88-%E7%AC%AC%E5%8D%81%E4%BA%8C%E5%91%A8-%E7%BB%BC%E5%90%88%E9%A1%B9%E7%9B%AE-%E7%94%B5%E5%95%86%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93%E4%B9%8B%E7%94%A8%E6%88%B7%E8%A1%8C%E4%B8%BA%E6%95%B0%E4%BB%932.html

许可协议: 转载请保留原文链接及作者。

多少都是爱
0%