欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

大数据技术学习笔记之网站流量日志分析项目:数据采集层的实现

程序员文章站 2024-01-26 14:03:16
一、数据采集业务 -》数据源 -》网站:用户访问日志、用户行为日志、服务器运行日志 -》业务:订单、用户、商品信息 -》SDK -》SDK用于监听用户的行为,收集用户的信息,发送给n...

一、数据采集业务

-》数据源

-》网站:用户访问日志、用户行为日志、服务器运行日志

-》业务:订单、用户、商品信息

-》SDK

-》SDK用于监听用户的行为,收集用户的信息,发送给nginx等日志服务器

-》针对不同的客户端有不同的SDK

-》手机APP

-》网站:js

-》后台:java

-》用户的客户端或者行为的不同,导致需要不同的SDK进行处理,收集不同的数据

-》收集数据的 原则

-》尽量收集多的数据

-》常见的字段

-》客户端的ip

-》用户的id

-》URL

-》客户端的时间

-》客户端

-》refere_url

……

-》网站日志服务器:nginx

-》日志文件

-》自定义收集的日志内容及格式

-》nginx默认将所有的日志全部保存为一个文件

-》数据收集方案

-》java:小型业务

-》可以根据业务需求,实现各种自定的业务,灵活性好

-》有一定的性能局限性

-》flume:分布式工具,适合业务较大的数据采集

-》架构:

-》source:读取数据源,将数据源转化为字节流,发送给channel

exec、spooling dir、taildir

-》channel:负责临时存储数据

mem、file

-》sink:从channel中取数据,将数据发送给目标地

hdfs

-》高级特性

-》sinks:多个sink,一个sink要对应一个channel

-》flume colloctor

-》source insterceptor

-》timestamp

-》host

-》static

-》regex

-》channel selector

-》sink processor

-》load_balance

-》failover

-》shell:适合小数据量的业务收集

-》大数据存储

-》hdfs

-》nginx的日志

'$remote_addr^A$msec^A$http_host^A$request_uri';

192.168.134.1^A

1523153395.558^A

bigdata-training01.erongda.com^A

/hpsk.jpg

en=e_pv&

p_url=http%3A%2F%2Flocalhost%3A8080%2Fhpsk_sdk%2Fdemo.html&

p_ref=http%3A%2F%2Flocalhost%3A8080%2Fhpsk_sdk%2Fdemo.html&

tt=%E6%B5%8B%E8%AF%95%E9%A1%B5%E9%9D%A21&

ver=1&

pl=website&

sdk=js&

u_ud=4E770FF3-2F36-4311-BEBA-69366B19EEA8&

u_mid=hpsk&

u_sd=465D3B0E-E600-4D56-B7FC-01591F33D4A5&

c_time=1523153395361&

l=zh-CN&

b_iev=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20Win64%3B%20x64)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F60.0.3112.90%20Safari%2F537.36&

b_rst=1366*768

-》工作中运行flume的程序

$FLUME_HOME/bin/flume-ng agent --conf $FLUME_HOME/conf/ --conf-file $FLUME_HOME/conf/collectLog.conf --name $1 -Dflume.root.logger=INFO,console >> $FLUME_HOME/logs/collectLog.run.log 2>&1 &

-》写入hdfs

-》设置分区

-》设置大小

-》使用上面命令运行

美团:https://tech.meituan.com/mt-log-system-arch.html

-》使用shell脚本上传

-》将nginx日志拆分一天一个文件,文件中包含日期

-》上传到对应的分区

-》bin/hdfs dfs -put linux hdfs

-》bin/hive -e --database stu_info ""

二、ETL

-》实现的功能

-》字段的过滤

-》过滤非法数据,不需要的字段

-》解析补全数据

-》ip:国家省份城市

-》客户端:浏览器和操作系统

-》字段的格式化

-》时间的格式化

dd/MMM/yyyy HH:mm:ss

-》yyyy-MM-dd HH:mm:ss

-》unixtimestamp:ms为单位

-》获取来源域名

-》第一步:找到该用户访问的第一条记录中的refere_url的值

-》第二步:对url进行截取

-》通过MapReduce去实现etl

-》一般只有Mapper,没有reduce

-》解析日志数据

58.215.204.118

-

-

[18/Sep/2013:06:51:35

+0000]

"GET

/nodejs-socketio-chat/

HTTP/1.1"

200

10818

"http://www.google.com/urlsa=t&rct=j&q=nodejs%20%E5%BC%82%E6%AD%A5%E5%B9%BF%E6%92%AD&source=web&cd=1&cad=rja&ved=0CCgQFjAA&url=%68%74%74%70%3a%2f%2f%62%6c%6f%67%2e%66%65%6e%73%2e%6d%65%2f%6e%6f%64%65%6a%73%2d%73%6f%63%6b%65%74%69%6f%2d%63%68%61%74%2f&ei=rko5UrylAefOiAe7_IGQBw&usg=AFQjCNG6YWoZsJ_bSj8kTnMHcH51hYQkAA&bvm=bv.52288139,d.aGc"

"Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"

-》分隔符:空格

-》字段信息:11个

0:ip

1: -

2: userid

3: time

4:时区

5: 请求方式

6: 请求地址

7: 访问协议

8: 请求结果状态

9: 返回结果的字节大小

10: refere_url

11: user_agent

-》需要的字段:

-》ip

-》user_id

-》time

-》request

-》status

-》body_size

-》http_ref

-》user_agent

-》MapReduce实现

-》自定义数据类型:webLogBean

-》valid:bool

标记该条记录是否合法

-》ip

-》user_id

-》time

-》request

-》status

-》body_size

-》http_ref

-》user_agent

-》input:默认读文件

-》map:

-》字段解析

-》输入:key是偏移量,value是行的内容

-》解析及非法判断:编写 工具类实现

-》将每一行内容进行分割,给weblogbean赋值

-》对字段进行过滤、格式化

simpledataformat df1 = new simpledataformat("dd/MMM/yyyy:HH:mm:ss",locale.english);

Date date = df1.paser("11/Aug/2018:00:00:00");

simpledataformat df2 = new simpledataformat("yyy-MM-dd HH:mm:ss")

String parsedate = df2.format(date);

-》做非法性判断

-》判断时间是否不存在?

-》字段个数能不能小于11?

-》

-》output