MapReduce实现手机上网日志分析(分区)

一、问题背景

  实际业务的需要,比如以移动为例,河南的用户去了北京上网,那么他的上网信息默认保存在了北京的基站,那么我们想要查询北京地区的上网日志信息默认也包含了其他地区用户的在本区的上网信息,否则只能扫描日志找到北京,很慢,所以分区很需要。

二、数据集分析

1363157985066 	13726230503	00-FD-07-A4-72-B8:CMCC	120.196.100.82	i02.c.aliimg.com		24	27	2481	24681	200
1363157995052 	13826544101	5C-0E-8B-C7-F1-E0:CMCC	120.197.40.4			4	0	264	0	200
1363157991076 	13926435656	20-10-7A-28-CC-0A:CMCC	120.196.100.99			2	4	132	1512	200
1363154400022 	13926251106	5C-0E-8B-8B-B1-50:CMCC	120.197.40.4			4	0	240	0	200
1363157993044 	18211575961	94-71-AC-CD-E6-18:CMCC-EASY	120.196.100.99	iface.qiyi.com	视频网站	15	12	1527	2106	200
1363157995074 	84138413	5C-0E-8B-8C-E8-20:7DaysInn	120.197.40.4	122.72.52.12		20	16	4116	1432	200
1363157993055 	13560439658	C4-17-FE-BA-DE-D9:CMCC	120.196.100.99			18	15	1116	954	200
1363157995033 	15920133257	5C-0E-8B-C7-BA-20:CMCC	120.197.40.4	sug.so.360.cn	信息安全	20	20	3156	2936	200
1363157983019	13719199419	68-A1-B7-03-07-B1:CMCC-EASY	120.196.100.82			4	0	240	0	200
1363157984041 	13660577991	5C-0E-8B-92-5C-20:CMCC-EASY	120.197.40.4	s19.cnzz.com	站点统计	24	9	6960	690	200
1363157973098 	15013685858	5C-0E-8B-C7-F7-90:CMCC	120.197.40.4	rank.ie.sogou.com	搜索引擎	28	27	3659	3538	200
1363157986029 	15989002119	E8-99-C4-4E-93-E0:CMCC-EASY	120.196.100.99	www.umeng.com	站点统计	3	3	1938	180	200
1363157992093 	13560439658	C4-17-FE-BA-DE-D9:CMCC	120.196.100.99			15	9	918	4938	200
1363157986041 	13480253104	5C-0E-8B-C7-FC-80:CMCC-EASY	120.197.40.4			3	3	180	180	200
1363157984040 	13602846565	5C-0E-8B-8B-B6-00:CMCC	120.197.40.4	2052.flash2-http.qq.com	综合门户	15	12	1938	2910	200
1363157995093 	13922314466	00-FD-07-A2-EC-BA:CMCC	120.196.100.82	img.qfc.cn		12	12	3008	3720	200
1363157982040 	13502468823	5C-0A-5B-6A-0B-D4:CMCC-EASY	120.196.100.99	y0.ifengimg.com	综合门户	57	102	7335	110349	200
1363157986072 	18320173382	84-25-DB-4F-10-1A:CMCC-EASY	120.196.100.99	input.shouji.sogou.com	搜索引擎	21	18	9531	2412	200
1363157990043 	13925057413	00-1F-64-E1-E6-9A:CMCC	120.196.100.55	t3.baidu.com	搜索引擎	69	63	11058	48243	200
1363157988072 	13760778710	00-FD-07-A4-7B-08:CMCC	120.196.100.82			2	2	120	120	200
1363157985066 	13726238888	00-FD-07-A4-72-B8:CMCC	120.196.100.82	i02.c.aliimg.com		24	27	2481	24681	200
1363157993055 	13560436666	C4-17-FE-BA-DE-D9:CMCC	120.196.100.99			18	15	1116	954	200 

  查看电话号码一列,看前三位分为移动、联通和电信,不过还有以84开头的同意归属为海外,那么我们需要的共有4个reducer,那么需要Partitioner里面需要自己分为四类。

  一个reducer对应一个结果文件。

  不能再本地运行,这样的话只能一个map,一个reducer,无论设置。

三、理论准备

3.1 抽象类与接口

   我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的。如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。比如new Animal(),我们都知道这个是产生一个动物Animal对象,但是这个Animal具体长成什么样子我们并不知道,它没有一个具体动物的概念,所以他就是一个抽象类,需要一个具体的动物,如狗、猫来对它进行特定的描述,我们才知道它长成啥样。

  抽象类和普通类的区别是强制让子类去重写弗雷的方法。

public abstract class Animal {  public abstract void cry();  
}  public class Cat extends Animal{  @Override  public void cry() {  System.out.println("猫叫:喵喵...");  }  
}  public class Dog extends Animal{  @Override  public void cry() {  System.out.println("狗叫:汪汪...");  }  }  public class Test {  public static void main(String[] args) {  Animal a1 = new Cat();  Animal a2 = new Dog();  a1.cry();  a2.cry();  }  
}  --------------------------------------------------------------------  
Output:  
猫叫:喵喵...  
狗叫:汪汪...  
其实抽象类就是一个规范,譬如打印机肯定有打印功能,但是具体打印彩色还是黑白就由具体的打印机去实现,强制其他打印机实现发音方法,但是普通类并没有这样的要求,可能出错。

  抽象层次不同。抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

     抽象类所跨域的是具有相似特点的类,而接口却可以跨域不同的类。我们知道抽象类是从子类中发现公共部分,然后泛化成抽象类,子类继承该父类即可,但是接口不同。实现它的子类可以不存在任何关系,共同之处。例如猫、狗可以抽象成一个动物类抽象类,具备叫的方法。鸟、飞机可以实现飞Fly接口,具备飞的行为,这里我们总不能将鸟、飞机共用一个父类吧!所以说抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a" 关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的, 仅仅是实现了接口定义的契约而已。

java本身不支持多继承,通过实现多个接口来达到多继承的目的。

3.2 static块与单例

  static块会在实例初始化之前执行,所以你可以在方法调用之前进行一些初始化操作,

  单例是获取对象的一种方式而已,保证只有一个实现类,

  实际开发中几乎用不到,单例spring提供有实现,static在测试的时候可能会用到,还有加载一些系统配置文件的时候可能会把加载写在static块中。

四、代码实现

//Partitioner是map执行完成后reduce还没执行,所以他的类型是map的输出类型
public class DataCountPartitioner extends Partitioner<Text,DataBean> {//没执行一次变读取一次数据库很不好,可以做缓存,或者搞成单利,//为了简单直接搞一个static块private static Map<String , Integer> dataCountMap = new HashMap<String , Integer>();static {//静态的从上往下执行,也就是先执行上面的datacoutnMap,否则静态块里//网datacountmap里棉放东西dataCountMap.put("135",1);dataCountMap.put("136",1);dataCountMap.put("137",1);dataCountMap.put("138",1);dataCountMap.put("139",1);dataCountMap.put("150",2);dataCountMap.put("159",2);dataCountMap.put("182",2);dataCountMap.put("183",2);}//int表示分区号//numPartitions:几个reducer就有几个这个值@Overridepublic int getPartition(Text key, DataBean value, int numPartitions) {// TODO Auto-generated method stubString telNo = key.toString();//从0开始取3位String subTelNo = telNo.substring(0, 3);Integer code = dataCountMap.get(subTelNo);//186 843等开头的默认是国外if(null==code) {code = 0;}return code;}
}

  

五、结果分析

5.1 _SUCCESS

  这个没啥用,mapreduce自带的,不过如果你的程序有多部mapreduce,肯定会有中间结果,那么倒是可以这个_success来判断是否执行了上个步骤,也就是说在补数据的时候,如果发现某一步_success了 那么就说明上一步不用补跑mapreduce,直接执行下面的程序.

5.2 结果

  查看结果发现0里面是134和841开头的,达到预期,1和2分别是联通,3是空的,为什么呢?因为partitioner里面的分类设置类3个,而reducer个数是4个,其中一个reducer没有数据粉发过去所以就是空的。

  那如果reducer个数小于partitioner个数呢,我发现输出文件加油,也没报错,就是空文件夹。需要log4j才能看到报错信息。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机专业四次评估,教育部第四次“计算机专业”学科评估,四所高校获A+评级...

随着2017年权威的第四次学科评估结果出炉后&#xff0c;相信很多高校学科上实力的争议应该可以平息了。这也是国内官方的学科排名&#xff0c;一共分为12等。入围学科的最高等级为A&#xff0c;最低评级为C-&#xff0c;如果在同一评级内&#xff0c;按学校代码先后依次排序。本…

正则领悟

入门 学习正则表达式的最好方法是从例子开始&#xff0c;理解例子之后再自己对例子进行修改&#xff0c;实验。下面给出了不少简单的例子&#xff0c;并对它们作了详细的说明。 假设你在一篇英文小说里查找hi&#xff0c;你可以使用正则表达式hi。 这几乎是最简单的正则表达式了…

html css精灵,谈谈CSS Sprites(css精灵)

CSS Sprites在国内很多人叫css精灵&#xff0c;其实这个技术不新鲜&#xff0c;这个技术老到什么程度呢&#xff0c;我不敢确定&#xff0c;但是我看到最早的关于CSS Sprites是在Dave Shea的《CSS Sprites: Image Slicing’s Kiss of Death》&#xff0c;时间是March 05, 2004 …

分布式搜索 Elasticsearch —— 节点实例化

为什么80%的码农都做不了架构师&#xff1f;>>> 要连接到集群&#xff0c;首先要告诉集群&#xff1a;你是谁&#xff0c;你有什么特征。在 ES 中体现为实例化节点。 ES 通过 org.elasticsearch.node.NodeBuilder 的 build() 或者 node() 方法实例化节点&#xff0…

(转)在ios android设备上使用 Protobuf (使用dll方式)

自&#xff1a;http://game.ceeger.com/forum/read.php?tid13479 如果你的工程可以以.Net 2.0 subset模式运行&#xff0c;请看这个帖子中的方法。 地址&#xff1a;http://game.ceeger.com/forum/read.php?tid14359&fid27 如果只能以.Net 2.0下运行&#xff0c;就可以继…

ps 毛发 边缘_Adobe Photoshop抠图技巧/抠图后头发边缘的颜色处理方法教程!

PS教学第1&#xff11;期抠图技巧和抠图后的头发边缘的颜色处理的解释本篇抠图技巧教程除了跟大家分享了抠头发的方法外&#xff0c;还分享如何解决抠头发后头发周围的异色&#xff0c;如白边紫边等问题。教程作者没有提供素材&#xff0c;大家可以找其他图片来练习。有些时候想…

Hyper-v 2016 VHD Set

Hyper-v 2016 VHD Set微软在Windows Server 2016 Hyper-v中新增了一种磁盘类型--“VHD集”&#xff0c;和以前版本的共享VHD类似&#xff0c;这种类型的磁盘能够在多个服务器之间共享来实现来宾群集。看到这里相信有很多熟悉Hyper-v的朋友会问&#xff1a;这和以前的 Share VHD…

面试总结之html+css

最近面试了一些公司&#xff0c;和技术总监聊了一些前端技术方面的内容。回来之后我总结了一下&#xff0c;大致可以分为三个模块&#xff1a;第一、Html与css 方面&#xff1b;第二、浏览器解析方面&#xff1b;第三、js方面。打算&#xff0c;分为三篇博文&#xff0c;根据自…

计算机的发展经历阶段应用领域,计算机的发展阶段

计算机的发展阶段以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;计算机经历了四个发展阶段。1、电子管数字机(1946—1958年)硬件方面&#xff0c;逻辑元件采用的是真空电子管&#xff0c;外…

全球都对HTTPS抛出了橄榄枝,为什么?你又该怎么办?

2019独角兽企业重金招聘Python工程师标准>>> 互联网发展20多年&#xff0c;大家都习惯了在浏览器地址里输入HTTP格式的网址。但前两年&#xff0c;HTTPS逐渐取代HTTP&#xff0c;成为传输协议界的“新宠”。 早在2014年&#xff0c;由网际网路安全研究组织Internet …

大一大学计算机考试难吗,新生必看!大一期间必考的3个证书,不考后悔,越拖越难考!...

原标题&#xff1a;新生必看!大一期间必考的3个证书&#xff0c;不考后悔&#xff0c;越拖越难考!9月开学季&#xff0c;大学新生也陆陆续续来到了学校报到&#xff0c;开启自己美好的大学生活!但是!小编要提醒大家的是千万不要相信高中老师说的那句&#xff1a;“上了大学你们…

我是如何实用:before :after

本文地址http://www.cnblogs.com/Bond/p/3972854.html 最近一直做移动端&#xff0c;没和IE6打交道了&#xff0c;瞬间感觉世界变美好了。移动端虽然还是各种坑&#xff0c;但是比起修复IE6那还是轻松多了&#xff0c;移动端很多效果可以用CSS3来做&#xff0c;感觉一切都和谐…

lua 从一串数字中取出偶数位的数字_为什么JavaScript中 0.1 0.2 不等于0.3?

在 js 中进行数学的运算时&#xff0c;会出现0.10.20.300000000000000004的结果&#xff0c;一开始认为是浮点数的二进制存储导致的精度问题&#xff0c;但这似乎不能很好的解释为什么在同样的存储方式下0.30.40.7可以得到正确的结果。本文主要通过浮点数的二进制存储及运算&am…

zookeeper启动后没有相关进程

查看状态报错&#xff0c;报错&#xff0c;百度硕士nc问题&#xff0c;让看.out文件&#xff0c;但是这哥文件是空的&#xff0c;那就看log 016-12-15 14:08:19,355 [myid:] - INFO [main:QuorumPeer$QuorumServer149] - Resolved hostname: StandByNameNode to address: Stan…

计算机发展与应用,网络计算机的发展与应用

网络计算机(Network Computer)&#xff0c;简称NC&#xff0c;是专用于高速网络环境下的一种计算机终端设备。它一般不需要硬盘、软驱及光驱等外部存储器&#xff0c;而是通过网络获取大部分资源&#xff0c;其所需要的应用程序和数据都存储在服务器上。NC与PC的比较随着网络技…

ASP.NET 缓存技术分析

缓存功能是大型网站设计一个很重要的部分。由数据库驱动的Web应用程序&#xff0c;如果需要改善其性能&#xff0c;最好的方法是使用缓存功能。可能的情况下尽量使用缓 存&#xff0c;从内存中返回数据的速度始终比去数据库查的速度快&#xff0c;因而可以大大提供应用程序的性…

分布式搜索 Elasticsearch —— 删除索引

为什么80%的码农都做不了架构师&#xff1f;>>> 删除索引的方式很多&#xff0c;这里列举三种。 指定 index 、type、id 执行删除 package com.gsoft.gsearch.util;import org.elasticsearch.action.get.GetResponse; import org.junit.Test;import com.gsoft.gsea…

计算机云客户端,蓝奏云网盘客户端 0.3.7电脑版

蓝奏云由于不限速、下载速度快被很多用户所欢迎&#xff0c;不过蓝奏云没有客户端&#xff0c;上传下载有时也不太方便,这里有大神写了蓝奏云网盘客户端&#xff0c;采用蓝奏云API项目使用PyQt5实现图形界面&#xff0c;蓝奏云盘API项目实现了对蓝奏网盘的基本操作: 登录、列出…

三十分钟学会SED

本文承接之前写的三十分钟学会AWK一文&#xff0c;在学习完AWK之后&#xff0c;趁热打铁又学习了一下SED&#xff0c;不得不说这两个工具真的堪称文本处理神器&#xff0c;谁用谁知道&#xff01;本文大部分内容依旧是翻译自Tutorialspoint上的入门教程&#xff0c;这次是 Sed …

计算机学院年会,重庆大学计算机学院举行2019年迎新晚会

2019年12月6号晚&#xff0c;重庆大学计算机学院2019年迎新晚会在兰园小剧场举行。出席本次晚会的嘉宾有计算机学院党委副书记兼纪委书记郭坤银、党委组织员刘霜、2016级辅导员李若菡老师、2017级辅导员古曦老师、2018级辅导员郑田青老师、2019级辅导员谢璧如老师。本次晚会的主…