大数据开发(日志离线分析项目)

大数据开发(日志离线分析项目)

  • 一、项目需求
    • 1、使用jquery+echarts的方式调用程序后台提供的rest api接口,获取json数据,然后通过jquery+css的方式进行数据展示。工作流程如下:
    • 2、七大角度
      • 1、用户基本信息分析模块
      • 2、浏览器信息分析模块
      • 3、地域信息分析模块
      • 4、用户浏览深度分析模块
      • 5、外链数据分析模块
      • 6、订单分析模块
      • 7、事件分析模块
  • 二、系统架构
    • 1、数据流程设计
    • 2、如何确定集群规模?
    • 3、测试服务器规划
  • 三、JS SDK
    • 1、概述
    • 2、执行工作流
    • 3、数据参数说明
    • 4、事件分析
      • 4.1 概述
      • 4.2 launch事件
      • 4.3 pageview事件
      • 4.4 chargeRequest事件
      • 4.5 event事件
  • 四、JAVA SDK
    • 1、执行工作流
    • 2、程序后台事件分析
      • 2.1 chargesuccess事件
      • 2.2 chargerrefund事件
  • 五、数据来源设计
    • 1、项目搭建
    • 2、配置tomcat
    • 3、代码分析
      • 3.1 js代码分析
      • 3.2 java代码分析
  • 六、nginx和flume应用
    • 1、添加nginx服务与开机启动
    • 2、Nginx日志格式配置
    • 3、项目中flume的配置
  • 七、ETL
    • 1、解析思路
  • 八、新增用户数据处理
    • 1、数据库和表
    • 2、维度相关类
    • 3、Mapper和Reducer输出Value类
    • 4、添加写入MySQL表相关类
    • 5、Runner开发
    • 6、Mapper开发
    • 7、Reducer开发
  • 九、活跃用户数据处理
    • 1、ActiveUserRunner开发提示
    • 2、Mapper开发提示
    • 3、Reducer开发提示
  • 十、Sqoop
  • 十一、用户浏览深度分析
    • 1、hql编写
    • 2、Hive中创建表
    • 3、hql行转列
    • 4、完善hql
    • 5、编写UDF类
    • 6、Hive创建函数
    • 7、sqoop脚本编写

一、项目需求

1、使用jquery+echarts的方式调用程序后台提供的rest api接口,获取json数据,然后通过jquery+css的方式进行数据展示。工作流程如下:

在这里插入图片描述

2、七大角度

1、用户基本信息分析模块

1、用户分析
分析新增用户、活跃用户以及总用户的相关信息。
2、会员分析
分析新增会员、活跃会员以及总会员的相关信息。
3、会话分析
分析会话个数、会话长度和平均会话长度相关的信息。
4、Hourly分析
分析每天每小时的用户、会话个数以及会话长度的相关信息。

2、浏览器信息分析模块

1、用户分析
2、会员分析
3、会话分析
4、浏览器pv分析
pv:访问页面的数量pageview

3、地域信息分析模块

1、活跃访客地域分析
分析各个不同地域的活跃访客数量
2、跳出率分析
分析各个不同地域的跳出率情况。(没有进行二次浏览行为,直接退出网站)

4、用户浏览深度分析模块

用户在一次会话中访问页面的数量。pv/uv(uv:cookie中的uuid数量)

5、外链数据分析模块

1、外链偏好分析
分析各个外链带来的活跃访客数量
2、外链会话(跳出率)分析

6、订单分析模块

7、事件分析模块

二、系统架构

1、数据流程设计

在这里插入图片描述

2、如何确定集群规模?

1、考虑自己单台服务器的配置
2、其次要考虑的是每日的数据规模:每日活跃用户、用户平均每日数据量
3、副本策略:一般2~3个副本
4、扩容周期:半年不扩容
5、预留空间:一般20%~30%

3、测试服务器规划

在这里插入图片描述

三、JS SDK

1、概述

不采用ip来标识用户的唯一性,通过在cookie中填充一个uuid来标识用户的唯一性。
埋点:在页面(jsp或html)中植入js代码。

2、执行工作流

在这里插入图片描述

3、数据参数说明

在各个不同事件中收集不同的数据发送到nginx服务器。
在这里插入图片描述
在这里插入图片描述

4、事件分析

4.1 概述

用户基本信息:pageview事件+launch事件
浏览器信息分析:在用户基本信息分析的基础上添加浏览器这个维度信息,pageview事件
地域信息:通过nginx服务器来收集用户的ip地址来进行分析,pageview事件
外链数据分析、用户浏览深度分析:在pageview事件中添加访问页面的当前url和前一个页面的url,pageview事件
订单信息分析:chargeRequest
自定义事件分析:需要一个pc端发送一个新的事件数据,定义为event。还需要设置一个launch事件来记录新用户的访问。event事件+launch事件

4.2 launch事件

用户第一次访问网站的时候触发该事件
在这里插入图片描述

4.3 pageview事件

当用户访问页面/刷新页面的时候触发该事件
在这里插入图片描述

4.4 chargeRequest事件

用户下订单的时候触发该事件
在这里插入图片描述

在这里插入图片描述

4.5 event事件

当访客/用户触发业务定义的事件后,前端程序调用该方法。
在这里插入图片描述

在这里插入图片描述

四、JAVA SDK

发送支付成功/退款成功的信息给nginx服务器。

1、执行工作流

在这里插入图片描述

2、程序后台事件分析

发送订单支付成功的信息给nginx服务器。

2.1 chargesuccess事件

支付成功
在这里插入图片描述
在这里插入图片描述

2.2 chargerrefund事件

订单退款
在这里插入图片描述
在这里插入图片描述

五、数据来源设计

埋点的使用,js相关方法以及java的相关方法

1、项目搭建

2、配置tomcat

3、代码分析

3.1 js代码分析

3.2 java代码分析

1、订单支付成功事件
AnalyticsEngineSDK.onChargeSuccess(…)方法
触发订单支付成功事件,发送事件数据到Nginx服务器
param orderId 订单支付id
param memberId 订单支付会员id
如果发送数据成功(加入到发送队列中),那么返回true;否则返回false(参数异常&添加到发送队列失败)。
2、订单退款成功事件
触发订单退款事件,发送退款数据到服务器
param orderId 退款订单id
param memberId 退款会员id
如果发送数据成功,返回true。否则返回false。

六、nginx和flume应用

1、添加nginx服务与开机启动

2、Nginx日志格式配置

3、项目中flume的配置

项目当中如何收集Nginx产生的日志?
监控日志文件/opt/data/access.log,将采集到的日志存放到hdfs文件系统的/log/目录下,并以yyyyMMdd为子目录分别存放每天的数据。

七、ETL

1、解析思路

1、通过^A进行拆分,不足四部分的数据不符合要求,过滤掉。
2、?后面的内容按照 & 进行拆分
3、在按照=进行拆分
4、判断参数en的值如果不是6种事件类型的过滤掉。
5、192.168.20.1 换算成地域
6、1642391346.792 时间
7、浏览器相关信息提取处理

八、新增用户数据处理

1、数据库和表

2、维度相关类

1、维度类图
浏览器维度、时间维度、KPI维度、平台维度
通过以上四个维度的各种组合,计算它的新增用户指标
2、BaseDimension类
3、BrowserDimension类
唯一标识id、名称、版本
4、PlatformDimension类
id、platformName
5、KpiDimension类
id、kpiName
6、DateDimension类
id、year、season、month、week、day、type、calendar
7、StatsDimesion类
8、StatsCommonDimesion类
9、 StatsUserDimesion类
10、KpiType类

3、Mapper和Reducer输出Value类

1、BaseStatsValueWritable类
获取当前value对应的kpi值
2、TimeOutputValue类
Mapper类输出的Value对应类型的类
id、time
3、MapWritableValue类
Reducer输出要写入mysql的表中,那么就存在以下两个问题:
1.把数据写入到哪个表中?比如new_install_user->query-mapping.xml中找namenew_install_user插入sql语句
2.对应表中一行记录的数据内容

4、添加写入MySQL表相关类

5、Runner开发

Job流程:
1、从hbase的eventlog表中读取数据
2、Mapper中对数据列表进行纬度的组合
3、Reducer聚合操作
4、数据放到MySQL对应的表中
hbase表查询:
en,s_time,pl,u_ud,browser,browser_v,kpi
条件 lanuch en=e_l (条件)和 时间范围
注意:kpi 模块 new_install_user,browser_new_install_user
通过List来完成如下操作:
1、scan添加过滤器,startKey stopKey
2、指定en=e_l的查询条件
3、指定要获取的列名MultipleColumnPrefixFilter
4、指定表名

6、Mapper开发

四个纬度:时间、浏览器、平台、模块
组合四个纬度,向输出外键值对信息。
维度组合有多少种?
各个维度的种类相乘得到结果
修改EventLogConstants类,添加两个常量:new_install_user、browser_new_install_user

7、Reducer开发

由于统计的是用户的数量,需要对log进行uuid的过滤,因为同一个人有可能点击了多次。

九、活跃用户数据处理

只要在指定的日期中出现过一次PageView的用户便被称为活跃用户。
查询哪些列?
en,s_time,browser_name,browser_version,platform,uuid
查询的过滤条件?
事件类型:en=e_pv
指定日期:>=yyyy-MM-dd 00:00:0 并且 < yyyy-MM-dd+1
00:00:00

1、ActiveUserRunner开发提示

1、创建日志记录对象
2、声明配置文件对象
3、设置Reducer相关参数、设置OutputFormat类、提交作业
4、处理日期参数
从传入的参数中获取日期,如果日期不合法或没有,则使用当前系统时间的昨天,将日期添加配置文件对象,设置相关参数,加载三个配置文件,配置文件处理

2、Mapper开发提示

声明并实例化输出的key和value对象
声明并实例化Kpi维度对象
声明日期维度对象
声明平台维度集合对象
声明浏览器维度集合对象
从value获取服务器时间
从value获取用户id
从value获取平台
从value获取浏览器名称
从value获取浏览器版本
构建单一维度对象或集合对象 日期、平台、浏览器
构建组合维度对象
循环遍历输出

3、Reducer开发提示

声明并实例化输出的value对象
去重,定义Set集合
清空集合,排除上一组数据的干扰
遍历values,将获取出的uuid添加到Set集合对象中
声明并实例MapWritable对象 mapw
将获取用户的数量添加到mapw中
并将mapw封装到Reduce输出的value对象中
kpi维度处理

十、Sqoop

将关系数据库(oracle、mysql、sqlserver等)数据与hadoop、hive、hbase等数据进行转换的工具。同类产品DataX(阿里顶级数据交换工具)
MR中通过InputFormat和OutputFormat配置MR的输入和输出

十一、用户浏览深度分析

通过hive和hbase的整合,编写hql分析语句,将分析后的结果
放入到hive的结果表中,然后通过sqoop导出到mysql的结果表中。

1、hql编写

2、Hive中创建表

3、hql行转列

4、完善hql

5、编写UDF类

6、Hive创建函数

7、sqoop脚本编写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/492325.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

秋招刷题2

1.字符串分割 public static void main(String[] args) {Scanner scnew Scanner(System.in);while(sc.hasNext()){String strsc.nextLine();StringBuilder sbnew StringBuilder();sb.append(str);int sizestr.length();int addZero8-size%8;while((addZero>0&&(addZ…

【数据结构】受限制的线性表——队列

&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;个人主页&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388; &#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;数据结构专栏&#x1f388;&#x1f388;&#x1f388;&…

机器学习——神经网络简单了解

一、神经网络基本概念 神经网络可以分为生物神经网络和人工神经网络 (1)生物神经网络,指的是生物脑内的神经元、突触等构成的神经网络&#xff0c;可以使生物体产生意识&#xff0c;并协助生物体思考、行动和管理各机体活动。 (2)人工神经网络,是目前热门的深度学习的研究…

C++初阶:反向迭代器模板,dequeue与模板进阶

目录 1. 反向迭代器的实现2. 容器deque的数据结构&#xff08;双端队列&#xff09;3. 模板的进阶知识与使用3.1 非类型模板参数3.2 模板特化3.2.1 全特化3.2.2 偏特化&#xff08;半特化&#xff09; 3.3 模板的分离编译 1. 反向迭代器的实现 反向迭代器与正向迭代器的行为与定…

【C++中的STL(未完成)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;…

java 8 stream api将List<T>转换成树形结构

1、新建实体类 package com.example.springboot3.entity;import lombok.Builder; import lombok.Data;import java.util.List;Data Builder public class Menu {/*** id*/public Integer id;/*** 名称*/public String name;/*** 父id &#xff0c;根节点为0*/public Integer p…

vue3+threejs新手从零开发卡牌游戏(十七):模拟对方手牌上场

写一个模拟对方手牌上场的事件&#xff0c;其中注意上场后卡牌需要翻转下&#xff0c;同时调整攻击力文字位置&#xff0c;主要代码如下&#xff1a; utils/common.ts&#xff1a; import { nextTick } from vue; import * as THREE from three; import * as TWEEN from tween…

【Java程序设计】【C00377】基于(JavaWeb)Springboot的社区医疗服务系统(有论文)

【C00377】基于&#xff08;JavaWeb&#xff09;Springboot的社区医疗服务系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#x…

javaSSM公司招聘管理系统IDEA开发mysql数据库web结构计算机java编程maven项目

一、源码特点 IDEA开发SSM公司招聘管理系统是一套完善的完整企业内部系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;MAVEN方式加 载&#xff0c;系统具有完整的源代码和…

极端道路天气数据集 雨天 雾天 道路晴朗

极端道路天气数据集 是一系列专为自动驾驶、智能交通系统研发以及计算机视觉算法测试而设计的真实世界或模拟的道路环境图像和视频集合。这些数据集包含了在各类极端天气条件下捕捉到的道路场景&#xff0c;例如大雾、暴雨、暴雪、冰雹、雾霾、道路结冰等&#xff0c;这些都是…

Vue3 + Vite + TS + Element-Plus + Pinia创建新项目(1)

1、cmd进入命令行后&#xff0c;输入npm create vite 2、使用vs code打开文件夹 3、在VS Code的终端里面输入命令&#xff1a;npm i 安装依赖 4、安装依赖库 npm i vue-router 路由安装 npm i pinia 全局状态管理 npm i axios 请求库 npm i element-p…

30---SDRAM电路设计

视频链接 SDRAM电路设计01_哔哩哔哩_bilibili SDRAM电路设计 1、SDRAM简介 SDRAM&#xff1a;Synchronous Dynamic Random Access Memory&#xff0c;同步动态随机存储器。 同步是指其时钟频率和CPU前端总线的系统时钟相同&#xff0c;并且内部命令的发送与数据的传输都以…

国内ip切换app,让切换ip变得简单

在数字化快速发展的今天&#xff0c;互联网已经成为我们生活中不可或缺的一部分。然而&#xff0c;随着网络应用的深入&#xff0c;用户对于网络环境的需求也日益多样化。其中&#xff0c;IP地址作为网络中的关键标识&#xff0c;其切换与管理显得尤为重要。为了满足用户对于IP…

推荐5款测试数据生成工具!

一个成功、有效的测试策略由下面几个基本部分组成&#xff1a;完整的测试覆盖率、最小化的环境影响和健壮的测试数据。 其中测试数据尤其重要&#xff0c;其质量直接关系到测试的有效性。可以把测试数据看作是保持测试引擎运行的燃料——高质量的测试数据有助于确保测试执行的…

气体放电的基本物理过程

本篇为本科课程《高电压工程基础》的笔记。 和固体液体介质相比&#xff0c;气体绝缘有不老化的有点&#xff0c;而且击穿后具有完全的绝缘自恢复特性&#xff0c;是绝缘部分的重点。 带电质点的产生与消失 中性气体不到点&#xff0c;但是由于宇宙射线和地壳中的放射性物质…

【鸿蒙HarmonyOS开发笔记】使用@Preview装饰器预览组件

概述 ArkTS应用/服务支持组件预览&#xff0c;要求compileSdkVersion为8或以上。组件预览支持实时预览&#xff0c;不支持动态图和动态预览。组件预览通过在组件前添加注解Preview实现&#xff0c;在单个源文件中&#xff0c;最多可以使用10个Preview装饰自定义组件。 Preview…

NIO与AIO

NIO与AIO NIO模型 在 LInux 环境中&#xff0c;java.nio.channels.Selector 的子类叫做 sun.nio.ch.EPollSelectorImpl &#xff0c;其底 层是基于 Epoll 模型去实现的 IO 多路复用器。 对于 Epoll 模型 我们需要了解到它底层的三个函数 在 JDK 实现的底层中&#xff0c;EPol…

由浅到深认识Java语言(27):异常

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

mysql如何存Emoji表情

如何存Emoji表情 背景解决方案一&#xff1a; 如果是自己搭建的数据库&#xff0c;参考如下。 1&#xff1a;先创建数据库&#xff0c;utf8编码2&#xff1a; 修改mysql 的配置文件 /etc/my.cnf 文件3&#xff1a;然后把你的表和字段也要支持utf8md4编码4&#xff1a;修改你连…

分页功能制作

使用HTML&#xff0c;css&#xff0c;js和json假数据制作分页功能。 以下为分页功能结构&#xff0c;下面可以点击上一页&#xff0c;下一页及数字&#xff0c;还可以自己输入想要跳转的页面点击跳转。下面每页显示的内容也会跟着改变。还可以选择不同的每页显示数据的条数。默…