电商日志项目(一)

电商日志项目

  • 一、项目体系架构设计
    • 1. 项目系统架构
    • 2. 项目数据流程
  • 二、环境搭建
    • 1. NginxLog文件服务
      • 1.1. 上传,解压
      • 1.2. 编译安装
      • 1.3. 启动验证
    • 2. Flume-ng
      • 2.1. 上传解压
      • 2.2. 修改配置文件
      • 2.3. 修改环境变量
      • 2.4. 验证
    • 3. Sqoop
      • 3.1. 上传解压
      • 3.2. 配置环境变量
      • 3.3. 修改配置文件sqoop-env.sh
      • 3.4. 修改configure-sqoop
      • 3.5. 验证
    • 4. Hive和HBase的整合
      • 4.1. 丢jar包
      • 4.2. 检查jar是否已经上传成功
      • 4.3. 在hive的配置文件增加属性
      • 4.4. 验证
    • 5. Hive on Tez
      • 5.1. 部署至HDFS上
      • 5.2. 创建tez-site.xml
      • 5.3. 压缩包解压当前lib目录下
      • 5.4. 所有jar包拷贝至lib目录下
      • 5.5. 验证
      • 5.6. Hive2 On Tez测试
    • 6. Oozie集成Apache Hadoop搭建
      • 6.2. 在Oozie目录下创建libext目录
      • 6.3. 拷贝依赖的Jar包
      • 6.4. 修改Oozie配置文件
      • 6.5. 在Mysql中创建Oozie的数据库
      • 6.6. yarn.tar.gz文件到HDFS
      • 6.7. 初始化Oozie,验证
    • 7. DataX 3安装
      • 7.1. 在Linux上安装Python3
        • 7.1.1. 安装依赖环境
        • 7.1.2. 下载Python3
        • 7.1.3. 安装Python3
          • 7.1.3.1. 创建目录:
          • 7.1.3.2. 安装gcc
        • 7.1.4. 新的包libffi-devel
          • 7.1.4.1.生成编译脚本(指定安装目录)
          • 7.1.4.4. 检查python3.7的编译器
          • 7.1.4.5. 建立Python3和pip3的软链
          • 7.1.4.6. 加入PATH
          • 7.1.4.7. 验证
      • 7.2. 安装DataX
        • 7.2.1. 解压
        • 7.2.2. 自检脚本
    • 8. Azkaban 3 集群搭建
      • 8.1. 节点规划
      • 8.2. 准备工作
      • 8.3. 上传解压
      • 8.4. 数据库和表的创建导入
      • 8.5. 时间同步配置
      • 8.6. exec配置文件
      • 8.7. 同步executor到所有节点
      • 8.8. 启动和激活executor server
      • 8.9. Web配置文件
      • 8.10. 启动Web server
      • 8.11. 执行服务器配置

一、项目体系架构设计

1. 项目系统架构

项目以某电商网站真实的业务数据架构为基础,将数据从收集到使用通过前端应用程序,后端程序,数据分析,平台部署等多方位的闭环的业务实现。形成了一套符合教学体系的电商日志分析项目,主要通过离线技术来实现项目。
在这里插入图片描述

  • 用户可视化:主要负责实现和用户的交互以及业务数据的展示,主体采用JS实现,不是在tomcat服务器上。
  • 业务逻辑程序:主要实现整体的业务逻辑,通过spring进行构建,对接业务需求。部署在tomcat上。
  • 数据存储
    • 业务数据库:项目采用的是广泛应用的关系型数据库mysql,主要负责平台业务逻辑数据的存储
    • HDFS分布式文件存储服务:项目采用HBase+Hive,主要用来存储历史全量的业务数据和支撑高速获取需求,以及海量数据的存储,为以后 的决策分析做支持。
  • 离线分析部分
    • 日志采集服务:通过利用Flume-ng对业务平台中用户对于页面的访问行为进行采集,定时发送到HDFS集群中
    • 离线分析和ETL:批处理统计性业务采用MapReduce+Hivesql进行实现,实现对指标类数据的统计任务
    • 数据转送服务:通过利用sqoop对业务数据批处理,主要负责将数据转送到Hive中

2. 项目数据流程

  • 分析系统(bf_transformer)

    • 数据从收集到页面展示
      在这里插入图片描述
  • 日志收集部分

    • Flume从业务服务的运行日志中读取日志更新,并将更新的日志定时推送到HDFS中;HDFS在收到这些日志之后,通过MR程序对获取的日志信息进行过滤处理,获取用户访问数据流 UID|MID|PLATFORM|BROWER|TIMESTAMP ;计算完成之后,将数据和HBase中的进行合并。
  • ETL部分

    • 通过MapReduce将系统初始化的数据,加载到HBase中。
  • 离线分析部分

    • 可以通过Oozie实现对离线统计服务以及离线分析服务的调度,通过设定的运行时间完成对任务的触发运行
    • 离线分析服务从HBase中加载数据,将 浏览器维度信息时间维度信息kpi维度相关信息 操作系统信息维度统计浏览器相关分析数据的统计统计用户基本信息的统计统计用户浏览深度相关分析数据的统计,多个统计算法进行实现,并将计算结果写到Mysql中;
  • 数仓分析服务

    • sql脚本的调度与执行

在这里插入图片描述

  • 可以通过Oozie实现对数仓分析服务的调度,通过设定的运行时间完成对任务的触发运行
  • 数据分析服务从各个系统的数据库中加载数据到HDFS中,HDFS在收到这些日志之后,通过MR程序对获取的数据进行过滤处理(进行数据格式的统一),计算完成之后,将数据和Hive中的进行合并;Hive获取到这些数据后,通过HQL脚本对获取的数据进行逻辑加工,将交易信息访问信息 ,多个指标进行实现;计算完成之后,将数据和Hive中的进行合并。
  • 程序后台执行工作流

注意:不采用ip来标示用户的唯一性,我们通过在cookie中填充一个uuid来标示用户的唯一性。

在我们的js sdk中按照收集数据的不同分为不同的事件。

  • 比如pageview事件等,Js sdk的执行流程如下:
    在这里插入图片描述

  • 分析

    • PC端事件分析
      针对我们最终的不同分析模块,我们需要不同的数据,接下来分别从各个模块分析,每个模块需要的数据。用户基本信息就是用户的浏览行为信息分析,也就是我们只需要pageview事件就可以了;

浏览器信息分析以及地域信息分析其实就是在用户基本信息分析的基础上添加浏览器和地域这个维度信息,其中浏览器信息我们可以通过浏览器的window.navigator.userAgent来进行分析,地域信息可以通过nginx服务器来收集用户的ip地址来进行分析,也就是说pageview事件也可以满足这两个模块的分析。

外链数据分析以及用户浏览深度分析我们可以在pageview事件中添加访问页面的当前url和前一个页面的url来进行处理分析,也就是说pageview事件也可以满足这两个模块的分析。

订单信息分析要求pc端发送一个订单产生的事件,那么对应这个模块的分析,我们需要一个新的事件chargeRequest。对于事件分析我们也需要一个pc端发送一个新的事件数据,我们可以定义为event。除此之外,我们还需要设置一个launch事件来记录新用户的访问。

Pc端的各种不同事件发送的数据url格式如下,其中url中后面的参数就是我们收集到的数据:
http://shsxt.com/shsxt.gif?requestdata

最终分析模块PC端js sdk事件
用户基本信息分析pageview事件
浏览器信息分析pageview事件
地域信息分析pageview事件
外链数据分析pageview事件
用户浏览深度分析pageview事件
订单信息分析chargeRequest事件
事件分析event事件
用户基本信息修改launch事件
  1. PC端JS和SDK事件
    通用参数
    所有埋点中都会返回的相同信息。以下是通用参数具体内容
名称内容
发送的数据u_sd=8E9559B3-DA35-44E1-AC98-85EB37D1F263&c_time=1449137597974&ver=1&pl=website&sdk=js& b_rst=1920*1080&u_ud=12BF4079-223E4A57-AC60-C1A0 4D8F7A2F&b_iev=Mozilla%2F5.0%20(Windows%20NT%206.1%3B%20WOW64)%20AppleWebKit%2F537.1%20(KHTML%2C%20like%20Gecko)%20Chrome%2F21.0.1180.77%20Safari% 2F537.1&l=zh-CN&en=e_l
参数名称类型描述
u_sdstring会话id
c_timestring客户端创建时间
verstring版本号, eg: 0.0.1
plstring平台, eg: website
sdkstringSdk类型, eg: js
b_rststring浏览器分辨率,eg: 1800*678
u_udstring用户/访客唯一标识符
b_ievstring浏览器信息useragent
lstring客户端语言
  • Launch事件

当用户第一次访问网站的时候触发该事件,不提供对外调用的接口,只实现该事件的数据收集。

名称内容
发送的数据en=e_l&通用参数
参数名称类型描述
enstring事件名称, eg: e_l
  • 会员登陆时间
    当用户登陆网站的时候触发该事件,不提供对外调用的接口,只实现该事件的数据收集。
名称内容
发送的数据u_mid=phone&通用参数
参数名称类型描述
u_midstring会员id,和业务系统一致
  • Pageview事件,依赖于onPageView类
    当用户访问页面/刷新页面的时候触发该事件。该事件会自动调用,也可以让程序员手动调用。
方法名称内容
发送的数据en=e_pv&p_ref=www.shsxt.com%3A8080&p_url =http%3A%2F%2Fwww.shsxt.com%3A8080%2Fvst_track%2Findex.html&通用参数
参数名称类型描述
enstring事件名称, eg: e_pv
p_urlstring当前页面的url
p_refstring上一个页面的url
  • ChargeSuccess事件
    当用户下订单成功的时候触发该事件,该事件需要程序主动调用。
方法名称onChargeRequest
发送的数据oid=orderid123&on=%E4%BA%A7%E5%93%81%E5%90%8D%E7%A7%B0&cua=1000&cut=%E4%BA%BA%E6%B0%91%E5%B8%81&pt=%E6%B7%98%E5%AE%9&en=e_cs &通用参数
参数类型是否必填描述
orderIdstring订单id
onString产品购买描述名称
cuadouble订单价格
cutString货币类型
ptString支付方式
enString事件名称, eg: e_cs
  • ChargeRefund事件
    当用户下订单失败的时候触发该事件,该事件需要程序主动调用。
方法名称onChargeRequest
发送的数据oid=orderid123&on=%E4%BA%A7%E5%93%81%E5%90%8D%E7%A7%B0&cua=1000&cut=%E4%BA%BA%E6%B0%91%E5%B8%81&pt=%E6%B7%98%E5%AE%9&en=e_cr &通用参数
参数 类型是否必填描述
orderId string订单id
on String产品购买描述名称
cua double订单价格
cut String货币类型
pt String支付方式
en String事件名称, eg: e_cr
  • Event事件
    当访客/用户触发业务定义的事件后,前端程序调用该方法。
方法名称onEventDuration
发送的数据ca=%E7%B1%BB%E5%9E%8B&ac=%E5%8A%A8%E4%BD%9Ckv_p_url=http%3A%2F%2Fwwwshsxt…com%3A8080%2Fvst_track%2Findex.html&kv_%E5%B1%9E%E6%80%A7key=%E5%B1%9E%E6%80%A7value&du=1000& en=e_e&通用参数
参数类型是否必填描述
ca stringEvent事件的Category名称
ac StringEvent事件的action名称
kv_p_url mapEvent事件的自定义属性
du longEvent事件的持续时间
en String事件名称, eg: e_e
  • 数据参数说明
    在各个不同事件中收集不同的数据发送到nginx服务器,但是实际上这些收集到的数据还是有一些共性的。下面将所用可能用到的参数描述如下:
参数名称类型描述
enstring事件名称, eg: e_pv
verstring版本号, eg: 0.0.1
plstring平台, eg: website
sdkstringSdk类型, eg: js
b_rststring浏览器分辨率,eg: 1800*678
b_ievstring浏览器信息useragent
u_udstring用户/访客唯一标识符
lstring客户端语言
u_midstring会员id,和业务系统一致
u_sdstring会话id
c_timestring客户端时间
p_urlstring当前页面的url
p_refstring上一个页面的url
ttstring当前页面的标题
castringEvent事件的Category名称
acstringEvent事件的action名称
kv_*stringEvent事件的自定义属性
dustringEvent事件的持续时间
oidstring订单id
onstring订单名称
cuastring支付金额
cutstring支付货币类型
ptstring支付方式
  • 订单工作流如下所示:(退款类似)
    在这里插入图片描述

  • 分析

  • 程序后台事件分析
    本项目中在程序后台只会出发chargeSuccess事件,本事件的主要作用是发送订单成功的信息给nginx服务器。发送格式同pc端发送方式, 也是访问同一个url来进行数据的传输。格式为:
    http://shsxt.com/shsxt.gif?requestdata

最终分析模块PC端js sdk事件
订单信息分析chargeSuccess事件 chargeRefund事件
- chargeSuccess事件

当会员最终支付成功的时候触发该事件,该事件需要程序主动调用。

方法名称onChargeSuccess
发送的数据u_mid=shsxt&c_time=1449142044528&oid=orderid123&ver=1&en=e_cs&pl=javaserver&sdk=jdk
参数类型是否必填描述
orderIdstring订单id
memberIdstring会员id
- chargeRefund事件

当会员进行退款操作的时候触发该事件,该事件需要程序主动调用。

方法名称onChargeRefund
发送的数据u_mid=shsxt&c_time=1449142044528&oid=orderid123&ver=1&en=e_cr&pl=javaserver&sdk=jdk
参数类型

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react组件的导入与导出

组件的神奇之处在于它们的可重用性:你可以创建一个由其他组件构成的组件。但当你嵌套了越来越多的组件时,则需要将它们拆分成不同的文件。这样可以使得查找文件更加容易,并且能在更多地方复用这些组件。 根组件文件 在 你的第一个组件 中&…

如何进行Go语言的性能测试和调优?

文章目录 开篇一、性能测试1. 使用标准库中的testing包2. 使用第三方工具 二、性能调优1. 优化算法和数据结构2. 减少不必要的内存分配和垃圾回收3. 并发和并行 结尾 开篇 Go语言以其出色的性能和简洁的语法受到了广大开发者的喜爱。然而,在实际开发中,…

微服务架构与单体架构

微服务架构与与单体架构比较 微服务架构是一种将应用程序作为一组小的、独立服务的系统架构风格,每个服务运行在其自己的进程中,并通常围绕业务能力组织。这些服务通过定义良好且轻量级的机制(通常是HTTP REST API)进行通信。微服…

Redis(基础指令和五大数据类型)

文章目录 1.基本介绍1.多种数据结构支持2.应用场景 2.Redis安装(直接安装到云服务器)1.安装gcc1.yum安装gcc2.查看gcc版本 2.将redis6.2.6上传到/opt目录下3.进入/opt目录下然后解压4.进入 redis-6.2.6目录5.编译并安装6.进入 /usr/local/bin 查看是否有…

智慧文旅开启沉浸式文化体验,科技让旅行更生动:借助智慧技术,打造沉浸式文化体验场景,让旅行者在旅行中深度感受文化的魅力

一、引言 随着科技的飞速发展,传统旅游行业正经历着前所未有的变革。智慧文旅,作为一种新兴的旅游模式,正以其独特的魅力,吸引着越来越多的旅行者。智慧文旅不仅改变了人们的旅行方式,更在深度上丰富了人们的文化体验…

PostgreSQL 的用户管理操作

在 PostgreSQL 中,可以通过 SQL 命令和 psql 命令行工具进行用户管理操作。以下是一些常见的 PostgreSQL 用户管理操作: 1. 查询用户: \du2. 创建用户: 可以使用 CREATE ROLE 命令创建新用户,语法如下: CREATE ROLE username WITH LOGIN PASSWORD password; 如: CRE…

ansible报错解决:Failed to import the required Python library (netaddr)

ansible报错解决:Failed to import the required Python library (netaddr) 问题情况 今天我在做实验的时候出现了一个问题,以下是我的playbook,这个playbook是验证变量ip_address是否是一个合法的IP地址,并打印相应的信息的一个…

Spring入门及注解开发

1 引言 自定义注解可以用来为代码添加元数据信息,简化配置,提高代码的可读性和可维护性。通过自定义注解,可以实现自定义的业务逻辑、约束条件、配置参数等功能。在Spring中,自定义注解常用于标记组件、配置依赖注入、AOP切面等。 自定义注解可以添加元数据信息,低代码框…

问题 A: 实验11_4_初识链表

题目描述 已知一个正整数序列,个数未知,但至少有一个元素,你的任务是建立一个单链表,并使用该链表存储这个正整数序列,然后统计这个序列中元素的最大值与最小值,计算序列全部元素之和。正整数的输入用-1作…

关于图形库

文章目录 1. 概念介绍2. 使用方法2.1 普通路由2.2 命名路由 3. 示例代码4. 内容总结 我们在上一章回中介绍了"使用get显示Dialog"相关的内容,本章回中将介绍使用get进行路由管理.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…

AEC Capital Limited:开启可持续金融新纪元

在当今社会,环保和可持续发展已成为全球关注的焦点。在这个背景下,AEC Capital Limited作为香港的一家金融服务公司,以其专业、高端的服务和创新的理念,成为可持续金融领域的引领者。我们致力于将环境保护与金融服务相结合&#x…

muduo库的使用

目录 1、概述 2、基于muduo网络库开发服务器程序步骤 3、代码演示 1、概述 muduo网络库给用户提供了两个主要的类 TcpServer:用于编写服务器程序的TcpClient:用于编写客户端程序的 moduo库采用epoll线程池 好处:能够把网络I/O( 用户的连接和断开 …

观测与预测差值自动变化系统噪声Q的自适应UKF(AUKF_Q)MATLAB编写

简述 基于三维模型的UKF,设计一段时间的输入状态误差较大,此时通过对比预测的状态值与观测值的残差,在相应的情况下自适应扩大系统方差Q,构成自适应无迹卡尔曼滤波(AUKF),与传统的UKF相比&…

mac监听 linux服务器可视化(Grafana+Promethus+Node_exporter)

Grafana和promethus(普罗米修斯)的安装和使用 监控系统的Prometheus类似于一个注册中心,我们可以只需要配置一个Prometheus,而在其他服务器,只需要安装node_exporter,它们的数据流转就是通过exporter采集数据信息,然后告诉prometheus它的位置…

华为二层交换机与路由器连通上网实验

华为二层交换机与路由器连通上网实验 二层交换机是一种网络设备,用于在局域网(LAN)中转发数据帧。它工作在OSI模型的第二层,即数据链路层。二层交换机通过学习和维护MAC地址表,实现了数据的快速转发和广播域的隔离。 实…

汉译英早操练-(三十)

hello,汉语在表达成英语的时候你是否有困惑。不要着急,一起来看看需要我们注意一些什么,慢慢的就不恐惧用英语表达汉语这件事了。给大家奉献系列文章,供大家参考学习。 往期回顾在这里,请随便点击过去查看,…

SpringBoot:实战项目TLIAS智能学习辅助系统1.1

SpringBootWeb项目 TILAS智能学习辅助系统 需求 部门管理 查询部门列表 删除部门 新增部门 修改部门 员工管理 查询员工列表(分页) 删除员工 新增员工 修改员工 准备工作 导入依赖 web(2.7.6) mybatis mysql驱动 lombok 准备好包结构 Controller->Servi…

CGAL 网格简化

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 为了提高网格处理的效率,通常需要将过于冗长的3D数据集简化为更简洁而又真实的表示。尽管从几何压缩到逆向工程有许多应用,但简洁地捕捉表面的几何形状仍然是一项乏味的任务。CGAL中则为我们提供了一种通过变分几…

语言文学综合-隋唐五代文学

概说 (一)唐代社会、文化的发展和唐代文学的繁荣 (二)唐代文学的风貌及其在中国文学史上的地位 一、隋与初唐文学 (一)南北文学的合流与隋代诗歌 卢思道、薛道衡等是北齐、北周旧臣。薛道衡的《昔昔盐》…

Objective-C高级特性浅析与实践指南

OC的学习笔记(二) 文章目录 OC的学习笔记(二)property访问控制符点语法 自定义init方法内存管理retain 和 release class处理发生异常的方法NSSrting的常用方法类方法对象方法lengthcharacterAtIndexisEuqalStringcompare autorel…