爬虫识别- Redis 爬虫数据备份-代码解读| 学习笔记

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 快速学习爬虫识别- Redis 爬虫数据备份-代码解读

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

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


爬虫识别- Redis 爬虫数据备份-代码解读

内容介绍:

一、APP介绍

二、总结

 

一、APP 介绍

已经完成备份 Redis 数据到 HDFS,采集数据,封装数据,调用方法。调用存储方法,代码如下:

BlackListToHDFS . saveAntiBlackList

(sc. parallelize(antiBlackListDFR), sqlContext))

1个参数是之前封装的数据,第2个参数是SQLcontext。方法内部如下:

def saveAntiBlacklist(

antiBlackListRDD: RDD[ Row], sqlContext: SQLContext) :

Unit ={

//构建DataFrame

val tableCols = List("keyExpTime", "key", "value")

val schemastring=tableCols . mkString("-")

val schema = structType(

schemaString .

split( regex=-")

.map(fieldName => structField(fieldName, stringType, true)))

val dataFrame: DataFrame =

sqlContext . createDataFr ame ( antiBlackListRDD, schema)

val path: String = PropertiesUtil. getstringByKey(

key = "blackListPath" ,

propName = "HDFSPathconfig. properties")

HdfssaveUtil. save( dataFrame, time = nu1l, path)

def saveAntiOcpBlackList(): Unit ={

}

} 

方法中第1个参数是之前封装好的时间、Key value,此时将其转化为 Rdd 类型。方法中首先实例了 listList 的值是时间、KeyValue。将 list 用横线进行拼接为一个字符串之后,用横线进行拆分,获取到每一个结果之后,调用map获取到每一个结果,也就是 filedName,第一次是 KeyExpTime,第二次是 Key,第三次是value。获取到时间之后,调用了struct field获取到了文件名称,也就是KeyExpTime。调用了struct field+文件名称+类型,封装 schema,使用的是spark SQL,所以需要有一个表,表结构就是 schema,第一次是 KeyExpTime,第二次是Key,第三次是value。也就是将3个参数转化为了一个schema。获取到schema、数据之后,数据的结构是时间、Keyvalue,与之前所写代码一一对应。将schema和数据转化为了data Fream,此时获取到了表结构。之后是配置路径,配置路径就是读取配置文件中的值,配置文件就是HDFSpathconfig。配置文件如下:

# HDFS数据路径

#黑名单提交到HDFS的路径

blackListPath=hdfs://192.168.100.100: 8020/csair/data/rule-black-list/

#blackListPath=hdfs://10.108.151.101 :8020/csair/data/rule-black-list/

#AntiCalculateResult数据提交到HDFS的路径#anticalculateResultPath=hdfs://192.168.30.17:8020/csair/data/rule - computed/#antiCalculateResultPath=hdfs://10.108.151.101:8020/csair/data/rule - computed/

配置文件中是集群当中的配置路径。获取到路径之后,将路径和封装好的datafream以及时间传给了hdfs中的save方法。 Save方法如下:

object HdfsSaveUtil {

/**

*基于时间生成文件夹保存DataFrame数据到HDFS

* @param dataFrame数据

*@param time数据时间

* @param paths保存路径

*/

def save( dataFrame :DataFrame, time : Time ,paths:string): Unit ={

val date

= if(time == null){

new SimpleDateFormat( pattern = "yyyy/MM/ dd/HH") . format(System. currentTimeMillis())

}else{

new SimpleDateFormat( pattern = "yyyy/MM/dd/HH" ). format (new Date(time . milliseconds ) )

val path = paths+date

dataFrame .write . mode(SaveMode .Append) . format( source = "parquet") . save(path)

}

}

方法中首先进行了判断,判断时间是否为空,如果时间为空,就将当成的系统时间转化为年月日时的时间格式,进行返回,返回给date。如果不空,就将传过来的数据转化为年月日时传给date。将时间添加到path后,一层层嵌套。 Pathdata Frame获取到之后,就将数据写入到路径下:

dataFrame .write . mode(SaveMode .Append) . format( source = "parquet") . save(path)

将数据按照parquet格式写入到配置文件中的配置路径,加上年月日时,将data Frame数据写到路径下。以上就是爬虫数据备份到hdfs的过程。

 

二、总结

第一步,准备数据,写入到 Redis 中同时收集数据,收集完数据之后,调用写入方法。写入方法中首先将数据和schema进行关联,创建data fream,获取到数据之后将其封装为data fream,然后将data Framepath传到save方法中,将数据写入到路径中,以上就是数据分到HDFS的过程。

目标:由于Redis是基于内存的,爬虫数据写入Redis有数据丢失的风险,所以需要将爬虫数据写入redis的同时也写入HDFS-份,用于当redis丢失数据时的恢复。

1、在kv存储到redis的过程中, 向 ArrayBuffer[填充数据, 封装的是(time key value)

2、调用BlackListToHDFS.saveAntiBlackList存储数据

3、在 saveAntiBlackList 创建 schema dataFrame, 然后调用 HdfsSaveUtil.save存储

4、在 save 方法里,先将路径加上时间年月日时,然后将数据存储为序列化(parquet) 的文件

以上就是实现数据备份到 HDFS 过程的代码解读。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
20天前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
66 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
6天前
|
NoSQL Redis 数据库
Redis 数据备份与恢复
10月更文挑战第20天
15 2
|
4月前
|
NoSQL Java Redis
分布式锁实现原理问题之使用Redis的setNx命令来实现分布式锁问题如何解决
分布式锁实现原理问题之使用Redis的setNx命令来实现分布式锁问题如何解决
|
16天前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
131 3
|
19天前
|
JSON NoSQL Java
springBoot:jwt&redis&文件操作&常见请求错误代码&参数注解 (九)
该文档涵盖JWT(JSON Web Token)的组成、依赖、工具类创建及拦截器配置,并介绍了Redis的依赖配置与文件操作相关功能,包括文件上传、下载、删除及批量删除的方法。同时,文档还列举了常见的HTTP请求错误代码及其含义,并详细解释了@RequestParam与@PathVariable等参数注解的区别与用法。
|
18天前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
21 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
22天前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
21 3
|
5月前
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
79 0
|
5月前
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
95 0
|
26天前
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
136 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习