大数据采集、清洗、处理:使用MapReduce进行离线数据分析完整案例

2023-11-07

1 大数据处理的常用方法

大数据处理目前比较流行的是两种方法,一种是离线处理,一种是在线处理,基本处理架构如下:


在互联网应用中,不管是哪一种处理方式,其基本的数据来源都是日志数据,例如对于web应用来说,则可能是用户的访问日志、用户的点击日志等。

如果对于数据的分析结果在时间上有比较严格的要求,则可以采用在线处理的方式来对数据进行分析,如使用Spark、Storm等进行处理。比较贴切的一个例子是天猫双十一的成交额,在其展板上,我们看到交易额是实时动态进行更新的,对于这种情况,则需要采用在线处理。

当然,如果只是希望得到数据的分析结果,对处理的时间要求不严格,就可以采用离线处理的方式,比如我们可以先将日志数据采集到HDFS中,之后再进一步使用MapReduce、Hive等来对数据进行分析,这也是可行的。

本文主要分享对某个电商网站产生的用户访问日志(access.log)进行离线处理与分析的过程,基于MapReduce的处理方式,最后会统计出某一天不同省份访问该网站的uv与pv。


欢迎交流问题,可加我个人QQ 630892562,一起探讨交流问题 

或者加我的群号 710219868  邀请码 : 南风 (必填)有大神有资源一起交流学习,共同进步

2 生产场景与需求

在我们的场景中,Web应用的部署是如下的架构:



即比较典型的Nginx负载均衡+KeepAlive高可用集群架构,在每台Web服务器上,都会产生用户的访问日志,业务需求方给出的日志格式如下:

1001    211.167.248.22  eecf0780-2578-4d77-a8d6-e2225e8b9169    40604   1       GET /top HTTP/1.0       408     null      null    1523188122767
1003    222.68.207.11   eecf0780-2578-4d77-a8d6-e2225e8b9169    20202   1       GET /tologin HTTP/1.1   504     null      Mozilla/5.0 (Windows; U; Windows NT 5.1)Gecko/20070309 Firefox/2.0.0.3  1523188123267
1001    61.53.137.50    c3966af9-8a43-4bda-b58c-c11525ca367b    0       1       GET /update/pass HTTP/1.0       302       null    null    1523188123768
1000    221.195.40.145  1aa3b538-2f55-4cd7-9f46-6364fdd1e487    0       0       GET /user/add HTTP/1.1  200     null      Mozilla/4.0 (compatible; MSIE 7.0; Windows NT5.2)       1523188124269
1000    121.11.87.171   8b0ea90a-77a5-4034-99ed-403c800263dd    20202   1       GET /top HTTP/1.0       408     null      Mozilla/5.0 (Windows; U; Windows NT 5.1)Gecko/20070803 Firefox/1.5.0.12 1523188120263

其每个字段的说明如下:

appid ip mid userid login_type request status http_referer user_agent time
其中:
appid包括:web:1000,android:1001,ios:1002,ipad:1003
mid:唯一的idid第一次会种在浏览器的cookie里。如果存在则不再种。作为浏览器唯一标示。移动端或者pad直接取机器码。
login_type:登录状态,0未登录、1:登录用户
request:类似于此种 "GET /userList HTTP/1.1"
status:请求的状态主要有:200 ok、404 not found、408 Request Timeout、500 Internal Server Error、504 Gateway Timeout等
http_referer:请求该url的上一个url地址。
user_agent:浏览器的信息,例如:"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"
time:时间的long格式:1451451433818

根据给定的时间范围内的日志数据,现在业务方有如下需求:

统计出每个省每日访问的PV、UV。

3 数据采集:获取原生数据

数据采集工作由运维人员来完成,对于用户访问日志的采集,使用的是Flume,并且会将采集的数据保存到HDFS中,其架构如下:


可以看到,不同的Web Server上都会部署一个Agent用于该Server上日志数据的采集,之后,不同Web Server的Flume Agent采集的日志数据会下沉到另外一个被称为Flume Consolidation Agent(聚合Agent)的Flume Agent上,该Flume Agent的数据落地方式为输出到HDFS。

在我们的HDFS中,可以查看到其采集的日志:





4 数据清洗:将不规整数据转化为规整数据

4.1 数据清洗目的

刚刚采集到HDFS中的原生数据,我们也称为不规整数据,即目前来说,该数据的格式还无法满足我们对数据处理的基本要求,需要对其进行预处理,转化为我们后面工作所需要的较为规整的数据,所以这里的数据清洗,其实指的就是对数据进行基本的预处理,以方便我们后面的统计分析,所以这一步并不是必须的,需要根据不同的业务需求来进行取舍,只是在我们的场景中需要对数据进行一定的处理。

4.2 数据清洗方案

原来的日志数据格式是如下的:

appid ip mid userid login_type request status http_referer user_agent time
其中:
appid包括:web:1000,android:1001,ios:1002,ipad:1003
mid:唯一的idid第一次会种在浏览器的cookie里。如果存在则不再种。作为浏览器唯一标示。移动端或者pad直接取机器码。
login_type:登录状态,0未登录、1:登录用户
request:类似于此种 "GET /userList HTTP/1.1"
status:请求的状态主要有:200 ok、404 not found、408 Request Timeout、500 Internal Server Error、504 Gateway Timeout等
http_referer:请求该url的上一个url地址。
user_agent:浏览器的信息,例如:"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"
time:时间的long格式:1451451433818

但是如果需要按照省份来统计uv、pv,其所包含的信息还不够,我们需要对这些数据做一定的预处理,比如需要,对于其中包含的IP信息,我们需要将其对应的IP信息解析出来;为了方便我们的其它统计,我们也可以将其request信息解析为method、 request_url、 http_version等,

所以按照上面的分析,我们希望预处理之后的日志数据包含如下的数据字段:

appid;  
ip;
//通过ip来衍生出来的字段 province和city
province;
city;

mid;      
userId;    
loginType; 
request; 
//通过request 衍生出来的字段 method request_url http_version
method;
requestUrl;
httpVersion;

status;          
httpReferer; 
userAgent;   
//通过userAgent衍生出来的字段,即用户的浏览器信息
browser;

time;

即在原来的基础上,我们增加了其它新的字段,如provincecity等。

我们采用MapReduce来对数据进行预处理,预处理之后的结果,我们也是保存到HDFS中,即采用如下的架构:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大数据采集、清洗、处理:使用MapReduce进行离线数据分析完整案例 的相关文章

随机推荐

  • 多任务学习中的数据分布问题(一)

    今天这个专题源于我在做分布式多任务学习实验时在选取数据集的时候的疑惑 以下我们讨论多任务学习中 尤其是在分布式的环境下 如何选择数据集和定义任务 多任务学习最初的定义是 多任务学习是一种归纳迁移机制 基本目标是提高泛化性能 多任务学习通过相
  • 打通大前端最后一公里之前端埋点与日志系统架构设计

    什么是埋点 所谓 埋点 是数据采集领域 尤其是用户行为数据采集领域 的术语 指的是针对特定用户行为或事件进行捕获 处理和发送的相关技术及其实施过程 埋点的技术实质 是先监听软件应用运行过程中的事件 当需要关注的事件发生时进行判断和捕获 埋点
  • C51单片机 串口通信RX&TX---适合初学

    原料 keil 仿真软件 虚拟串口工具 群文件里的tools vspdctl dll记得覆盖 说明 串口中断允许位ES 1时 单片机一接收到数据或者发送数据就会进入串口中断函数 我认为是因为SBUF一有动静 便会触发到中断 所以单片机发送数
  • 2022年高考都结束了,还有人真觉得程序员下班后不需要学习吗?

    一转眼 高考已经过去十来天了 近期 各省市也陆续公布了高考成绩 还有今年的各批次录取日程 最近一些有转行想法的 刚毕业想进入这个行业的人 甚至还有刚高考完的小朋友私信问我以后想当去大厂当程序员的话需要提前学些什么 属实 卷 得可以 哈哈前浪
  • windows常见后门隐藏和权限维持方法及排查技术

    https xz aliyun com t 4842 这片文章中隐藏webshell我觉得很nice 进程注入以前试过 wmi 和 bitsadmin 可以了解下 常见backdoor和persistence方式方法 系统工具替换后门 Im
  • linux嵌入式常见面试问题(持续更新)

    1 采用DMA方式进行串口通信 如何解析数据才能提高吞吐量 DMA 直接内存访问 是一种通过硬件控制器直接访问内存的方式 而不需要CPU的干预 在串口通信中 采用DMA方式可以减少CPU的负担 提高数据传输的效率 为了提高吞吐量 需要对DM
  • Python错误:ModuleNotFoundError: No module named ‘keras‘(已解决)

    出现错误 进入 Settings Project interpreter 点击右边 在左边出现的组件中找到keras 点击下方的Install Pakage 安装成功
  • Java 格式化字符串

    7 4 1 常规类型的格式化 String类的format 方法用于创建格式化的字符串以及连接多个字符串对象 熟悉C语言的读者应该记得C语言的sprintf 方法 两者有类似之处 format 方法有两种重载形式 l format Stri
  • java通过redis实现排行榜功能

    1 数据存储规划 在排行榜中 每个用户都会有一个唯一的标识 ID 同时需要记录该用户的积分 Score 因此 我们可以将每个用户的ID作为有序集合中的一个元素 将用户的积分作为该元素的分数 ZADD rank 1000 user1 ZADD
  • Qt操作表格

    文章目录 一 使用QAxObject 1 环境配置 二 使用QXlsx 一 使用QAxObject 1 环境配置 首先在Qt Modules中引入axserver axcontainer 代码中包含相关头文件 include
  • 计算机内存是ram,电脑ram内存不足怎么办

    电脑ram内存不足怎么办 电脑用久了就会经常出现内存不足的情况 今天小编要给大家介绍的便是电脑ram内存不足怎么办 欢迎阅读 电脑ram内存不足怎么办 设置虚拟内存按照微软认证系统工程师刘岸松的方法设置方法如下 设置虚拟内存方法 右击我的电
  • A Simple RGB ISP

    设计一个最简单的RGB ISP需要多少个模块呢 答案可能是4个 分别是CFA CCM GAMMA和RGB2YUV 有了这4个模块 我们就可以将Sensor输出的RAW data转化为在显示器上可以观看的画面了 CFA Color Filte
  • 基于组合双向拍卖的共享储能机制研究(Matlab代码实现)

    目录 1 概述 2 运行结果 2 1 算例数据 2 2 买家中标 2 3 卖家中标 3 文献来源 4 Matlab代码实现 1 概述 文献来源 摘要 为满足共享储能中储能用户的互补性和替代性需求 解决常规单向拍卖中可能存在的垄断竞争问题 提
  • 怎样才算一个好的产品经理?

    虽然是小公司全能型人员 但是随着实际写代码变得越来越少 产品的规划和运营越来越多 自己的主要职能也在向产品经理上转变 所以最近几年比较关注产品经理方面的功能 那么怎么才能算是一个好的产品经理呢 周鸿伟的观点 这个名字相信让很多人又爱有恨 但
  • Vue.js模板语法

    模板语法 Vue js使用了基于HTML的模板语法 允许开发者声明式地将DOM绑定至底层Vue实例的数据 所有vue js的模板都是合法的HTML 所以能被遵循规范的浏览器和HTML解析器解析 在底层的实现上 Vue将模板编译成虚拟DOM渲
  • Python与OpenCV(一)——基于帧差法的运动目标检测程序分析

    OpenCV提供了强大的图像处理功能 与Python的结合堪称完美 这一次 我们试一下用帧差法来完成对运动目标的检测与跟踪 帧差法的原理是这样的 由于摄像机采集的视频序列具有连续性的特点 所以如果所采集场景内没有运动目标的时候 连续帧的变化
  • git本地删除后如何再pull下来_实践总结——Git 常见错误及解决方法

    Git 是当下最常用的代码管理库 是程序员日常工作中使用频率最高的工具 在频繁的使用过程中 难免会遇到各种各样的问题 今天跟大家分享 Git 常见的错误和解决方法 问题一 执行Git add somefile 的时候 出现如下错误 If n
  • 如何利用Parsec+Zerotier+moon实现远程电脑云电脑、云办公、云游戏

    前期说明 RD Client 没法串流 向日葵带宽受限 同时也没办法打游戏 那么可不可以自己实现一台云电脑来实现云游戏呢 答案当然是可以的了 下面文章将进行介绍Parsec 远程电脑的三种方案 快速跳转链接 利用IPv6实现公网访问远程桌面
  • Python爬虫时遇到SSL证书验证错误解决办法汇总

    在进行Python爬虫任务时 遇到SSL证书验证错误是常见的问题之一 SSL证书验证是为了确保与服务器建立的连接是安全和可信的 但有时候可能会由于证书过期 不匹配或未受信任等原因导致验证失败 为了解决这个问题 本文将提供一些实用的解决办法
  • 大数据采集、清洗、处理:使用MapReduce进行离线数据分析完整案例

    1 大数据处理的常用方法 大数据处理目前比较流行的是两种方法 一种是离线处理 一种是在线处理 基本处理架构如下 在互联网应用中 不管是哪一种处理方式 其基本的数据来源都是日志数据 例如对于web应用来说 则可能是用户的访问日志 用户的点击日