概述
本文是基于 Hadoop + Hive + HDFS + DataX + MySQL 的会员主题与广告业务链路验证实战文章。
一、数据测试
1.1 活跃会员 DWS
sh dws_load_member_start.sh 2020-07-21
1.2 活跃会员 ADS
sh ads_load_member_active.sh 2020-07-21
1.3 新增会员 DWS
sh dws_load_member_add_day.sh 2020-07-21
1.4 新增会员 ADS
sh ads_load_member_add.sh 2020-07-21
1.5 会员留存 DWS
sh dws_load_member_retention_day.sh 2020-07-21
1.6 会员留存 ADS
sh ads_load_member_retention.sh 2020-07-21
二、导出测试
2.1 HDFS 导出
数据存储在 HDFS 上,可通过 HDFS 命令查看。
2.2 DataX 导出
sh /opt/wzk/hive/export_member_active_count.sh 2020-07-21
2.3 MySQL 验证
运行 07-21 到 07-31 的数据后,可在 MySQL 中查询结果进行验证。
三、广告业务 ODS/DWD/ADS
3.1 基本介绍
互联网平台通过免费基础服务吸引用户,利用广告业务实现盈利。电商平台天然适合进行商品推广,广告投放关注曝光量、点击量、购买量、点击率、购买率等指标。
3.2 事件日志数据样例
{
"wzk_event": [{
"name": "goods_detail_loading",
"json": {
"entry": "3",
"goodsid": "0",
"loading_time": "80",
"action": "4",
"staytime": "68",
"showtype": "4"
},
"time": 1596225273755
}, {
"name": "ad",
"json": {
"duration": "17",
"ad_action": "0",
"shop_id": "786",
"event_type": "ad",
"ad_type": "4",
"show_style": "1",
"product_id": "2772",
"place": "placeindex_left",
"sort": "0"
},
"time": 1596278404415
}],
"attr": {
"area": "拉萨",
"uid": "2F10092A86",
"app_v": "1.1.12",
"device_id": "1FB872-9A10086",
"os_type": "4.1",
"channel": "KS",
"brand": "xiaomi-2"
}
}
3.3 采集的事件类型
- goods_detail_loading:商品详情页加载
- loading:商品列表
- notification:消息通知
- comment:商品评论
- favorites:收藏
- praise:点赞
- ad:广告
3.4 广告字段说明
| 字段 | 说明 |
|---|---|
| action | 用户行为:0 曝光、1 点击、2 购买 |
| duration | 停留时长 |
| shop_id | 商家 id |
| ad_type | 广告类型:1 JPG、2 PNG、3 GIF、4 SWF |
| show_style | 展示样式:0 静态图、1 动态图 |
| product_id | 产品 id |
| place | 广告位:1 首页、2 左侧、3 右侧、4 列表页 |
3.5 需求指标
点击次数统计(分时统计):
- 曝光次数、不同用户 ID 数、不同用户数
- 点击次数、不同用户 ID 数、不同用户数
- 购买次数、不同用户 ID 数、不同用户数
转化率-漏斗分析:
- 点击率 = 点击次数 / 曝光次数
- 购买率 = 购买次数 / 点击次数
活动曝光效果评估: 按时间段、广告位、产品统计曝光次数最多的前 N 个。
3.6 ODS 层建表
use ods;
drop table if exists ods.ods_log_event;
CREATE EXTERNAL TABLE ods.ods_log_event(
`str` string
) PARTITIONED BY (`dt` string)
STORED AS TEXTFILE
LOCATION '/user/data/logs/event';
3.7 ODS 层脚本
#!/bin/bash
source /etc/profile
if [ -n "$1" ]
then
do_date=$1
else
do_date=`date -d "-1 day" +%F`
fi
sql="
alter table ods.ods_log_event add partition (dt='$do_date');
"
hive -e "$sql"
四、常见问题速查
| 症状 | 根因 | 修复方法 |
|---|---|---|
| ADS 脚本执行报错 | 脚本名称拼写错误 | 对照实际文件名更正 |
| Hive 查不到当天数据 | ODS 分区未添加 | 先执行 ods_load_event_log.sh 补充分区 |
| DataX 成功但 MySQL 无数据 | 源路径无文件或日期不一致 | 核对 HDFS 路径、DataX 配置与目标表 |
| 广告指标口径对不上 | action 字段取值与 SQL 逻辑未映射 | 固化口径:0=曝光,1=点击,2=购买 |