版权声明: 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,跳出率,二跳率
-》来源分析:
-》受访分析:
-》访客分析:
-》转化路径分析:
-》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,跳出率,二跳率
-》来源分析:
-》受访分析:
-》访客分析:
-》转化路径分析: