电商数据仓库之用户行为数仓3-数据生成与采集
1 | 接下来我们就来开发第一个模块:数据采集模块 |
数据生成
【客户端数据】用户行为数据
1 | 首先我们模拟生成用户行为数据,也就是客户端数据,主要包含用户打开APP、点击、浏览等行为数据 |
1 | { |
1 | 这个json串中的data是一个json数组,它里面包含了多种用户行为数据。 |
1 | 所以在每次上报的时候,公共字段只需要报一份就行,把不同的用户行为相关的业务字段放到data数组中,这样可以避免上报大量的重复数据,影响数据上报性能,我们只需要在后期解析的时候,把公共字段和data数组总的每一条业务字段进行拼装,就可以获取到每一个用户行为的所有字段信息。 |
1 | act代表具体的用户行为,在这列出来几种 |
生成用户行为测试数据
1 | 这里实现不了,课程提供的用户行为生成接口,需要提供uid、课程订单,然后执行提前编写好的测试数据生成代码。 |
部署日志采集服务
1 | 部署日志采集服务,模拟埋点上报数据的流程,代码在db_data_warehouse中的data_collect这个子项目中,将这个子项目打成jar包,部署到bigdata04服务器中,并且启动此HTTP服务。 |
1 | D:\IdeaProjects\db_data_warehouse\data_collect>mvn clean package -DskipTests |
1 | 在bigdata04的/data/soft/目录下创建data_collect目录 |
1 | 然后把target目录下的data_collect-1.0-SNAPSHOT.jar上传到bigdata04的 /data/soft/data_collect里面 |
1 | 确认是否成功启动 |
1 | 获取到的数据格式是这样的: |


1 | 首先解析data属性的值,里面包含了多个用户的行为数据 |

1 | 最终的日志数据会保存在data_collect这个日志采集服务所在的机器上,通过log4j记录在/data/log目录下面。 |

1 | 到这为止,用户行为数据就生成好了。 |
【服务端数据】商品订单相关数据
1 | 接下来需要生成商品订单相关数据,这些数据都是存储在mysql中的 |

1 | powerdesigner这个软件设计的 |
1 | 首先在MySQL中初始化数据库和表。 |

1 | 接下来需要向表中初始化数据。 |
1 | 下面就可以执行GenerateGoodsOrderData向MySQL中初始化数据了。 |
采集数据
采集用户行为数据
配置Flume的Agent
1 | 数据接收到以后,需要使用flume采集数据,按照act值的不同,将数据分目录存储 |
1 | flume Agent配置内容如下: |
开始采集数据


采集商品订单相关数据
Sqoop的使用
1 | 下面我们需要将商品订单数据采集到HDFS里面,咱们前面分析过,在这里针对关系型数据库数据的采集 |
1 | Sqoop目前有两大版本,Sqoop1和Sqoop2,这两个版本都是一直在维护者的,所以使用哪个版本都可以。 |
1 | 注意:最终下载的sqoop1.4.7的安装是这个sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz |
1 | 这个安装包表示里面包含了hadoop-2.6.0的依赖,我们目前使用的是hadoop3.2.0,不过是可以兼容的,这样就没有必要重新编辑sqoop了。 |
1 | 我们在bigdata04机器上安装部署Sqoop |
1 | 4:配置SQOOP_HOME环境变量 |
1 | 5:将MySQL 8的驱动jar包,添加到SQOOP_HOME的lib目录下,因为我们需要使用Sqoop操作MySQL |
1 | 注意:使用hadoop 3.2.0版本的时候,需要在SQOOP_HOME的lib目录下增加commons-lang2.6.jar |
1 | 6:开放MySQL远程访问权限【开放权限以后集群中的机器才可以连接windows上的MySQL服务,否则只能在windows本地访问】 |
1 | 到此为止,Sqoop相关的配置全部搞定。 |
1 | 来看一下Sqoop的文档 |



通用参数
1 | 整理了文档中一些参数的解释: |
导入参数
1 | 导入功能相关参数 |
全表导入
1 | 下面来看一下数据导入功能: |
1 | 使用Sqoop将imooc.user表中的数据导入到HDFS中 |
1 | 注意:如果表中没有主键则会报错(因为mapper数默认是4,需要分4个Task。但是info表又没有主键,MapReduce不知道以哪个字段为准来分Task。) |
查询导入
1 | (2)查询导入:使用sql语句查询表中满足条件的数据导入到HDFS里面 |
空值如何处理
1 | 注意:–query和–table不能同时指定 |
1 | sqoop import \ |
导出参数
1 | --validate <class-name> 启用数据副本验证功能,仅支持单表拷贝,可以 |
1 | 接下来我们来看一下Sqoop的导出功能 |
1 | 验证结果,查询MySQL中的数据 |
实现插入和更新功能
1 | 在导出的时候可以实现插入和更新功能 |

1 | 修改之后的user2表中的数据如下: |
1 | 执行sqoop语句 |
1 | 再验证一下结果,会发现针对已有的数据更新,没有的数据新增。 |
1 | 这就是Sqoop的导入和导出功能。 |
数据采集方式
1 | 全量采集(数据量不大,每天都改变:一天采集一次;数据量不大,几十年都不变:只做一次全量采集) |

1 | 注意:手机号在采集的时候需要脱敏处理,因为数据进入到数据仓库之后会有很多人使用,为保护用户隐私,最好在采集的时候进行脱敏处理。 |
数据采集脚本开发
1 | 下面就开始进行数据采集,其实就是使用Sqoop实现的数据导入 |
1 | [root@bigdata04 soft]# mkdir warehouse_shell_good_order |
1 | 注意:如果在windows中使用notepad++开发shell脚本的时候,需要将此参数设置为UNIX。 |

开始采集数据
1 | 针对全量数据采集和增量数据采集开发不同的脚本 |
全量采集
1 | [root@bigdata04 warehouse_shell_good_order]#vi collect_data_full.sh |
增量采集
1 | 增量数据采集: collect_data_incr.sh |
1 | 执行脚本 |
1 | 执行脚本 |
1 | [root@bigdata01 hadoop-3.2.0]# hdfs dfs -ls /data/ods |