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

本文介绍了电信日志项目zebra,通过分析日志数据,统计App下载热度、用户使用时长和流量消耗等信息。zebra利用maven、avro和zookeeper进行分布式处理,涉及HttpAppHost对象字段计算规则,以及数据清洗、存储和业务逻辑处理。项目包括jobtracker和engine_LV1等组件,实现了日志数据的累加和归并。
摘要由CSDN通过智能技术生成

一、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
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值