31 大数据项目之电商数仓(用户行为数据采集)

文章目录

第1章 大数据项目之电商数仓(用户行为数据采集)

在这里插入图片描述

第2章 项目需求

2.1 项目需求分析

在这里插入图片描述

2.2 项目框架

2.2.1 技术选型

在这里插入图片描述

2.2.2 系统架构图设计

在这里插入图片描述

2.2.3 系统数据流程设计

在这里插入图片描述

2.2.4 框架版本选型

在这里插入图片描述
在这里插入图片描述

2.2.5 服务器选型

在这里插入图片描述

2.2.6 集群资源规划设计

在这里插入图片描述
3台(16g,6,4,4)
在这里插入图片描述
10台
在这里插入图片描述

第3章 数据生成模块

3.1 埋点数据基本格式

公共字段:基本所有安卓手机都包含的字段
业务字段:埋点上报的字段,有具体的业务类型
下面就是一个示例,表示业务字段的上传。

在这里插入图片描述
在这里插入图片描述

3.2 事件日志数据

3.2.1 商品列表页(loading)

在这里插入图片描述
在这里插入图片描述

3.2.2 商品点击(display)

在这里插入图片描述

3.2.3 商品详情页(newsdetail)

在这里插入图片描述

在这里插入图片描述

3.2.4 广告(ad)

在这里插入图片描述
在这里插入图片描述

3.2.5 消息通知(notification)

在这里插入图片描述

3.2.6 用户后台活跃(active_background)

在这里插入图片描述

3.2.7 评论(comment)

在这里插入图片描述
在这里插入图片描述

3.2.8 收藏(favorites)

在这里插入图片描述

3.2.9 点赞(praise)

在这里插入图片描述
在这里插入图片描述

3.2.10 错误日志数据

在这里插入图片描述

3.3 启动日志数据

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.5 数据生成脚本

在这里插入图片描述

3.5.1 创建Maven工程

1)创建log-collector
在这里插入图片描述
2)创建一个包名:com.atguigu.appclient
3)在com.atguigu.appclient包下创建一个类,AppMain。
4)在pom.xml文件中添加如下内容

<!--版本号统一-->
<properties>
    <slf4j.version>1.7.20</slf4j.version>
    <logback.version>1.0.7</logback.version>
</properties>

<dependencies>
    <!--阿里巴巴开源json解析框架-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.51</version>
    </dependency>

    <!--日志生成框架-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${
   slf4j.version}</version>
    </dependency>

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>${
   logback.version}</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${
   logback.version}</version>
    </dependency>
</dependencies>

<!--编译打包插件-->
<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin </artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>com.atguigu.appclient.AppMain</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
在这里插入代码片

注意:com.atguigu.appclient.AppMain要和自己建的全类名一致。

3.5.2 公共字段Bean

1)创建包名:com.atguigu.bean
2)在com.atguigu.bean包下依次创建如下bean对象

package com.atguigu.bean;
/**
 * 公共日志
 */
public class AppBase{
   

    private String mid; // (String) 设备唯一标识
    private String uid; // (String) 用户uid
    private String vc;  // (String) versionCode,程序版本号
    private String vn;  // (String) versionName,程序版本名
    private String l;   // (String) 系统语言
    private String sr;  // (String) 渠道号,应用从哪个渠道来的。
    private String os;  // (String) Android系统版本
    private String ar;  // (String) 区域
    private String md;  // (String) 手机型号
    private String ba;  // (String) 手机品牌
    private String sv;  // (String) sdkVersion
    private String g;   // (String) gmail
    private String hw;  // (String) heightXwidth,屏幕宽高
    private String t;   // (String) 客户端日志产生时的时间
    private String nw;  // (String) 网络模式
    private String ln;  // (double) lng经度
    private String la;  // (double) lat 纬度

    public String getMid() {
   
        return mid;
    }

    public void setMid(String mid) {
   
        this.mid = mid;
    }

    public String getUid() {
   
        return uid;
    }

    public void setUid(String uid) {
   
        this.uid = uid;
    }

    public String getVc() {
   
        return vc;
    }

    public void setVc(String vc) {
   
        this.vc = vc;
    }

    public String getVn() {
   
        return vn;
    }

    public void setVn(String vn) {
   
        this.vn = vn;
    }

    public String getL() {
   
        return l;
    }

    public void setL(String l) {
   
        this.l = l;
    }

    public String getSr() {
   
        return sr;
    }

    public void setSr(String sr) {
   
        this.sr = sr;
    }

    public String getOs() {
   
        return os;
    }

    public void setOs(String os) {
   
        this.os = os;
    }

    public String getAr() {
   
        return ar;
    }

    public void setAr(String ar) {
   
        this.ar = ar;
    }

    public String getMd() {
   
        return md;
    }

    public void setMd(String md) {
   
        this.md = md;
    }

    public String getBa() {
   
        return ba;
    }

    public void setBa(String ba) {
   
        this.ba = ba;
    }

    public String getSv() {
   
        return sv;
    }

    public void setSv(String sv) {
   
        this.sv = sv;
    }

    public String getG() {
   
        return g;
    }

    public void setG(String g) {
   
        this.g = g;
    }

    public String getHw() {
   
        return hw;
    }

    public void setHw(String hw) {
   
        this.hw = hw;
    }

    public String getT() {
   
        return t;
    }

    public void setT(String t) {
   
        this.t = t;
    }

    public String getNw() {
   
        return nw;
    }

    public void setNw(String nw) {
   
        this.nw = nw;
    }

    public String getLn() {
   
        return ln;
    }

    public void setLn(String ln) {
   
        this.ln = ln;
    }

    public String getLa() {
   
        return la;
    }

    public void setLa(String la) {
   
        this.la = la;
    }
}

3.5.3 启动日志Bean

package com.atguigu.bean;
/**
 * 启动日志
 */
public class AppStart extends AppBase {
   

    private String entry;//入口: push=1,widget=2,icon=3,notification=4, lockscreen_widget =5
    private String open_ad_type;//开屏广告类型:  开屏原生广告=1, 开屏插屏广告=2
    private String action;//状态:成功=1  失败=2
    private String loading_time;//加载时长:计算下拉开始到接口返回数据的时间,(开始加载报0,加载成功或加载失败才上报时间)
    private String detail;//失败码(没有则上报空)
    private String extend1;//失败的message(没有则上报空)
    private String en;//启动日志类型标记

    public String getEntry() {
   
        return entry;
    }

    public void setEntry(String entry) {
   
        this.entry = entry;
    }

    public String getOpen_ad_type() {
   
        return open_ad_type;
    }

    public void setOpen_ad_type(String open_ad_type) {
   
        this.open_ad_type = open_ad_type;
    }

    public String getAction() {
   
        return action;
    }

    public void setAction(String action) {
   
        this.action = action;
    }

    public String getLoading_time() {
   
        return loading_time;
    }

    public void setLoading_time(String loading_time) {
   
        this.loading_time = loading_time;
    }

    public String getDetail() {
   
        return detail;
    }

    public void setDetail(String detail) {
   
        this.detail = detail;
    }

    public String getExtend1() {
   
        return extend1;
    }

    public void setExtend1(String extend1) {
   
        this.extend1 = extend1;
    }

    public String getEn() {
   
        return en;
    }

    public void setEn(String en) {
   
        this.en = en;
    }
}

3.5.4 事件日志Bean之商品点击

package com.atguigu.bean;
/**
 * 商品点击日志
 */
public class AppDisplay {
   

    private String action;//动作:曝光商品=1,点击商品=2,
    private String goodsid;//商品ID(服务端下发的ID)
    private String place;//顺序(第几条商品,第一条为0,第二条为1,如此类推)
    private String extend1;//曝光类型:1 - 首次曝光 2-重复曝光(没有使用)
    private String category;//分类ID(服务端定义的分类ID)

    public String getAction() {
   
        return action;
    }

    public void setAction(String action) {
   
        this.action = action;
    }

    public String getGoodsid() {
   
        return goodsid;
    }

    public void setGoodsid(String goodsid) {
   
        this.goodsid = goodsid;
    }

    public String getPlace() {
   
        return place;
    }

    public void setPlace(String place) {
   
        this.place = place;
    }

    public String getExtend1() {
   
        return extend1;
    }

    public void setExtend1(String extend1) {
   
        this.extend1 = extend1;
    }

    public String getCategory() {
   
        return category;
    }

    public void setCategory(String category) {
   
        this.category = category;
    }
}

3.5.5 事件日志Bean之商品详情页

package com.atguigu.bean;
/**
 * 商品详情
 */
public class AppNewsDetail {
   

    private String entry;//页面入口来源:应用首页=1、push=2、详情页相关推荐=3
    private String action;//动作:开始加载=1,加载成功=2(pv),加载失败=3, 退出页面=4
    private String goodsid;//商品ID(服务端下发的ID)
    private String showtype;//商品样式:0、无图1、一张大图2、两张图3、三张小图4、一张小图5、一张大图两张小图    来源于详情页相关推荐的商品,上报样式都为0(因为都是左文右图)
    private String news_staytime;//页面停留时长:从商品开始加载时开始计算,到用户关闭页面所用的时间。若中途用跳转到其它页面了,则暂停计时,待回到详情页时恢复计时。或中途划出的时间超过10分钟,则本次计时作废,不上报本次数据。如未加载成功退出,则报空。
    private String loading_time;//加载时长:计算页面开始加载到接口返回数据的时间 (开始加载报0,加载成功或加载失败才上报时间)
    private String type1;//加载失败码:把加载失败状态码报回来(报空为加载成功,没有失败)
    private String category;//分类ID(服务端定义的分类ID)

    public String getEntry() {
   
        return entry;
    }

    public void setEntry(String entry) {
   
        this.entry = entry;
    }

    public String getAction() {
   
        return action;
    }

    public void setAction(String action) {
   
        this.action = action;
    }

    public String getGoodsid() {
   
        return goodsid;
    }

    public void setGoodsid(String goodsid) {
   
        this.goodsid = goodsid;
    }

    public String getShowtype() {
   
        return showtype;
    }

    public void setShowtype(String showtype) {
   
        this.showtype = showtype;
    }

    public String getNews_staytime() {
   
        return news_staytime;
    }

    public void setNews_staytime(String news_staytime) {
   
        this.news_staytime = news_staytime;
    }

    public String getLoading_time() {
   
        return loading_time;
    }

    public void setLoading_time(String loading_time) {
   
        this.loading_time = loading_time;
    }

    public String getType1() {
   
        return type1;
    }

    public void setType1(String type1) {
   
        this.type1 = type1;
    }

    public String getCategory() {
   
        return category;
    }

    public void setCategory(String category) {
   
        this.category = category;
    }
}

3.5.6 事件日志Bean之商品列表页

package com.atguigu.bean;
/**
 * 商品列表
 */
public class AppLoading {
   
    private String action;//动作:开始加载=1,加载成功=2,加载失败=3
    private String loading_time;//加载时长:计算下拉开始到接口返回数据的时间,(开始加载报0,加载成功或加载失败才上报时间)
    private String loading_way;//加载类型:1-读取缓存,2-从接口拉新数据   (加载成功才上报加载类型)
    private String extend1;//扩展字段 Extend1
    private String extend2;//扩展字段 Extend2
    private String type;//加载类型:自动加载=1,用户下拽加载=2,底部加载=3(底部条触发点击底部提示条/点击返回顶部加载)
    private String type1;//加载失败码:把加载失败状态码报回来(报空为加载成功,没有失败)

    public String getAction() {
   
        return action;
    }

    public void setAction(String action) {
   
        this.action = action;
    }

    public String getLoading_time() {
   
        return loading_time;
    }

    public void setLoading_time(String loading_time) {
   
        this.loading_time = loading_time;
    }

    public String getLoading_way() {
   
        return loading_way;
    }

    public void setLoading_way(String loading_way) {
   
        this.loading_way = loading_way;
    }

    public String getExtend1() {
   
        return extend1;
    }

    public void setExtend1(String extend1) {
   
        this.extend1 = extend1;
    }

    public String getExtend2() {
   
        return extend2;
    }

    public void setExtend2(String extend2) {
   
        this.extend2 = extend2;
    }

    public String getType() {
   
        return type;
    }

    public void setType(String type) {
   
        this.type = type;
    }

    public String getType1() {
   
        return type1;
    }

    public void setType1(String type1) {
   
        this.type1 = type1;
    }
}

3.5.7 事件日志Bean之广告

package com.atguigu.bean;
/**
 * 广告
 */
public class AppAd {
   

    private String entry;//入口:商品列表页=1  应用首页=2 商品详情页=3
    private String action;//动作: 广告展示=1 广告点击=2
    private String contentType;//Type: 1 商品 2 营销活动
    private String displayMills;//展示时长 毫秒数
    private String itemId; //商品id
    private String activityId; //营销活动id


    public String getEntry() {
   
        return entry;
    }

    public void setEntry(String entry) {
   
        this.entry = entry;
    }

    public String getAction() {
   
        return action;
    }

    public void setAction(String action) {
   
        this.action = action;
    }

    public String getActivityId() {
   
        return activityId;
    }

    public void setActivityId(String activityId) {
   
        this.activityId = activityId;
    }

    public String getContentType() {
   
        return contentType;
    }

    public void setContentType(String contentType) {
   
        this.contentType = contentType;
    }

    public String getDisplayMills() {
   
        return displayMills;
    }

    public void setDisplayMills(String displayMills) {
   
        this.displayMills = displayMills;
    }

    public String getItemId() {
   
        return itemId;
    }

    public void setItemId(String itemId) {
   
        this.itemId = itemId;
    }
}

3.5.8 事件日志Bean之消息通知

package com.atguigu.bean;
/**
 * 消息通知日志
 */
public class AppNotification {
   
    private String action;//动作:通知产生=1,通知弹出=2,通知点击=3,常驻通知展示(不重复上报,一天之内只报一次)=4
    private String type;//通知id:预警通知=1,天气预报(早=2,晚=3),常驻=4
    private String ap_time;//客户端弹出时间
    private String content;//备用字段

    public String getAction() {
   
        return action;
    }

    public void setAction(String action) {
   
        this.action = action;
    }

    public String getType() {
   
        return type;
    }

    public void setType(String type) {
   
        this.type = type;
    }

    public String getAp_time() {
   
        return ap_time;
    }

    public void setAp_time(String ap_time) {
   
        this.ap_time = ap_time;
    }

    public String getContent() {
   
        return content;
    }

    public void setContent(String content) {
   
        this.content = content;
    }
}

3.5.9 错误日志 Bean

package com.atguigu.bean;
/**
 * 错误日志
 */
public class AppErrorLog {
   

    private String errorBrief;    //错误摘要
    private String errorDetail;   //错误详情

    public String getErrorBrief() {
   
        return errorBrief;
    }

    public void setErrorBrief(String errorBrief) {
   
        this.errorBrief = errorBrief;
    }

    public String getErrorDetail() {
   
        return errorDetail;
    }

    public void setErrorDetail(String errorDetail) {
   
        this.errorDetail = errorDetail;
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值