SparkStreaming项目实战,实时计算pv和uv(硬肝)
发布网友
发布时间:2024-09-15 07:54
我来回答
共1个回答
热心网友
时间:1天前
项目流程涉及到从日志数据的采集、清洗、实时计算至结果展示的全过程。数据首先通过 Flume 采集并存储于 HDFS,以供离线业务使用,同时,这些数据也通过 Kafka 进行 sink,而 SparkStreaming 则从 Kafka 中拉取数据进行实时处理。
计算 PV(页面访问量)时,采用直接拉取数据的模式,利用 mapWithState 算子保存状态信息。此操作与 updateStateByKey 类似,且性能更为优越。在实际操作中,数据处理需先进行清洗与过滤,以确保数据的准确性和可用性。
UV(独立访客数)的计算则基于去重原则,使用 Redis 的 set 集合来实现。每次数据流入时,将日期作为键,用户标识作为值加入到 set 集合中,每 20 秒刷新一次 set 集合大小,并更新数据库,从而实现全天候去重统计。
结果最终被存储在 MySQL 数据库中,数据更新频率为每 10 秒一次,以实现前端的实时展示需求。为确保数据的容错性,SparkStreaming 配备了自带的 checkpoint 机制,用于在应用重启时恢复数据,避免因数据丢失导致的问题。此机制在每天凌晨定时销毁 StreamingContext 对象,以重新进行统计计算 PV 和 UV。
在数据处理过程中,考虑到应用升级与数据容错,采用了 checkpoint 机制的高效实现,以及在应用迁移或升级时的策略。此策略确保了数据的准确性和完整性,避免了因数据丢失而导致的问题。
此外,为了确保数据的一致性和准确性,还提出了将 offset 保存至 MySQL 的方法。通过将 PV、UV 与 offset 作为一条语句存储在 MySQL 中,可以实现 exactly-once 的语义保证。同时,日志系统使用了 log4j2,用于本地保存日志,并通过邮件发送 ERROR 级别的日志至手机,以监控系统运行状态,及时发现并处理错误。
SparkStreaming项目实战,实时计算pv和uv(硬肝)
项目流程涉及到从日志数据的采集、清洗、实时计算至结果展示的全过程。数据首先通过 Flume 采集并存储于 HDFS,以供离线业务使用,同时,这些数据也通过 Kafka 进行 sink,而 SparkStreaming 则从 Kafka 中拉取数据进行实时处理。计算 PV(页面访问量)时,采用直接拉取数据的模式,利用 mapWithState 算子...
Flume+Kafka+Flink+Redis构建大数据实时处理系统(PV、UV)
对于数据分析结果时间要求严格的,可以采用在线实时处理方式。例如使用Flink、SparkStreaming进行处理。例如天猫双十一的成交额实时动态更新,就需要采用在线处理。接下来介绍实时数据处理方式,即基于Flink的在线处理,在以下完整案例中,我们将完成以下几项工作:需要注意的是,本案例核心在于如何构建实时处理系统,...