数据预处理-链路统计-效果与总结|学习笔记

简介: 快速学习数据预处理-链路统计-效果与总结

开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop框架搭建):数据预处理-链路统计-效果与总结】学习笔记与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/670/detail/11635


数据预处理-链路统计-效果与总结

 

内容介绍:

一、设想运行结果

二、数据运行效果

三、总结

 

一、设想运行结果

Key 是一个前缀加时间戳,

前缀是 cluster.key.monitor. linkprocess=csanti_Monitor_LP,后面加一个当前系统的时间戳,

即 system.current.timeMillis,时间看不到,Value 就是以 serversCountMap 为一个值和以activeNumMap 为key一个值,就是说 redis 里面会有一个 KEY 是前缀加时间戳,而里面的值,按照 serversCountMap 和 Activenum Map这个格式来写进数据,这是预想的结果。

 

二、数据运行效果

LinkCount 做了一个引用,直接执行 DataProcessLauncher,把程序跑起来,这时发现redis里面还是没有数据,因为没有数据流进来,这时候把爬虫跑起来,跑一个单程就足够,右键进行执行,但是在 dataprocessLauncher 里面没有看到数据写入,是因为没有做输出。此时看一下数据有没有写入redis里面。

只要把链路统计的功能写入redis里面,然后跑起来不报错,把爬虫也运行起来,这时候就可以看到redis里面有数据流入进来,都是lp加了一个时间戳,每一个文件里面都有一部分数据,数据都是按照 server count map 和 activeNumMap 格式发过来的数据,

如下所示

{

" serverscountMap":{

“192.168.18.16e"10(当前被访问了10次)

activeNumMap":

“192.168.180.16e" : "21"(当前活跃连接数)

}

}

在redis里面看到了以上数据,马上去看一下爬虫监控平台数据管理的数据采集,进行刷新。

发现刷新没有数据,是因为在前面 resource 里面的 conflig.properties 配置文件里面只配置了 mysql 的路径

jdbc_ur1=jdbc:mysq1://192.168.100.160:3306Vgciantispider?useUnicode=true&characterEncokjdbc_username=root

jdbc_password=123456

并没有对 redis 进行配置

#rediscluster 实例地址

#servers = 192.1$8.30.56:6379,192.168.30.56:6380,192.168.30.56:8379,192.168.30.57:6379

#servers = 10.108.151.91:7380,10.108.151.91:8380

#192.168.2.134

servers = 192.168.2.141;7001,192.168.2.141:7002,192.168.2.141:7003(目前的集群,这是不对的,redis里面是160.7001)

#servers = 192.168.2.128:7001,192.168.p.128:7002,192.168.2.128:7000

所以需要修改IP为

servers = 192.168.100.160:7001,192.168.2.141:7002,192.168.2.141:7003(把集群换成100.160)

爬虫监控平台的 web 界面是在 Resources 里面的 Config.properties 进行读操作。

上面是配置 mysal,下面就可以配置 redis 的实例地址,配置好集群即可。配置完成以后重启服务,这时候,在 web 界面进行刷新,就会出现相应的数据,会出现部署服务器和当前活跃连接数以及最近三天采集数据量。

每一次刷新数据,都会进行更新,这就是链路统计的实际效果。这个做完之后就实现了从数据一步一步进行计算,从 reducebykey 到 server_ip n,到时间戳,时间戳打到了 redis 里面,但是数据里面并没有时间戳,当前活跃连接数也打进了redis,只要写到了 redis 里面,前端界面的效果自动就会出现,剩下的操作都是由前端工程师进行操作的。

 

三、总结

*目标:企业需要实时了解每个链路的运行情况、数据采集量、活跃链接数等信息。需在数据在采集时实时展现相关的信息在前台界面(管理界面)*

1、统计每个批次每台服务器访问的总量

获取到—条数据,使用#CS#""对数据进行切割,获取切分后的第十个数据(角标是9),将第十个数据和1,进行输出。

调用reducebykey (下划线+下划线)求去除这个批次每台服务器的放总量

//1遍历rdd获取到每条数据

val serverCount=rdd.map(message=>{

//2抽取出服务器的IP

var ip=""

if (message.split( regex = "#CS#" , limit =-1).length>9){

ip=message.split( regex = "#CS#" ,limit = -1)(9)

}

//3 将ip和1返回

(ip,1)

})//4调用 reducebykey 计算出 ip 和总数

2.统计每个批次每台服务器当前活跃链接数的量

获取到—条数据,使用“#CS#"对数据进行切割,

获取切分后的第十二个数据(角标是11)和第十个数据(角标是9) ,将第十个数据和第十二个数据,进行输出

调用 reducebykey ((k,v)=>v) 求去每个服务器多个数据中的最后一个数据

//1获取到一条数据,使用“#CS#”对数据进行切割

val activeusercount= rdd .map(message=>{

var ip="""

var activeUserCount=""

//切分数据

if (message.split(""#CS#"").length>11){

//2获取切分后的第十二个数据(角标是11)和第十个数据(角标是9)

//截取当前活跃连接数

activeusercount=message.split(""#CS#"")(11)

//截取IP

ip=message.sp1it("#CS#"")(9)}

//3将第十个数据和第十二个数据,进行输(ip ,activeusercount)

}).reduceByKey((k, v)=>v)//4调用reducebykey ((k,v)=>v)求去每个服务器多个数据中的最后一

3.将两批数据写入 redis

在两个数据不为空的前提下,将两个数据转换成两个小的 map

if ( ! servercount.isEmpty)&& ! activeUsercount.isEmpty()){

//将两个数据转换成两个小的 map

val serverCountMap=servercount.co1lectAsMap()

val activeUserCountMap=activeUserCount.collectAsMap()

封装最终要写入redis的数据(将两个小的 MAP 封装成一个大的 MAP)

val Maps=Map(

"serverscountMap" ->serverCountMap ,"activeNumMap"->activeUsercountMap)

在配置文件中读取出数据key的前缀,+时间戳(redis 中对数据的 key)

va1

key=PropertiesUtil.getstringByKey("cluster .key.monitor .linkProcess" , "jedisConfig.properties ")+System.currentTimeMi1lis().tostring

在配置文件中读取出数据的有效存储时间

val

time=Propertiesutil.getStringByKey("cluster . exptime.monitor" , "jedisconfig . properties").

toInt

将数据写入 redis

redis.setex(key ,time , 3son(DefaultFormats). write(Maps))

相关文章
|
12月前
|
搜索推荐 数据挖掘 双11
淘宝运营进阶秘籍:从业余到专业
淘宝运营涉及市场分析、产品定位、店铺装修、营销推广、客户服务、数据分析等多环节。要脱颖而出,需掌握进阶秘籍。本文从精准定位、店铺装修、定价策略、流量获取、客户服务、数据分析及跨平台合作七大方面深入探讨,助商家实现从平凡到卓越的蜕变。通过目标受众分析、优化店铺形象、合理定价、多种促销手段、提升客户体验、利用数据反馈调整策略以及拓展销售渠道,商家可逐步提升运营能力,在竞争激烈的电商环境中取得成功。
1505 4
|
数据采集 数据可视化 前端开发
深入了解埋点分析:Clklog助你优化用户体验
所谓埋点,就是通过在应用程序或网站中插入代码,针对用户行为或事件进行捕获,以收集用户的各种行为数据,比如用户点击了某个按钮、页面访问时间、功能使用频率等。 通过分析这些数据,数据产品经理或数据分析师能够深入理解用户行为,优化用户体验,并根据埋点数据改进产品功能。
深入了解埋点分析:Clklog助你优化用户体验
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
机器学习/深度学习 人工智能 自然语言处理
SCoRe: 通过强化学习教导大语言模型进行自我纠错
谷歌研究人员提出了一种名为自我纠错强化学习(SCoRe)的新方法,旨在使大型语言模型(LLMs)能够在无需外部反馈的情况下即时纠正自己的错误。SCoRe通过在线多轮强化学习训练模型,解决了传统自我纠错方法的局限性。实验结果显示,SCoRe在数学问题求解和代码生成任务上显著提升了模型的自我纠错能力,相较于基准模型和其他方法表现出色。此外,SCoRe还可与其他推理优化技术结合,进一步提升模型性能。尽管存在迭代次数限制和计算成本等局限性,SCoRe为未来研究提供了新的方向,有望推动AI系统的自主性和适应性发展。
676 3
|
JSON Kubernetes 数据格式
crictl 常见的命令大全
crictl(Container Runtime Interface Command Line Interface)是一个命令行工具,用于与符合Kubernetes容器运行时接口(CRI)规范的容器运行时进行交互。它提供了一系列命令来查看和管理容器、镜像、Pod等资源。以下是crictl的一些常见命令及其功能概述: ### 1. 镜像管理 * **查看镜像**: - `crictl images`:列出所有镜像。 - `crictl images | grep <image-name>`:查看特定镜像。 * **拉取镜像**: - `crictl pull <image_na
5567 8
|
前端开发 关系型数据库 MySQL
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别
这篇文章讨论了`com.mysql.jdbc.Driver`和`com.mysql.cj.jdbc.Driver`两个MySQL驱动类的区别,指出`com.mysql.jdbc.Driver`适用于MySQL 5的`mysql-connector-java`版本,而`com.mysql.cj.jdbc.Driver`适用于MySQL 6及以上版本的`mysql-connector-java`。文章还提到了在实际使用中如何根据MySQL版本选择合适的驱动类。
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别
|
机器学习/深度学习 数据采集 自然语言处理
Python实现支持向量机SVM分类模型(SVC算法)并应用网格搜索算法调优项目实战
Python实现支持向量机SVM分类模型(SVC算法)并应用网格搜索算法调优项目实战
|
Web App开发 Linux 编译器
Linux基于webRTC的二次开发(一)
Linux基于webRTC的二次开发(一)
|
消息中间件 Java 微服务
RabbitMQ入门指南(七):生产者可靠性
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了消息丢失的可能性、生产者可靠性中的生产者重试机制和生产者确认机制等内容。
485 0
RabbitMQ入门指南(七):生产者可靠性
|
Java Maven
(短信服务)java SpringBoot 阿里云短信功能实现发送手机验证码
(短信服务)java SpringBoot 阿里云短信功能实现发送手机验证码
3375 0