开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop框架搭建)第四阶段:数据预处理-系统监控-监控代码下】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/672/detail/11676
数据预处理-系统监控-监控代码下
内容介绍:
一.封装要展现的数据
二.将数据写入 redis
一.封装要展现的数据
在 runTime 大于0的情况下,约定已经约定完成,代码按着数据读,我们按着数据写即可,最终写到 redis 中。写到 redis 之后在里面封装数据,封装成 Map 类型,因为链路统计功能当中,也是先将数据转换成 Map,然后转换成 JSON,所以这里先将必要的数据转换成 Map:
val Maps=Map(
“costTime”->runTime,
“serverCountMap”->serverCount,
“applicationId”->appId,
“countPerMillis”->runSpeed,
“applicationUniqueName”->appName,
“endTime”->endTimeS,
“sourceCount”->dataCount
)
Maps 就是用来存储数据的,然后往 Map 中写数据,第一个就是运行时间 costTime,它用这个来读数据,我们就用来写数据,costTime 是时间差,是任务的运行时间,结束时间减去开始时间就是运行时间 runTime。第二个是 serversCountMap 链路统计中的结果,以它为K,就是链路统计的结果,没有做任何改动就是 serverCount。第三个是 applicationId, appId。第四个是速度 countPerMillis,速度已经计算好了 runSpeed。接下来是 applicationUniqueName, appName。还有一个 endTime 任务结束的时间,前面 endTime 是一个时间戳,而这里不是时间戳而是具体的时间表,所以需要先把日期类型的格式转换成年月日格式,将时间戳格式的结束时间转换成年月日格式的数据
val simple=new SimpleDataFormat( pattern=“yyyy-mm-dd HH:mm:ss”
val endTimeS=simple.format(new Data(endTime))
这里就是把时间戳转换为年月日的格式。
还有一个数据 sourceCount,指的是一批次数据总数。
第九步骤封装要展现的数据,我们前端要使用这些数据,那就需要给这些数据。加个说明:
//与前端工程师约定一个规则
规则就是它按照上面数据读,我们就按照这些数据写,写与读正好对应。
二.将数据写入 redis
前端 Map 已经有了,现在将数据写入 redis 中,在写入之前转换成 string 类型,将 runTime,appId,runSpeed, appName 以及 dataCount 进行转换,在其后添加.toString,先转换成 string 效果更高些。redis 已有实例,之前已传过来了。
setex 方法传入 key,时间和数据,首先准备写入 redis 需要的 key、时间(数据的有效存储时间,超过这个时间,数据在 redis 内自动删除)、数据(已准备好)key 材料在配置文件中 jedisConfig.properties,集群中 redis 配置文件已经准备好了
链路统计功能调用 LP,监控数据,分别做数据处理监控、查询监控和预订监控,这里链路统计的使用CSANTI_MONITOR 作为前缀,比如 monitor.dataProcess 做预处理的监控功能就用 CSANTI_MONITOR_DP 作为前缀,用cluster.key.monitor.dataProcess
为 K 读取配置文件中的值,调用该方法拿取。
回到方法中
val key = PropertiesUtil.getStringByKey( key=“cluster.key.monitor.dataProcess”,
propName=“jedisConfig.properties”+ System.currentTimeMillis().toString)
key 等于读取的配置文件,读取配置文件的方法在 PropertiesUtil 中,引入进来。第一个参数 key 拿取完成,还得获取配置文件的名称,配置文件名称就是 jedisConfig.properties,前缀拿到之后,需要加一个后缀,后缀在链路统计中加的是时间戳,这里也加一个时间戳作为后缀+ System.currentTimeMillis().toString,将时间戳转换成 string 类型。每一批数据在写的时候都写了一个新的数据,现在 redis 中右键刷新 db0有78个数据,全是LP 数据。
接下来读取存储的周期,数据在 redis 中存多长时间需要读出来
val time=
PropertiesUtil.getStringByKey( key=“cluster.exptime.monitor”,
propName=“jedisConfig.properties”.toInt
周期也在 jedis 配置文件中,
监控数据有效期,单位是秒也就是86400,就是二十四个小时,二十四小时太久了先注释掉,时间太久会导致 redis 中之前很长时间跑的数据都在里面,现在改成半小时也就是1800,半小时以后自动删除。读取 jedis 配置文件方法仍是 PropertiesUtil.getStringByKey()
,后面的时间戳参数不需要了,将日期转换成 toInt。时间有了,key 也有了,代码如下:
redis.setex(key,time,Json(defaultFormats).write(Maps))
Maps 得先转换为 Json 再存储,引入 Json 之后将 Map 使用默认方式 DefaultFormats 方式转换成 write(Maps),就把数据写入 redis 中了。
这就是准备数据然后将数据写入 redis的过程。