尚硅谷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值可以通过窗口函数封装成自己想要的实体类