尚硅谷Java版Flink(武老师清华硕士,原IBM-CDL负责人) P116-P123
024.尚硅谷_Flink项目_市场推广统计(三)_不分渠道代码实现_哔哩哔哩_bilibili
1, 网站独立访客数UV的统计-基于set去重的简单实现
2, 网站独立访客数UV的统计-布隆过滤器
(1)布隆过滤器——概率性数据结构
位图bitmap,用0和1判断数据是否存在
特点是高效地插入和查询
“某样东西一定不存在或可能存在”
(2)自定义窗口触发器 extend Trigger
自定义Trigger需要实现的方法说明:
OnElement :每一个数据进入窗口都会触发。
OnEventTime :根据接入窗口的EventTime进行触发操作
OnProcessTime : 根据接入窗口的ProcessTime进行触发操作
Clear : 执行窗口及状态数据的清除方法。
窗口触发方法返回结果的类型:
CONTINUE : 不进行操作,等待。
FIRE : 触发计算且数据保留。
PRUGE : 窗口内部数据清除且不触发计算。
FIRE_AND_PURGE : 触发计算并清除对应的数据。
(3)自定义布隆过滤器 -- 主要用来计算offset
定义位图大小,一般需要定义位2的整次幂
实现一个hash函数
(4)process处理函数
-将位图bitmap存入redis,用windowEnd作key
-将窗口count计算的值存入redis,用“uv_count”作key,用hash结构-映射表,存多个窗口的数据
-getbit命令可以获取通过自定义布隆过滤器计算出来的offset在redis位图里对应的bit值
-根据以上命令的bit值确认是否有hash碰撞
-如果不存在则在对应位图位置置1,同时更新redis里保存的count值(频繁对redis里同一个key的hash结构数据进行更新读取操作)
3、虚拟机安装redis报错
make时报如下错误:
cd src && make install
make[1]: 进入目录“/opt/module/redis-3.2.8/src”
CC adlist.o
In file included from adlist.c:34:0:
zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
#include <jemalloc/jemalloc.h>
^
编译中断。
make[1]: *** [adlist.o] 错误 1
make[1]: 离开目录“/opt/module/redis-3.2.8/src”
make: *** [install] 错误 2
原因:jemalloc重载了Linux下的ANSI C的malloc和free函数。
解决办法:make时添加参数。
make MALLOC=libc
4、 APP市场推广统计-分渠道
-自定义数据源SimulatedMarketingBehaviorSource
-.keyBy("channel", "userBehavior")
组合key分组,注意分组后的数据是个二元组
-agg算子里可以实现ProcessWindowFunction的窗口函数
5、APP市场推广统计-全量,不分渠道
-通过sum求和返回的是二元组的类型
-通过agg计算count值可以通过窗口函数封装成自己想要的实体类