离线电商数仓知识笔记沉淀-流程及用户行为采集平台

| 服务********名称 | 子********服务 | 服务器 hadoop102 | 服务器 hadoop103 | 服务器 hadoop104 |
| HDFS | NameNode | √ | | |
| DataNode | √ | √ | √ |
| SecondaryNameNode | | | √ |
| Yarn | NodeManager | √ | √ | √ |
| Resourcemanager | | √ | |
| Zookeeper | Zookeeper Server | √ | √ | √ |
| Flume(采集日志****)**** | Flume | √ | √ | |
| Kafka | Kafka | √ | √ | √ |
| Flume 消费Kafka日志 | Flume | | | √ |
| Flume 消费Kafka业务 | Flume | | | √ |
| Hive | | √ | √ | √ |
| My********SQL | MySQL | √ | | |
| DataX | | √ | √ | √ |
| S********park | | √ | √ | √ |
| DolphinScheduler | ApiApplicationServer | √ | | |
| AlertServer | √ | | |
| MasterServer | √ | | |
| WorkerServer | √ | √ | √ |
| LoggerServer | √ | √ | √ |
| S********uperset | Superset | √ | | |
| Flink | | √ | | |
| ClickHouse | | √ | | |
| Redis | | √ | | |
| Hbase | | √ | | |
| 服务********数总计 | | 2********0 | 11 | 12 |

用户行为日志

包括用户的各项行为信息以及行为所处的环境信息,收集手段通常为埋点。

主流埋点方式:代码埋点、可视化埋点、全埋点

用户行为日志内容:

本项目收集和分析的用户行为信息主要有页面浏览记录、动作记录、曝光记录、启动记录和错误记录

页面浏览记录:记录的是访客对页面的浏览行为,该行为的环境信息主要有用户信息、时间信息、地理位置信息、设备信息、应用信息、渠道信息及页面信息等。

动作记录:记录的是用户的业务操作行为,该行为的环境信息主要有用户信息、时间信息、地理位置信息、设备信息、应用信息、渠道信息 及动作目标对象信息等。

曝光记录:记录的是曝光行为,该行为的环境信息主要有用户信息、时间信息、地理位置信息、设备信息、应用信息、渠道信息及曝光对象信息等。

启动记录:记录的是用户启动应用的行为,该行为的环境信息主要有用户信息、时间信息、地理位置信息、设备信息、应用信息、渠道信息、启动类型及开屏广告信息等。

错误记录:记录的是用户在使用应用过程中的报错行为,该行为的环境信息主要有用户信息、时间信息、地理位置信息、设备信息、应用信息、渠道信息、以及可能与报错相关的页面信息、动作信息、曝光信息和动作信息。

日志格式:大致分两类:页面日志和启动日志

页面日志:以页面浏览为单位,即一个页面浏览记录,生成一条页面埋点日志。一条完整的页面日志包含,一个页面浏览记录,若干个用户在该页面所做的动作记录,若干个该页面的曝光记录,以及一个在该页面发生的报错记录。除上述行为信息,页面日志还包含了这些行为所处的各种环境信息,包括用户信息、时间信息、地理位置信息、设备信息、应用信息、渠道信息等。

{
“common”: { – 环境信息
“ar”: “15”, – 省份ID
“ba”: “iPhone”, – 手机品牌
“ch”: “Appstore”, – 渠道
“is_new”: “1”, – 是否首日使用,首次使用的当日,该字段值为1,过了24:00,该字段置为0。
“md”: “iPhone 8”, – 手机型号
“mid”: “YXfhjAYH6As2z9Iq”, – 设备id
“os”: “iOS 13.2.9”, – 操作系统
“sid”: “3981c171-558a-437c-be10-da6d2553c517” – 会话id
“uid”: “485”, – 会员id
“vc”: “v2.1.134” – app版本号
},
“actions”: [{ – 动作(事件)
“action_id”: “favor_add”, – 动作id
“item”: “3”, – 目标id
“item_type”: “sku_id”, – 目标类型
“ts”: 1585744376605 – 动作时间戳
}
],
“displays”: [{ – 曝光
“displayType”: “query”, – 曝光类型
“item”: “3”, – 曝光对象id
“item_type”: “sku_id”, – 曝光对象类型
“order”: 1, – 出现顺序
“pos_id”: 2 – 曝光位置
“pos_seq”: 1 – 曝光序列号(同一坑位多个对象的编号)
},
{
“displayType”: “promotion”,
“item”: “6”,
“item_type”: “sku_id”,
“order”: 2,
“pos_id”: 1
“pos_seq”: 1
},
{
“displayType”: “promotion”,
“item”: “9”,
“item_type”: “sku_id”,
“order”: 3,
“pos_id”: 3
“pos_seq”: 1
},
{
“displayType”: “recommend”,
“item”: “6”,
“item_type”: “sku_id”,
“order”: 4,
“pos_id”: 2
“pos_seq”: 1
},
{
“displayType”: "query ",
“item”: “6”,
“item_type”: “sku_id”,
“order”: 5,
“pos_id”: 1
“pos_seq”: 1
}
],
“page”: { – 页面信息
“during_time”: 7648, – 持续时间毫秒
“item”: “3”, – 目标id
“item_type”: “sku_id”, – 目标类型
“last_page_id”: “login”, – 上页ID
“page_id”: “good_detail”, – 页面ID
“from_pos_id”:999, – 来源坑位ID
“from_pos_seq”:999, – 来源坑位序列号
“refer_id”:“2”, – 外部营销渠道ID
“sourceType”: “promotion” – 来源类型
},
“err”: { --错误
“error_code”: “1234”, --错误码
“msg”: “***********” --错误信息
},
“ts”: 1585744374423 --跳入时间戳
}

启动日志:以启动为单位,及一次启动行为,生成一条启动日志。一条完整的启动日志包括一个启动记录,一个本次启动时的报错记录,以及启动时所处的环境信息,包括用户信息、时间信息、地理位置信息、设备信息、应用信息、渠道信息等。

{
“common”: {
“ar”: “370000”,
“ba”: “Honor”,
“ch”: “wandoujia”,
“is_new”: “1”,
“md”: “Honor 20s”,
“mid”: “eQF5boERMJFOujcp”,
“os”: “Android 11.0”,
“sid”:“a1068e7a-e25b-45dc-9b9a-5a55ae83fc81”
“uid”: “76”,
“vc”: “v2.1.134”
},
“start”: {
“entry”: “icon”, --icon手机图标 notice 通知 install 安装后启动
“loading_time”: 18803, --启动加载时间
“open_ad_id”: 7, --广告页ID
“open_ad_ms”: 3449, – 广告总共播放时间
“open_ad_skip_ms”: 1989 – 用户跳过广告时点
},
“err”:{ --错误
“error_code”: “1234”, --错误码
“msg”: “***********” --错误信息
},
“ts”: 1585744304000
}

服务器和JDK准备

配置hadoop102、hadoop103、hadoop104三台主机(问题及Hadoop相关另行总结)

编写集群分发脚本xsync

1)xsync集群分发脚本

需求:循环复制文件到所有节点的相同目录下

需求分析:

①rsync命令原始拷贝

rsync -av /opt/module root@hadoop103:/opt/

②期望脚本:xsync要同步的文件名称

③说明:在/home/atguigu/bin这个目录下存放的脚本,atguigu用户可以在系统任何地方直接执行。

[atguigu@hadoop102 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/atguigu/.local/bin:/home/atguigu/bin

脚本实现:

①在用的家目录/home/atguigu下创建bin文件夹

[atguigu@hadoop102 ~]$ mkdir bin

②在/home/atguigu/bin目录下创建xsync文件,以便全局调用

[atguigu@hadoop102 ~]$ cd /home/atguigu/bin
[atguigu@hadoop102 ~]$ vim xsync

在该文件中编写如下代码

#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi

#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e KaTeX parse error: Expected 'EOF', got '#' at position 13: file ] then #̲5. 获取父目录 pdir=(cd -P $(dirname KaTeX parse error: Expected 'EOF', got '#' at position 13: file); pwd) #̲6. 获取当前文件的名称 fn…(basename $file)
ssh $host “mkdir -p $pdir”
rsync -av p d i r / pdir/ pdir/fname h o s t : host: host:pdir
else
echo $file does not exists!
fi
done
done

③修改脚本xsync具有执行权限

[atguigu@hadoop102 bin]$ chmod 777 xsync

④测试脚本

atguigu@hadoop102 bin]$ xsync xsync

SSH无密登录配置

说明:这里面只配置了hadoop102、hadoop103到其他主机的无密登录;因为hadoop102配置的是NameNode,hadoop103配置的是ResourceManager,都要求对其他节点无密访问。

1)hadoop102上生成公钥和私钥:

[atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)。

2)将hadoop102公钥拷贝到要免密登录的目标机器上

[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104

3)hadoop103上生成公钥和私钥:

[atguigu@hadoop103 .ssh]$ ssh-keygen -t rsa

4)拷贝操作亦同hadoop102

JDK准备

1)卸载三台节点上的现有JDK

[atguigu@hadoop102 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps

[atguigu@hadoop103 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps

[atguigu@hadoop104 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps

操作批注:

(1)rpm -qa:表示查询所有已经安装的软件包

(2)grep -i:表示过滤时不区分大小写

(3)xargs -n1:表示一次获取上次执行结果的一个值

(4)rpm -e --nodeps:表示卸载软件

2)用XShell工具将JDK导入到hadoop102的****/opt/****software文件夹下面

3)在Linux系统下的opt目录查看是否导入成功(ls)

4)解压JDK到****/opt/module目录下****(tar)

[atguigu@hadoop102 software]# tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

[atguigu@hadoop102 module]$ mv jdk1.8.0_212/ jdk-1.8.0

5)配置JDK环境变量

(1)新建/etc/profile.d/my_env.sh文件(在module下sudo vim)

添加如下内容,然后保存(:wq)退出。

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk-1.8.0
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin

(2)让环境变量生效

[atguigu@hadoop102 software]$ source /etc/profile.d/my_env.sh

6)测试安装是否成功(java -version)

7)分发JDK(执行刚才的xsync脚本)

[atguigu@hadoop102 module]$ xsync /opt/module/jdk-1.8.0

8)分发环境变量配置文件

[atguigu@hadoop102 module]$ sudo /home/atguigu/bin/xsync /etc/profile.d/my_env.sh

9)在hadoop103,hadoop104上分别执行source

环境变量配置说明

Linux的环境变量可在多个文件中配置,如/etc/profile,/etc/profile.d/*.sh,/.bashrc,/.bash_profile等,下面说明上述几个文件之间的关系和区别。

bash的运行模式可以分为 login shell 和 non-login shell

(例如,我们通过终端,输入用户名、密码,登录系统之后,得到就是一个login shell。而当我们执行以下命令ssh hadoop103 command,在hadoop103执行command的就是一个non-login shell。)

这两种shell的主要区别在于,它们启动时会加载不同的配置文件,login shell启动时会加载/etc/profile,/.bash_profile,/.bashrc。non-login shell启动时会加载~/.bashrc。

数据模拟

1)将application.ymlgmall-remake-mock-2023-02-17.jarpath.jsonlogback.xml上传到hadoop102的/opt/module/applog目录下(需要 mkdir创建)

2)配置文件

①application.yml文件:可以根据需求生成对应日期的用户行为日志

vim出文件后修改内容(照搬尚硅谷,太繁琐。。)

外部配置打开

logging.config: ./logback.xml

#http模式下,发送的地址
mock:
log:
type: “file” #“file” “http” “kafka” “none”
http:
url: “http://localhost:8090/applog”
kafka:
server: “hadoop102:9092,hadoop102:9092,hadoop102:9092”
topic: “topic_log”

spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
url: jdbc:mysql://hadoop102:3306/gmall?characterEncoding=utf-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=GMT%2B8
username: root
password: “000000”
driver-class-name: com.mysql.cj.jdbc.Driver
max-active: 20
test-on-borrow: true

mybatis-plus.global-config.db-config.field-strategy: not_null
mybatis-plus:
mapper-locations: classpath:mapper/*.xml

mybatis:
mapper-locations: classpath:mapper/*.xml

#业务日期, 并非Linux系统时间的日期,而是生成模拟数据的日期
mock.date: “2022-06-08”

日志是否写入数据库一份 写入z_log表中

mock.log.db.enable: 1

清空

mock.clear.busi: 1

清空用户

mock.clear.user: 0

批量生成新用户

mock.new.user: 0
#session次数
mock.user-session.count: 200
#设备最大值
mock.max.mid: 1000000

是否针对实时生成数据,若启用(置为1)则数据的 yyyy-MM-dd 与 mock.date 一致而 HH:mm:ss 与系统时间一致;若禁用则数据的 yyyy-MM-dd 与 mock.date 一致而 HH:mm:ss 随机分布,此处禁用

mock.if-realtime: 0
#访问时间分布权重
mock.start-time-weight: “10:5:0:0:0:0:5:5:5:10:10:15:20:10:10:10:10:10:20:25:30:35:30:20”

#支付类型占比 支付宝 :微信 :银联
mock.payment_type_weight: “40:50:10”

#页面平均访问时间
mock.page.during-time-ms: 20000
#错误概率 百分比
mock.error.rate: 3
#每条日志发送延迟 ms
mock.log.sleep: 100
#课程详情来源 用户查询,商品推广,智能推荐, 促销活动
mock.detail.source-type-rate: “40:25:15:20”

mock.if-cart-rate: 100

mock.if-favor-rate: 70

mock.if-order-rate: 100

mock.if-refund-rate: 50

#搜索关键词
mock.search.keyword: “java,python,多线程,前端,数据库,大数据,hadoop,flink”

#用户数据变化概率
mock.user.update-rate: 20

男女浏览品牌比重(11 品牌)

mock.tm-weight.male: “3:2:5:5:5:1:1:1:1:1:1”
mock.tm-weight.female: “1:5:1:1:2:2:2:5:5:5:5”

外连类型比重(5 种)

mock.refer-weight: “10:2:3:4:5”

线程池相关配置

mock.pool.core: 20
mock.pool.max-core: 100

②path.json, 用来配置访问路径,根据需求可以灵活配置用户点击路径

[
{“path”:[“start_app”,“home”, “search”, “good_list”,“good_detail”,“good_detail” ,“good_detail”,“cart”,“order”,“payment”,“mine”,“order_list”,“end”],“rate”:100 },
{“path”:[“start_app”,“home”, “good_list”,“good_detail”,“good_detail” ,“good_detail”,“cart”,“end”],“rate”:30 },
{“path”:[“start_app”,“home”, “activity1111”,“good_detail” ,“cart”,“good_detail”,“cart”,“order”,“payment”,“end”],“rate”:30 },
{“path”:[ “activity1111”,“good_detail” ,“activity1111” ,“good_detail”,“order”,“payment”,“end”],“rate”:200 },
{“path”:[ “start_app”,“home” ,“activity1111” ,“good_detail”,“order”,“payment”,“end”],“rate”:200 },
{“path”:[ “start_app”,“home” , “good_detail”,“order”,“payment”,“end”],“rate”:30 },
{“path”:[ “good_detail”,“order”,“payment”,“end”],“rate”:650 },
{“path”:[ “good_detail” ],“rate”:30 },
{“path”:[ “start_app”,“home”,“mine”,“good_detail” ],“rate”:30 },
{“path”:[ “start_app”,“home”, “good_detail”,“good_detail”,“good_detail”,“cart”,“order”,“payment”,“end” ],“rate”:200 },
{“path”:[ “start_app”,“home”, “search”,“good_list”,“good_detail”,“cart”,“order”,“payment”,“end” ],“rate”:200 }
]

③logback配置文件,可配置日志生成路径

<?xml version="1.0" encoding="UTF-8"?> System.out %msg%n System.err %msg%n ${LOG_HOME}/app.log ${LOG_HOME}/app.%d{yyyy-MM-dd}.log %msg%n

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
img

到现在。**

深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
[外链图片转存中…(img-FpUwVqiS-1712587169387)]
[外链图片转存中…(img-NzI8kSQk-1712587169388)]
[外链图片转存中…(img-5qmks4JM-1712587169388)]
[外链图片转存中…(img-2GxFN4al-1712587169388)]
[外链图片转存中…(img-RNBFU5l4-1712587169389)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
[外链图片转存中…(img-PmMPn4UW-1712587169389)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值