大数据技术学习笔记之网站流量日志分析项目:网站业务与企业架构2

版权声明: https://blog.csdn.net/weixin_37254888/article/details/79884844
一、回顾
    -》flume使用遇到的错误
        -》少jar包
        -》卡住不动:agent文件不对
        -》环境变量:hdfs、hive
    -》Flume三大组件
        -》source:负责采集数据源,将数据源变成数据流,封装在event当中,将封装好的数据流发送给channel
        -》channel:负责将source发送过来的数据进行临时存储
        -》sink:负责从channel取数据流,将数据流发送到目标地
    -》flume运行:定义一个配置文件:agent(source、channel、sink)
        bin/flume-ng agent
        --conf flume_conf_dir
        --name agent_name
        --conf-file agent_file_path -Dflume.root.logger=INFO,console
    -》flume常用的组件类型
        -》source:
            -》exec:用于执行一条Linux命令,通过命令读取数据流
                一般都使用tail -F 来动态读取某一个文件的变化
            -》spooling 目录文件 directory:用于监控一个目录,动态读取目录中的文件
            -》taildir:用于动态监控多个文件,并且动态监控每个文件的变化
        -》channel:
            -》file:将数据流暂存在文件中,相对慢,安全性高,适合数据量大
            -》mem:将数据缓存在内存中,相对快,安全性低,适合小数据量
        -》sink:
            hdfs:用于将数据存储到hdfs、文件大小、分区.取名
            hive:将数据写入hive表
                -》要求必须开启metastore server服务
                    hive.metastore.uris=thrift://hostname:9083
                    bin/hive --service metastore
                    client-》hiveserver2-》metastore server
                -》hive的表必须是一张桶表
                -》要求hive中文件格式必须为orc类型
                -》在工作中,一般不使用hive sink,使用hdfs sink,手动添加
            hbase:将数据写入hbase
                -》HBaseSink:实时将数据写入hbase
                    SimpleHbaseEventSerializer:将一个event中所有的数据作为一列
                    RegexHbaseEventSerializer:通过正则匹配每一列
                -》AsyncHBaseSink:异步将数据写入hbase
                    -》不写securety hbase:默认是SimpleAsyncHbaseEventSerializerr
    
二、Flume的企业架构
    -1》taildir source:监控多个文件
        a1.sources.s1.type = TAILDIR
        a1.sources.s1.positionFile = /opt/cdh-5.7.6/flume-1.6.0-cdh5.7.6-bin/position/taildir_position.json //作用是存储是否读取过还是没读
        a1.sources.s1.filegroups = f1 f2 //监控两个文件f1 f2
        a1.sources.s1.filegroups.f1 = /opt/datas/flume/taildir/hadoop.txt
        a1.sources.s1.headers.f1.headerKey1 = value1
        a1.sources.s1.filegroups.f2 = /opt/datas/flume/taildir/dir/.*
        a1.sources.s1.headers.f2.headerKey1 = value2        
    -》多sink:多个目标地
        -》应用场景:用于采集到的数据发送给多个目标地
        -》实现:在agent中定义多个channel,多个sink即可
            注意:一个sink要对应一个channel
            a1.sources = s1
            a1.channels = c1 c2
            a1.sinks = k1 k2
            
            a1.channels.c1.type = memory
            a1.channels.c1.capacity = 1000
            a1.channels.c1.transactionCapacity = 100
            
            a1.channels.c2.type = memory
            a1.channels.c2.capacity = 1000
            a1.channels.c2.transactionCapacity = 100
            
            a1.sinks.k1.type = hdfs
            ///
            a1.sinks.k2.type = hdfs
            ///
            
            
            a1.sources.s1.channels = c1 c2
            a1.sinks.k1.channel = c1
            a1.sinks.k2.channel = c2
    -》flume collector(收集所有的flumes的数据统一发送给目标地)
        -》flume agent:用于采集数据,一般有多个agent在多台机器上
        
        -》flume collector:用于收集所有flume agent的数据,统一发送给hdfs
        -》应用场景:为了解决高并发写入hdfs,引起磁盘及网络负载的问题
        -》一般使用固定的网络型的sink和source配对:avro sink / avro source
        flume agent:
            source:exec/spooling dir/taildir
            channel:mem/file
            sink:avro sink
                //1 type    –    The component type name, needs to be avro.
                //2 hostname    –    The hostname or IP address to bind to.
                    决定了你要发送给谁,这里配的是collector的地址
                //3 port    –    The port # to listen on.
                    与collector监听一致的端口号:4545
        flume collector:
            source : avro source
                //1 type    –    The component type name, needs to be avro
                //2 bind    –    hostname or IP address to listen on
                    自己的ip或者主机名
                //3 port    –    Port # to bind to
                    监听的端口号
            channel:mem
            sink:hdfs
            
        -》启动顺序:
            -》先启动collector
            -》后启动agent
            
三、三大高级组件
    -》flume拦截器:Flume Interceptors
            封装event的头部,用于对数据进行过滤或者包装的
        -》Timestamp Interceptor:时间戳拦截器
            -》在所有event的头部添加一个keyvalue
                key是timestamp
                value就是具体的timestamp的值
            -》一般用于hdfs分区时
        -》Host Interceptor:主机名拦截器
            -》在所有event的头部添加一个keyvalue
                key是host
                value就是该event所在的机器主机名
        -》Static Interceptor:自定义keyvalue(根据需要自己定义)
            a1.sources.s1.interceptors = i1
            a1.sources.s1.interceptors.i1.type = static
            a1.sources.s1.interceptors.i1.key = datacenter
            a1.sources.s1.interceptors.i1.value = NEW_YORK
        -》Regex Filtering Interceptor:正则匹配拦截器
            -》自定义正则表达式
            -》如果你的event数据符合该正则就会被采集
            a1.sources.r1.interceptors.i1.regex = (\\d):(\\d):(\\d)
        -》Regex Extractor Interceptor
            -》在头部自定义一个正则表达式
            
            
        -》结合timestamp拦截器和Regex Filtering Interceptor实现对于数据的封装和过滤(只采集拥有花括号的行)
            {1,2,3,4}
            1,2,3
            {5,6,7,8}
            
            a1.sources.s1.interceptors = i1 i2
            a1.sources.s1.interceptors.i1.type = timestamp
            a1.sources.s1.interceptors.i2.type = regex_filter
            a1.sources.s1.interceptors.i2.regex = (?<=\{)[^}]*(?=\})
            报错:正则表达式出错
            Source s1 has been removed due to an error during configuration
java.util.regex.PatternSyntaxException: Illegal repetition {^ *}

    -》Flume Channel Selectors(不同的channel不同的值)
        Replicating Channel(默认类型) Selector:默认将数据发送给每一个channel
        Multiplexing Channel Selector:根据值的不同发送给不同的channel
            a1.sources = r1
            a1.channels = c1 c2 c3 c4
            a1.sources.r1.selector.type = multiplexing
            a1.sources.r1.selector.header = host
            a1.sources.r1.selector.mapping.host1 = c1
            a1.sources.r1.selector.mapping.host2 = c2 c3
            a1.sources.r1.selector.default = c4
            
    -》Flume Sink Processors
        -》sinkgroup:将多个sink进行统一封装
        -》负载均衡:load_balance
            -》随机
            -》轮询
            a1.sinkgroups = g1
            a1.sinkgroups.g1.sinks = k1 k2
            a1.sinkgroups.g1.processor.type = load_balance
            
        -》故障转移:failover
            a1.sinkgroups = g1
            a1.sinkgroups.g1.sinks = k1 k2
            a1.sinkgroups.g1.processor.type = failover
            a1.sinkgroups.g1.processor.priority.k1 = 5  
            a1.sinkgroups.g1.processor.priority.k2 = 10  //priority权重越高,先工作

四、web日志的产生
    -》流程:
        -》用户通过搜索/直接输入网址/通过连接广告进入网站
        -》用户根据需求产生一系列的事件:点击、收藏、下单
        -》用户发送请求
        -》用户的请求被反向代理服务器进行接收转接给后台服务器
            -》反向代理服务器:Nginx
            -》后台服务器:真正接收用户请求并且返回内容记录日志
        -》后台服务器记录用户的请求信息(访问日志)
            -》用户请求的类型
            -》请求访问的页面
            -》当前的页面
            -》用户的基本信息
        -》后台服务器根据用户的请求返回相应的结果
        
    -》网站日志内容
        -》内容的收集
            -》通过脚本监听用户的行为,一旦用户触发,那么就会收集相应的日志
                -》用户id:guid
                -》会员id:member_id/user_id
                -》ip(国家、省份、城市)
                -》时间
                -》客户端(浏览器+操作系统)
        -》信息的分类
            系统属性特征:比如所采用的操作系统、浏览器、域名和访问速度等。
            访问特征:包括停留时间、点击的URL等。
            来源特征:包括网络内容信息类型、内容分类和来访URL等。
            产品特征:包括所访问的产品编号、产品类别、产品颜色、产品价格、产品利润、产品数量和特价等级等。
        https://search.jd.com/Search?keyword=%E5%A4%A7%E7%B1%B3&enc=utf-8&suggest=1.his.0.0&wq=&pvid=c008748f1965447398c69635d6b024d3
                
五、点击流
    -》用户的访问流程:会话
        -》用户打开第一个网页(主页)
            -》与网站建立连接,创建session
        -》用户不断的访问页面
        -》用户关闭所有页面,session超时
    -》两个MapReduce实现统计不同会话时长段的个数
        日志数据:
            session1    ts1
            session2    ts1
            session1    ts2
            session1    ts3
            session2    ts2
        -》第一个MapReduce:求每个sessionid对应的时长
            session1    length1
            session2    length2
        -》第二个MapReduce:求不同会话时长段的个数
            if(length<10 )
                context.write(0-10,1)
            else if (length <20)
                context.write(11-20,1)
            key:0-10/11-20
            value: 1
    -》用户点击流的应用
        -》用户采集的信息经过分析较为单一、所能得到的信息价值较低
        -》构建点击流可以更精确的对用户的行为,习惯进行了解和分析
    -》如何构建点击流
        -》源表:
            每一条记录构建筛选出来的访问信息
            sessionid    timestamp    userid    ip    url    refere_url
        -》点击流表:pageviews
            sessionid1    ts1        1        url1        40
            sessionid1    ts2        2        url2        20
            sessionid1    ts3        3        url3        30
            sessionid2    ts1        1        url1        10
            sessionid2    ts2        2        url2        20
        -》点击流visit表:
            sessionid1    start_time    stop_time    pv    length userid
            
            
六、流量分析
    -》分析内容:
        -》网站业务指标:公共业务指标
            -》百度统计
            -》友盟
            -》易分析
            -》talking data
        -》模块
            -》用户分析
                用户分析:新用户、老用户、回流用户、流失用户、总用户
                    新会员、老会员、总会员、活跃会员
                用户趋势 :按照时间维度进行趋势分析
                活跃用户 :当前访问用户
                用户画像 :根据用户特性,分析用户属性
                地域分布 :基于地域维度进行统计
                终端分析 :安卓、ios、移动设备、笔记本
                版本分析 :针对不同客户端的版本进行分析
                实时访客 :实时访问的人数
                使用行为 :下订单、收藏商品、访问某个商品
                事件分析 :订单提交、订单回退、添加购物车,结算
                页面分析 :哪个连接用户点击最多,热点图
                页面路径 :用户访问路径
                使用习惯 :用户习惯
                渠道分析 :用户如果进入网站
                渠道来源细分 :来源分析
                留存分析 :用户进来,留存多少用户
                新用户留存 :
                活跃用户留存 :
                转化分析 :访客转会员
                转化漏斗:
    -》分析的功能
        -》优化网站,提高用户的体验
        -》提供运营决策
    -》分析模型
        -》质量分析模型
            -》重视流量的质量
        -》多维度分析模型
            -》基于多维度的组合分析
                -》时间维度
                -》地域维度
                -》终端维度
        -》网站内容及导航分析模型
            -》导航
            -》功能:注册、购物车
            -》详情
            
        -》网站的转化及漏斗分析
            -》转化:业务层面的用于流式和迷失的结果
                -》购买商品
                进入网站    浏览商品    注册        添加购物车    支付
                1000        900            300            150            50
                        10%            70%            85%        95%
            -》漏斗:用户访问层面的流式和迷失的结果
                首页    一级页面        二级页面        三级页面
                1000    400                200                10
                    60%        80%                    99%
                    
    -》分析模块
        -》基础分析:pv,uv,ip,跳出率,二跳率
        -》来源分析:
        -》受访分析:
        -》访客分析:
        -》转化路径分析:
        
        

        
        
                    
                    
                   

猜你喜欢

转载自blog.csdn.net/weixin_37254888/article/details/79884844