spark通过获取kafka访问网站数据计算uv,并存到redis中

使用sparkstreaming计算uv并存入redis集群

首先数据是通过flume存入kafka的待分析数据(\t隔开):
在这里插入图片描述

需求就是记录不同ip访问次数,相同的ip不累加,简单来说就是记录不同用户的访问量uv
kafka和redis集群的配置
application.conf

在这里插入图片描述
util类
ConfUtil
在这里插入图片描述
RedisPoolUtil
在这里插入图片描述
scala代码
在这里插入图片描述
计算总uv
在这里插入图片描述
这里的重点是我计算uv使用的是HyperLogLog方案,而不是sql语句或者bitmap方案因为若要计算很多页面的UV,用bitmap还是比较费空间的,N个页面就得有N个500M.这时候HyperLogLog结构就是一个比较好的选择.HyperLogLog是一种基数统计算法,计算结果是近似值, 12 KB 内存就可以计算2^64 个不同元素的基数.但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。

这是redis命令行查找
在这里插入图片描述

这里是java的mongodb查询uv

在这里插入图片描述

参考资料:
用Spark Streaming实时计算海量用户UV.
SparkSQL 实现UV & PV计算.
spark状态stream统计uv(updateStateByKey).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值