爬虫识别-Redis 爬虫数据备份-准备数据| 学习笔记

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 快速学习爬虫识别-Redis 爬虫数据备份-准备数据

开发者学堂课程【大数据实战项目 - 反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第六阶段爬虫识别-Redis 爬虫数据备份-准备数据】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/674/detail/11730


爬虫识别-Redis 爬虫数据备份-准备数据

准备数据

将爬虫数据写到 Redis 中后,流程中的第六步进行完成:

image.png

识别出来的爬虫写到 Redis 中后,爬虫识别的最终目标已经完成,要实现反爬虫,就需要将爬虫计算出来,此时已经计算完成,后续如何反爬虫较为简单,例如离线计算。第六阶段除了实现计算识别之外,还要实现其他事情。从总体流程上看,爬虫识别已经完成。回到第六阶段的最初模块,最初模块如下:

1、规则匹配和打分并进行阈值判断

2、剔除非黑名单数据

3、黑名单数据去重

4、黑名单 Redis 数据恢复

5、黑名单数据备份到 Redis

6、黑名单数据实时存储 hdfs,用于 Redis 数据恢复

7、存储规则计算结果RDDHDFS

已经实现前三步,即黑名单数据备份到 Redis,第四步黑名单radius数据恢复和第六步黑名单数据实时存储 hdfs,用于 Redis 数据恢复和第七步存储规则计算结果Rdd HDFS 中还未完成。将数据写入到 Redis 中,数据可能会丢失,所以就需要将其备份到 HDFS 中,所以就需要完成第六步数据的备份。第四步和第六步完成之后,一整套的Redis数据写入、防止丢失、备份就已经存在,第七步就是存储规则计算结果 Rdd HDFS 中。最核心的是爬虫识别,爬虫识别完成之后,其他功能模块的代码都不太重要。但是面试时如果询问Redis如果丢失了数据,需要知道写入时做了备份,如果丢了,可以进行恢复。

黑名单数据实时存储 hdfs,用于Redis数据恢复。由于 Redis 是基于内存的爬虫数据,写入 Redis 有数据丢失的风险,所以需要将爬虫数据写入 Redis 的同时也写入hdfs,用于当Redis丢失数据时的恢复。设计过程如下:

1、构建 data Fream

2、存储 data Fream

最后将 data Fream 的数据写入到 HDFS 中,此时涉及到构建 date Fream 的过程。首先准备数据,其次填充 array,最后调用写入方法。最关键的是调用写入方法。首先准备存储数据的 array,由于需要写入到 HDFS 中,使用 sparksql 计数。代码如下:

//黑名单DatpFrame-备份到HDFS

//写入Redis前,准备存储数据的Array

val antiBlackListDFR= new ArrayBuffer[Row]()

在写入 Redis 的同时封装数据。在数据入库的源代码中,首先遍历 Rdd,其次将Rdd序列化,然后遍历 BLACKdata数据。在遍历出数据之后,加上黑名单DatpFrame-备份到 HDFS。首先准备 array buffer,由于需要写入到radius,所以需要使用变量接收数据。准备好变量之后,将 key value 写入 Redis 中,写入到Redis 中后,立刻将其进行封装,也就是填充 array,代码如下:

//添加黑名单DataFrame-备份到ArrayBuffer

//写入redis后立刻将数据添加到antiBlackListDFR

antiBlackListDFR.append(Row(((

PropertiesUtil.getStringByKey(

"cluster.exptime.anti black list",

"jedisConfig.properties").toLong)

* 1000

+ System.currentTimeMilsl().toString,

blackListKey,

blackListValue))

将数据添加到 Redis 中之后,立马将数据写入到之前创建的变量中。添加的数据有Keyvalue,首先在其中定义了row,在之前声明变量时就是row。由于使用了 Sparksql,需要有一行,其中Key value就是一行,遍历一次就有一行,而此时套用了for循环,遍历遍历时,将array填满,填充的动作在for循环之中,要注意代码添加的位置。添加的数据有读取工具,读取了反扒黑名单数据有效期。在写入数据写入了3600。所以此时也需要使用这个时间。将时间读取之后转换为long乘以1000,再加上当前时间。还有Keyvalue。在该array buffer中第1个是时间,第2个是Key,第3个是value,此时将其添加到array中,数据准备完成。接下来将数据写入,调用写入方法。此时需要注意调用写入方法不能在for循环中写,因为是为了封装数据填充array,之前的arrayfor循环外。代码如下:

//增加黑名单数据实时存储到HDFS的功能黑名单数据持久化用于Redis数据恢复BlackListToHDFS.saveAntiBlackList(sc.parallelize(antiBlackListDFR), sqlContext)

首先引入 array list。在util中的 hdfs BLACKlistHDFS,也就是代码中对应的BLACKlistHDFS。此时需要一个参数 SQLcontext,需要创建该参数,回到计算方法最上方实例SQLcontext

//实例SQLcontext

val sqlContext=new SQLContext(sc)

SQLcontext实例完成,此时已经不报错。

相关文章
|
6月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
249 5
|
7月前
|
数据采集 NoSQL 关系型数据库
Python爬虫去重策略:增量爬取与历史数据比对
Python爬虫去重策略:增量爬取与历史数据比对
|
6月前
|
数据采集 存储 NoSQL
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
352 67
|
5月前
|
数据采集 Web App开发 JavaScript
Python爬虫解析动态网页:从渲染到数据提取
Python爬虫解析动态网页:从渲染到数据提取
|
6月前
|
数据采集 存储 NoSQL
分布式爬虫去重:Python + Redis实现高效URL去重
分布式爬虫去重:Python + Redis实现高效URL去重
|
5月前
|
存储 缓存 NoSQL
告别数据僵尸!Redis实现自动清理过期键值对
在数据激增的时代,Redis如同内存管理的智能管家,支持键值对的自动过期功能,实现“数据保鲜”。通过`EXPIRE`设定生命倒计时、`TTL`查询剩余时间,结合惰性删除与定期清理策略,Redis高效维护内存秩序。本文以Python实战演示其过期机制,并提供最佳实践指南,助你掌握数据生命周期管理的艺术,让数据优雅退场。
332 0
|
7月前
|
数据采集 存储 缓存
Python爬虫与代理IP:高效抓取数据的实战指南
在数据驱动的时代,网络爬虫是获取信息的重要工具。本文详解如何用Python结合代理IP抓取数据:从基础概念(爬虫原理与代理作用)到环境搭建(核心库与代理选择),再到实战步骤(单线程、多线程及Scrapy框架应用)。同时探讨反爬策略、数据处理与存储,并强调伦理与法律边界。最后分享性能优化技巧,助您高效抓取公开数据,实现技术与伦理的平衡。
337 4
|
1月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
|
2月前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
152 1
Redis专题-实战篇二-商户查询缓存

热门文章

最新文章