大数据技术学习笔记之网站流量日志分析项目:数据采集层的实现
一、数据采集业务
-》数据源
-》网站:用户访问日志、用户行为日志、服务器运行日志
-》业务:订单、用户、商品信息
-》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
上一篇: 网站优化过程中降权了,应该如何处理?
下一篇: 域名对品牌什么影响?