开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第三阶段):数据预处理-数据清洗需求分析】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/671/detail/11641
数据预处理-数据清洗需求分析
主要内容:
一、课程计划
二、数据清洗模块
三、需求
四、设计
一、课程计划
前面已经把第二阶段处理完了,接下来进入第三阶段,现在来看一下第三阶段的课程计划。第三个阶段和第四个阶段都是为了实现数据处理的预处理阶段,需要处理十个模块,从链路统计,清洗,脱敏,拆分到监控。
而第三阶段要实现到数据解析模块,历史爬虫结构化数据推送系统监控放在第四阶段,第三阶段要实现的就是数据清洗,脱敏,拆分,分类和解析。
二、数据清洗模块
接下来是数据清洗,这个数据清洗是第三阶段的第一个模块,是数据预处理的第二个模块,前面的链路统计已经做完了,数据清洗的目标是数据中含有 HTML 、CSS、 js 、JPG、 png 等无用的数据,为使预处理更高效,需将无用的数据过滤掉,只保留有效的数据。
来看一下流程,
第一步是采集数据,采集数据的格式为:
然后再把它集中在 kafka 中,其中夹杂着很多业务需求文件,那这个 Request 很有可能是 HTML 、CSS 这些没有用的数据,也有可能是爬虫中的 quryao,目标就是把这些没有用的数据过滤掉来提高效率。而其中有用的数据就是spider queryao,要把这些数据保留下来,实现这个目标。也就是数据中有很多情况,要把无用的数据过来掉。要怎样实现这个过程?首先要看一下需求,里面夹杂着许多静态文件,要把这些数据过滤掉。然后数据库中已经存储了过滤规则,过滤规则存储在过滤数据表里面。过滤规则表:itcast_filter_rule
过滤数据表已经明确的标识了 id、type 和 value,value 里是正则表达式 html、js、css、jpg、png、gif,type 右键查看,指的是零是黑名单,一是白名单,而这个表里面全都是零,也就是全都是黑名单,也是要过滤掉的数据,这个过滤数据就是企业内部 web 界面,里面 MySQL 里面的规则。
三、需求
看流程图,首先把过滤的数据读过来了,3-1把数据读取过来,3-2是接下来要做的事情,然后就要把过滤的规则读取过来,然后进行过滤,看程序代码,现在是每隔两秒钟过滤一次,也就是说两秒钟拿到一个数据。而要对数据过来,就要先拿到规则。现在有六个 value,但可能会更新了,增加了。那要怎么尽快地知道数据里面是否有更新?如果数据库里的数据更新了,就要在每一个批次里面去判断数据是否有更新,在数据迭代之前,先判断规则是否有更新,如果有更新就重新读取,没有更新就继续往下走,所以在数据没两秒钟循环一次地时候,需要判断规则是否有更新,也就是说每两秒钟就要到规则表中看是否有更新,如果有更新就重新读取规则,然后用新的规则来计算数据。MySQL 数据库没有操作问题也不大,但是不太合理,那就把是否有更新的数据放到 redis 里面去,把 redis 的优势发挥出来,能提高效率。如果 MySQL 里面的规则有更新,就把 red is 的标识改为 TRUE,然后数据预处理的程序每隔两秒钟访问 redis。我们需要根据过滤规则进行数据过滤,后期需要设置到界面控制,实现数据库和 red is 标记同步这句话相呼应。也就是需要在 redis 中添加标记,标记他表示数据库里的规则是否需要更新,如果做了更新就把 redis 里的标记改成 TRUE,那预处理程序每隔2秒执行一次,每执行一次就判断 redis 中对否更新,如果有更新就重新读取MySQL 数据库。
//5、消费数据
KafKaValue.ForeachRDD(rdd=>{
数据库只有在更新时才会读取一次。
四、设计
首先要在 sc 初始化后读取 kafka 数据,然后需要根据数据库的规则,并且设置到广播变量中,因为数据和规则读取过来以后,生产方式是一个集群,集群跨结点,要让所有的节点都读到这个规则,就要把它放到广播变量中。再往后读取 kafka 数据进行处理时,业务上线后会一直进行业务计算,在这期间可能过滤规则会发生改变,所以需要根据red is 中的标记来决定是否更新过滤规则,在每处理一批数据都需要查看 red is 标识决定是否更新规则。如果需要更新就更新,不需要更新就跳过,读取和更新规则后,根据规则过滤 kafka 中的数据,只保留 query 相关的 URL, js等信息过滤掉,也就是没有匹配上的数据都保留下来。过滤规则表:itcast_filter_rule
以上就是数据的过滤目标以及需求和设计。