大数据教程(14.2)网站数据分析(二)

news/2024/5/14 4:17:47/文章来源:https://blog.csdn.net/weixin_33704591/article/details/92258808

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

    上一篇文章介绍了'网站点击流数据分析项目业务背景';本篇博客博主将继续分享网站分析的相关知识。

    一、整体技术流程及架构 

     1.1.数据处理流程

           该项目是一个纯粹的数据分析项目,其整体流程基本上就是依据数据的处理流程进行,依此有以下几个大的步骤:
           1) 数据采集
           首先,通过页面嵌入JS代码的方式获取用户访问行为,并发送到web服务的后台记录日志
           然后,将各服务器上生成的点击流日志通过实时或批量的方式汇聚到HDFS文件系统中

           当然,一个综合分析系统,数据源可能不仅包含点击流数据,还有数据库中的业务数据(如用户信息、商品信  息、订单信息等)及对分析有益的外部数据。

           2) 数据预处理
           通过mapreduce程序对采集到的点击流数据进行预处理,比如清洗,格式整理,滤除脏数据等

           3) 数据入库
           将预处理之后的数据导入到HIVE仓库中相应的库和表中

           4) 数据分析
           项目的核心内容,即根据需求开发ETL分析语句,得出各种统计结果

           5) 数据展现
           将分析所得数据进行可视化

     1.2.项目结构

           由于本项目是一个纯粹数据分析项目,其整体结构亦跟分析流程匹配,并没有特别复杂的结构,如下图:

922aa1be23622fe09bd43c6c64769418c9f.jpg

           其中,需要强调的是:系统的数据分析不是一次性的,而是按照一定的时间频率反复计算,因而整个处理链条中的各个环节需要按照一定的先后依赖关系紧密衔接,即涉及到大量任务单元的管理调度,所以,项目中需要添加一个任务调度模块(此处可由之前讲的azkaban替代OOZIE)。

     1.3.数据展现

           数据展现的目的是将分析所得的数据进行可视化,以便运营决策人员能更方便地获取数据,更快更简单地理解数据。可使用springmvc+echarts的简单架构实现。

d66954f1076951abac2301a4479c1f9a74f.jpg

    二、模块开发——数据采集

     2.1.需求

          数据采集的需求广义上来说分为两大部分。
          1)是在页面采集用户的访问行为,具体开发工作:
                1、开发页面埋点js,采集用户访问行为
                2、后台接受页面js请求记录日志
                此部分工作也可以归属为“数据源”,其开发工作通常由web开发团队负责

           2)是从web服务器上汇聚日志到HDFS,是数据分析系统的数据采集,此部分工作由数据分析平台建设团队负责,具体的技术实现有很多方式:
           Shell脚本
                优点:轻量级,开发简单
                缺点:对日志采集过程中的容错处理不便控制
           Java采集程序
                优点:可对采集过程实现精细控制
                缺点:开发工作量大
           Flume日志采集框架
                成熟的开源日志采集系统,且本身就是hadoop生态体系中的一员,与hadoop体系中的各种框架组件具有天生的亲和力,可扩展性强

     2.2.技术选型

          在点击流日志分析这种场景中,对数据采集部分的可靠性、容错能力要求通常不会非常严苛,因此使用通用的flume日志采集框架完全可以满足需求。
          本项目即用flume来实现日志采集。

          Flume日志采集系统搭建

          1、数据源信息

               本项目分析的数据用nginx服务器所生成的流量日志,存放在各台nginx服务器上,如:
               /var/log/httpd/access_log.2015-11-10-13-00.log
               /var/log/httpd/access_log.2015-11-10-14-00.log
               /var/log/httpd/access_log.2015-11-10-15-00.log
               /var/log/httpd/access_log.2015-11-10-16-00.log

          2、数据内容样例

               数据的具体内容在采集阶段其实不用太关心。

58.215.204.118 - - [18/Sep/2013:06:51:35 +0000] "GET /wp-includes/js/jquery/jquery.js?ver=1.10.2 HTTP/1.1" 304 0 "http://blog.fens.me/nodejs-socketio-chat/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"

               字段解析:
               1、访客ip地址:   58.215.204.118
               2、访客用户信息:  - -
               3、请求时间:[18/Sep/2013:06:51:35 +0000]
               4、请求方式:GET
               5、请求的url:/wp-includes/js/jquery/jquery.js?ver=1.10.2
               6、请求所用协议:HTTP/1.1
               7、响应码:304
               8、返回的数据流量:0
               9、访客的来源url:http://blog.fens.me/nodejs-socketio-chat/
               10、访客所用浏览器:Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0

          3、日志文件生成规律

               基本规律为:
               当前正在写的文件为access_log;
               文件体积达到256M,或时间间隔达到60分钟,即滚动重命名切换成历史日志文件;
               形如: access_log.2015-11-10-13-00.log

               当然,每个公司的web服务器日志策略不同,可在web程序的log4j.properties中定义,如下:

log4j.appender.logDailyFile = org.apache.log4j.DailyRollingFileAppender 
log4j.appender.logDailyFile.layout = org.apache.log4j.PatternLayout 
log4j.appender.logDailyFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n 
log4j.appender.logDailyFile.Threshold = DEBUG 
log4j.appender.logDailyFile.ImmediateFlush = TRUE 
log4j.appender.logDailyFile.Append = TRUE 
log4j.appender.logDailyFile.File = /var/logs/access_log 
log4j.appender.logDailyFile.DatePattern = '.'yyyy-MM-dd-HH-mm'.log' 
log4j.appender.logDailyFile.Encoding = UTF-8

          4、Flume采集实现

               Flume采集系统的搭建相对简单:
               1、在个web服务器上部署agent节点,修改配置文件
               2、启动agent节点,将采集到的数据汇聚到指定的HDFS目录中
               如下图:

f2b0d22398abe0ad37fce06fd488de70f6b.jpg

               版本选择:apache-flume-1.7.0
               采集规则设计:
               1、采集源:nginx服务器日志目录
               2、存放地:hdfs目录/home/hadoop/weblogs/

               采集规则配置详情

agent1.sources = source1
agent1.sinks = sink1
agent1.channels = channel1# Describe/configure spooldir source1
#agent1.sources.source1.type = spooldir
#agent1.sources.source1.spoolDir = /var/logs/nginx/
#agent1.sources.source1.fileHeader = false# Describe/configure tail -F source1
#使用exec作为数据源source组件
agent1.sources.source1.type = exec 
#使用tail -F命令实时收集新产生的日志数据
agent1.sources.source1.command = tail -F /var/logs/nginx/access_log
agent1.sources.source1.channels = channel1#configure host for source
#配置一个拦截器插件
agent1.sources.source1.interceptors = i1
agent1.sources.source1.interceptors.i1.type = host
#使用拦截器插件获取agent所在服务器的主机名
agent1.sources.source1.interceptors.i1.hostHeader = hostname#配置sink组件为hdfs
agent1.sinks.sink1.type = hdfs
#a1.sinks.k1.channel = c1#agent1.sinks.sink1.hdfs.path=hdfs://hdp-node-01:9000/weblog/flume-collection/%y-%m-%d/%H%M%S
#指定文件sink到hdfs上的路径
agent1.sinks.sink1.hdfs.path=
hdfs://hdp-node-01:9000/weblog/flume-collection/%y-%m-%d/%H-%M_%hostname
#指定文件名前缀
agent1.sinks.sink1.hdfs.filePrefix = access_log
agent1.sinks.sink1.hdfs.maxOpenFiles = 5000 
#指定每批下沉数据的记录条数
agent1.sinks.sink1.hdfs.batchSize= 100
agent1.sinks.sink1.hdfs.fileType = DataStream
agent1.sinks.sink1.hdfs.writeFormat =Text
#指定下沉文件按1G大小滚动
agent1.sinks.sink1.hdfs.rollSize = 1024*1024*1024
#指定下沉文件按1000000条数滚动
agent1.sinks.sink1.hdfs.rollCount = 1000000
#指定下沉文件按30分钟滚动
agent1.sinks.sink1.hdfs.rollInterval = 30
#agent1.sinks.sink1.hdfs.round = true
#agent1.sinks.sink1.hdfs.roundValue = 10
#agent1.sinks.sink1.hdfs.roundUnit = minute
agent1.sinks.sink1.hdfs.useLocalTimeStamp = true# Use a channel which buffers events in memory
#使用memory类型channel
agent1.channels.channel1.type = memory
agent1.channels.channel1.keep-alive = 120
agent1.channels.channel1.capacity = 500000
agent1.channels.channel1.transactionCapacity = 600# Bind the source and sink to the channel
agent1.sources.source1.channels = channel1
agent1.sinks.sink1.channel = channel1

               启动采集
               在部署了flume的nginx服务器上,启动flume的agent,命令如下:
               bin/flume-ng agent --conf ./conf -f ./conf/weblog.properties.2 -n agent

               注意:启动命令中的 -n 参数要给配置文件中配置的agent名称

    三、模块开发——数据预处理

           3.1主要目的:a.过滤“不合规”数据;b.格式转换和规整;c.根据后续的统计需求,过滤分离出各种不同主题(不同栏目path)的基础数据

           3.2实现方式:开发一个mr程序WeblogPreProcess(内容太长,见大数据hadoop之大型互联网电商公司网站日志分析、web日志数据清洗)

public class WeblogPreProcess {static class WeblogPreProcessMapper extends Mapper<LongWritable, Text, Text, NullWritable> {Text k = new Text();NullWritable v = NullWritable.get();@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line = value.toString();WebLogBean webLogBean = WebLogParser.parser(line);
//			WebLogBean productWebLog = WebLogParser.parser2(line);
//			WebLogBean bbsWebLog = WebLogParser.parser3(line);
//			WebLogBean cuxiaoBean = WebLogParser.parser4(line);if (!webLogBean.isValid())return;k.set(webLogBean.toString());context.write(k, v);
//			k.set(productWebLog);
//			context.write(k, v);}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setJarByClass(WeblogPreProcess.class);job.setMapperClass(WeblogPreProcessMapper.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(NullWritable.class);FileInputFormat.setInputPaths(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));job.waitForCompletion(true);}
}

           运行mr对数据进行预处理

hadoop jar weblog.jar  cn.itcast.bigdata.hive.mr.WeblogPreProcess /weblog/input /weblog/preout

           3.3点击流模型数据梳理

                 由于大量的指标统计从点击流模型中更容易得出,所以在预处理阶段,可以使用mr程序来生成点击流模型的数据

           3.3.1点击流模型pageviews表

                  Pageviews表模型数据生成

代码见工程
hadoop jar weblogpreprocess.jar  \
cn.itcast.bigdata.hive.mr.ClickStreamThree   \
/user/hive/warehouse/dw_click.db/test_ods_weblog_origin/datestr=2013-09-20/ /test-click/pageviews/

                  表结构:

a3352157eb239e0ba0ae95ae1d1a98d0162.jpg

                  (表定义及数据导入见6.2节)

           3.3.2 点击流模型visit信息表

                    注:“一次访问”=“N次连续请求”
                    直接从原始数据中用hql语法得出每个人的“次”访问信息比较困难,可先用mapreduce程序分析原始数据得出“次”信息数据,然后再用hql进行更多维度统计

                    用MR程序从pageviews数据中,梳理出每一次visit的起止时间、页面信息

代码见工程
hadoop jar weblogpreprocess.jar cn.itcast.bigdata.hive.mr.ClickStreamVisit /weblog/sessionout /weblog/visitout

                    然后,在hive仓库中建点击流visit模型表

load data inpath '/weblog/visitout' into table click_stream_visit partition(datestr='2013-09-18');

 

 

 

转载于:https://my.oschina.net/u/2371923/blog/3037258

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

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

相关文章

Java 爬虫遇到需要登录的网站,该怎么办?

在做爬虫时&#xff0c;遇到需要登陆的问题也比较常见&#xff0c;比如写脚本抢票之类的&#xff0c;但凡需要个人信息的都需要登陆&#xff0c;对于这类问题主要有两种解决方式&#xff1a;一种方式是手动设置 cookie &#xff0c;就是先在网站上面登录&#xff0c;复制登陆后…

网站部署到Linux服务器上并添加https证书

用的是Nginx服务器 一、部署 将网站打包成war包 放到Linux的data/wwwroot/default目录 解压&#xff1a;jar -xvf novel.war 删除war包&#xff1a;rm novel.war 删除文件夹 &#xff1a;rm -rf novel 二、申请SSL证书 网站 &#xff1a;https://www.pianyissl.com/ 三、…

当网站遭遇DDOS攻击的解决方案及展望

当网站遭遇DDOS攻击的解决方案及展望一、事件发生春节长假刚过完&#xff0c;WEB就出现故障&#xff0c;下午1点吃完回来&#xff0c;立即将桌面解锁并习惯性的检查了Web服务器。通过Web服务器性能监视软件图像显示的向下滑行的红色曲线看到WEB出现问题了。根据上述的问题&…

基于WebSphere与Domino的电子商务网站构架分析

本文出自 “李晨光原创技术博客” 博客&#xff0c;谢绝转载&#xff01; 转载于:https://www.cnblogs.com/chenguang/p/3742340.html

随时查看源码的网站---http://www.sooset.com/

由于工作需要经常要在Windows平台下参阅linux源码&#xff0c;以前都用http://lxr.linux.no/来浏览源码&#xff08;如下图所示&#xff09;,最近发现sooset来浏览更方便&#xff0c;所以介绍给大家分享。导航栏用起来很方便&#xff0c;不是吗&#xff1f;呵呵更多详情请参考&…

大型网站架构之百万PV

一&#xff1a;百万PV架构概述PV(page view&#xff0c;页面浏览量)即点击量&#xff0c;通常是衡量一个网站受欢迎程度的主要指标。本案例采用四层模式实现&#xff0c;主要分为前端反向代理层、web层、数据库缓存层和数据库层。前端反向代理层采用主备模式&#xff0c;web层采…

网站及监控利器 Pandora FMS使用体验

Pandora FMS 是一个 开源的应用程序 &#xff0c;用来监测网站的各种活动,它可以收到实时的监测报告&#xff0c;并发送到你指定的邮箱&#xff0c;也可以通过e-mail&#xff0c; SMS 发送。 更多Linux下的监控软件请关注《Linux企业应用案例精解》一书本文出自 “李晨光原创技…

layui导入模板数据_大气漂亮美观的三个网站后台数据管理模板 大大提升你的开发效率...

今天整理了三个我做项目经常使用的三个网站后台模板&#xff0c;这三个模板都是开源的&#xff0c;可以下载商用&#xff0c;可基于它们开发任何网站&#xff0c;做为后台管理数据。这样能为你开发后台功能节约大量的时间。一.ok-admin 一个很赞的&#xff0c;扁平化风格的&…

Silverlight SEO(搜索引擎优化)白皮书

概要这份文档描述了一些Silverlight程序的搜索引擎优化&#xff08;SEO&#xff09;技巧。这些技巧是用来帮助开发人员使得Silverlight内容能够在搜索引擎的结果页被发现&#xff0c;并为没有激活Silverlight的用户提供合意的体验。这份文档将包括以下的章节&#xff1a;*介绍 …

21绝对优秀的网站推荐,激发创意寻找灵感的好去处

世界上总有这么一些人乐于分享&#xff0c;下面挑出21个在设计方面绝对优秀的网站&#xff0c;里面有超酷的设计&#xff0c;时尚的咨询&#xff0c;成功的经验&#xff0c;uleadesign的很多内容就来自于这些网站&#xff0c;希望大家喜欢. 1. Deviantart 2. Behance 3. Abduze…

注册地址从零开始学建站-域名篇

今天朋友几篇文章分析了改注册地址的文章. 关联文章的地址 从零开始学建站-域名篇 域名的基础知识 域名俗称网址&#xff0c;很多人对于一个网站的最初印象可能恰是从这些字符串开始的。为了给拜访者留下一个深刻的第一印象&#xff0c;域名的选择在网站建立过程中有着很大的作…

eclipse for java linux_Eclipse的安装 - Ubuntu 14.04下Java开发环境的搭建_Linux教程_Linux公社-Linux系统门户网站...

下面我们来安装Eclipse&#xff01;安装Eclipse 的前提是&#xff0c;你的JDK已经安装成功好了 开始安装。首先在合适的地方解压eclipse-jee-kepler-SR2-linux-gtk-x86_64.tar.gzcd /opt/DevelopTools/ide/sudo cp/home/home/下载/eclipse-jee-kepler-SR2-linux-gtk-x86_64.tar…

php自动识别pc和手机端并跳转,JS如何实现网站中PC端和手机端自动识别并跳转对应的代码...

1. 代码场景&#xff1a;描述&#xff1a;在项目中&#xff0c;一般我们会使用响应式布局的方式或者借助bootstrap等插件来做响应式的网站。但是根据业务的需求&#xff0c;手机端可能会在功能上精简很多&#xff0c;我们也会写两套代码&#xff0c;分别用来实现PC端和手机端的…

1月国内网站流量统计:百度稳夺冠军 腾讯季军

IDC评述网&#xff08;idcps.com&#xff09;01月30日报道&#xff1a;根据中国互联网协会-中国网站排名公布的最新数据显示&#xff0c;截至2015年01月28日&#xff0c;国内网站独立访问量排名前五的是&#xff1a;百度、360安全中心、腾讯网、搜狗、淘宝网&#xff0c;如下图…

HTML5 Web Speech API,让网站更有趣

Web API 变得越来越丰富&#xff0c;其中一个值得注意的是Web Speech API。传统的网站只能“说”&#xff0c;这个API的出现&#xff0c;让网站能“倾听”用户。这个功能已经开放了一系列的用法&#xff0c;非常棒。 在这篇文章中&#xff0c;我们将看一下这项技术和建议的用法…

【读书笔记】第三章 大型网站核心架构要素

2019独角兽企业重金招聘Python工程师标准>>> #第三章 大型网站核心架构要素 软件架构&#xff1a;有关软件整体结构与组件的抽象描述&#xff0c;用于指导大型软件系统各个方面的设计 软件架构需要关注的几个方面&#xff1a; 系统功能需求&#xff08;最基本的&…

求职季,你需要一点 SEO 思维

SEOer 是一群和百度上演着相爱相杀戏码的人&#xff0c;这些人擅长搞排名、引流量。乍一看&#xff0c;SEO 与找工作之间似乎并没有什么关联。但其实借鉴用户在网上搜索产品的思维方式&#xff0c;很容易让 HR 找到我们。那么我们应该如何运用 SEO 思维让工作找到自己呢?在这之…

java eclipse字体大小设置_「eclipse字体大小设置」Eclipse中调整字体的大小 - seo实验室...

eclipse字体大小设置1.点击window&#xff0c;然后选择preferences&#xff0c;进入下面的界面。在输入框中输入font&#xff0c;然后选择colors and fonts &#xff0c;再选择basic&#xff1a;2.在basic中找到text&#xff0c;然后点击edit3.这样就来到了设置界面&#xff0c…

SSL安全性检测的在线测试网站--有需要的推荐

https://www.ssllabs.com/ 下一个要解决的问题&#xff1a; CRIME: Information Leakage Attack against SSL/TLS https://community.qualys.com/blogs/securitylabs/2012/09/14/crime-information-leakage-attack-against-ssltls

两天开发的网站果然没人用,所以我决定优化一下

J3 - 西行杂文&#xff08;小夹子 # 开发&#xff09; 上周末在家封闭了两天&#xff0c;就为了解个心结做个小夹子网站出来&#xff0c;最初的功能就是单纯的把我所看过的文章、资料保存起来&#xff0c;方便以后统计、回顾。 并且我也是紧接着出了一篇相关文章来说明这件事&…