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

版权声明: https://blog.csdn.net/weixin_37254888/article/details/79884915
一、数据采集业务
    -》数据源
        -》网站:用户访问日志、用户行为日志、服务器运行日志
        -》业务:订单、用户、商品信息
    -》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/url?sa=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





    
       

猜你喜欢

转载自blog.csdn.net/weixin_37254888/article/details/79884915
今日推荐