62.大数据之旅——电信日志项目05-电信日志数据处理

一、zebra项目介绍与分析
在这里插入图片描述
如图所示,电信运营商的用户通过连接到互联网中的各种网络设备访问一个网站时,其访问信息会通过基站在网络中传递,一个基站负责收集某一片小区用户的上网数据,这些收集的数据都以日志信息进行存储。所有的用户上网行为都会有所记录。比如用户通过3G/4G下载某个app应用,或者登陆、使用某一个App软件,以及通过App发送的数据都会记录。
这样一来,我们就可以根据日志文件,来分析和统计数据,比如可以统计:
1.App下载热度排行
2.用户使用哪个App平均用时最长
3.用户使用哪个App耗费流量最多
…………
既可以根据数据,多维度来统计数据
这就是zebra项目的目的

二、日志数据
日志里的某一条数据(以下为一整行数据,以| 为分割符):

533||11|93287887015245963|6||||1|100.82.254.88|100.82.98.100|2152|2152|13849|147855076||||103|1409649427963|1409649428488|1|15|999||0|10.83.124.18||60914|0|137.175.9.211||80|734|329|4|2|0|0|0|0|221|29|0|0|20|221|12600|1260|1|0|1|3|6|200|221|221|255|559955.com|/tu/31322.JPG|559955.com|Mozilla/5.0 (Linux; Android 4.3; zh-cn; SAMSUNG-SM-G7108V_TD Release/02.15.2014 Browser/AppleWebKit537.36 Build/JSS15J) AppleWebkit/537.36 (KHTML, like Gecko) Version/1.5 Mobile Safari/537.36||http://www.701111.com/||0|0|0|0|||3|0|525|0|0|1:734/329

三、数据以 | 分割后,每个数据的含义(仅展示项目里用到的字段数据)
在这里插入图片描述
这是我们需要处理的每行数据中的字段,通过对这些数据的处理,我们可以得到不同小区的上网详情数据。具体来说,就是把一段时间内的同一个小区内访问同一网站、同一个ip的访问累计起来,就可以得到某小区内的某网站的访问详情。最后将数据写到关系型数据库里。
建表语句:
#创建数据总表

create table F_HTTP_APP_HOST(
reporttime datetime,
apptype int,
appsubtype int,
userip varchar(20),
userport int,
appserverip varchar(20),
appserverport int,
host varchar(255),
cellid varchar(20),
attempts bigint,
accepts bigint,
trafficul bigint,
trafficdl bigint,
retranul bigint,
retrandl bigint,
failcount bigint,
transdelay bigint
);
 

四、zebra项目整体架构
技术架构:
1.maven
利用Maven工程来管理项目。主要是利用Maven来管理jar包,以及利用maven生成avro的rpc方法及序列化对象
2.avro
利用avro实现对象的序列化以及节点间的rpc通信
3.zookeeper
利用zookeeper达到分布式环境的协调服务
工程架构:
视图:
在这里插入图片描述
1.zebra-contract 合同工程。此工程作用:
①管理整个项目的pom.xml文件
②定义全局变量参数
③定义avro相关的avsc文件及avdl文件
2.zebra-jobtracker 工程。此工程作用:
①定时扫描指定目录下是否有待处理文件
②根据用户定义的参数,对文件进行逻辑切块。
③根据文件切块数量生成对应的任务数量。(一个文件块相当于一个任务)
④将任务分发给一级引擎节点(TaskTracker )去处理。并通过zookeeper监控TaskTracker的状态来决定任务分配
3.zebra-engine1 工程。此工程作用:
①接收jobtracker发来的任务,根据任务进行对文件的处理
②将文件数据进行清洗和整理。(根据zebra要求的业务逻辑进行数据整理)
③将处理完的数据发给二级引擎,二级引擎做最后的合并
④通过zookeeper,注册自身节点信息状态,便于集群其他机器监控继而做相关的业务逻辑处理
4.zebra-engine2 工程。此工程作用:
①接收(一个或多个)一级引擎发来的数据。
②对数据进行归并处理
③将最后处理的数据结果落地(写文件或写数据库)

业务说明


数据以 | 分割后,每个数据的含义(仅展示项目里用到的字段数据)
在这里插入图片描述
业务字段处理逻辑

HttpAppHost hah=new HttpAppHost();
hah.setReportTime(reportTime);
//上网小区的id
hah.setCellid(data[16]);
//应用类
hah.setAppType(Integer.parseInt(data[22]));
//应用子类
hah.setAppSubtype(Integer.parseInt(data[23]));
//用户ip
hah.setUserIP(data[26]);
//用户port
hah.setUserPort(Integer.parseInt(data[28]));
//访问的服务ip
hah.setAppServerIP(data[30]);
//访问的服务port
hah.setAppServerPort(Integer.parseInt(data[32]));
//域名
hah.setHost(data[58]);
 
int appTypeCode=Integer.parseInt(data[18]);
String transStatus=data[54];
int appTypeCode=Integer.parseInt(data[18]);
String transStatus=data[54];
 
//业务逻辑处理
if(hah.getCellid()==null||hah.getCellid().equals("")){
   
hah.setCellid("000000000");
}
if(appTypeCode==103){
   
hah.setAttempts(1);
}
if(appTypeCode==103&&"10,11,12,13,14,15,32,33,34,35,36,37,38,48,49,50,51,52,53,54,55,199,200,201,202,203,204,205,206,302,304,306".contains(transStatus)){
   
hah.setAccepts(1);
}else{
   
hah.setAccepts(0);
}
if(appTypeCode == 103){
   
hah.setTrafficUL(Long.parseLong(data[33]));
}
if(appTypeCode == 103){
   
hah.setTrafficDL(Long.parseLong(data[34]));
}
if(appTypeCode == 103){
   
hah.setRetranUL(Long.parseLong(data[39]));
}
if(appTypeCode == 103){
   
hah.setRetranDL(Long.parseLong(data[40]));
}
if(appTypeCode==103){
   
hah.setTransDelay(Long.parseLong(data[20]) - Long.parseLong(data[19]));
}
CharSequence key=hah.getReportTime() + "|" + hah.getAppType() + "|" + hah.getAppSubtype() + "|" + hah.getUserIP() + "|" + hah.getUserPort() + "|" + hah.getAppServerIP() + "|" + hah.getAppServerPort() +"|" + hah.getHost() + "|" + hah.getCellid();
if(map.containsKey(key)){
   
HttpAppHost mapHah=map.get(key);
mapHah.setAccepts(mapHah.getAccepts()+hah.getAccepts());
mapHah.setAttempts(mapHah.getAttempts()+hah.getAttempts());
mapHah.setTrafficUL(mapHah.getTrafficUL()+hah.getTrafficUL());
mapHah.setTrafficDL(mapHah.getTrafficDL()+hah.getTrafficDL());
mapHah.setRetranUL(mapHah.getRetranUL()+hah.getRetranUL());
mapHah.setRetranDL(mapHah.getRetranDL()+hah.getRetranDL());
mapHah.setTransDelay(mapHah.getTransDelay()+hah.getTransDelay());
map.put(key, mapHah);
}else{
   
map.put(key,hah);
}

在这里插入图片描述
建表语句

create table F_HTTP_APP_HOST(
reporttime datetime,
apptype int,
appsubtype int,
userip varchar(20),
userport int,
appserverip varchar(20),
appserverport int,
host varchar(255),
cellid varchar(20),
attempts bigint,
accepts bigint
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
网约车大数据综合项目是一个集成了各种数据分析和可视化技术的项目,其中数据可视化是其中非常重要的一部分。数据可视化通过图表、地图等形式,将大量的数据信息以直观、易懂的方式展现出来,帮助项目团队和决策者更好地理解和利用数据。 Flask是一款轻量级的Python Web框架,ECharts是一个由百度开发的基于JavaScript的数据可视化库,它们可以很好地配合使用来实现数据可视化的需求。在网约车大数据综合项目中,我们可以利用Flask框架搭建Web应用程序的后端,通过Python语言处理数据,并结合ECharts库来实现前端数据可视化的功能。 具体来说,我们可以使用Flask来构建Web应用的后台服务器,接收用户的请求,并调用相应的数据处理函数。同时,利用ECharts库提供的丰富图表类型和交互功能,将经过处理的数据转换成直观的图表展示,例如折线图、柱状图、地图等。这样,用户就可以通过浏览器访问我们的Web应用,实时查看和分析网约车的相关数据,包括订单量、车辆分布、用户乘车轨迹等内容。 通过数据可视化flask echarts,我们不仅可以帮助项目团队更好地理解和利用网约车的大数据信息,还可以为决策者提供直观、准确的数据支持,帮助他们制定更科学合理的运营策略和规划。这将有助于提升网约车行业的整体运营效率和用户体验,进而推动行业的可持续发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值