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.pswp.cn/news/259958.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259958.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259958.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

肺功能曲線圖怎么看_如何看肺功能結果報告單

收藏進澤 2006-05-18 22:34:46常規通氣功能&#xff1a;所有的指標都要在預計值的80&#xff05;以上&#xff0c;一秒率要在70&#xff05;以上(因為低于70&#xff05;就是COPD).FVC低于80&#xff05;&#xff0c;診斷限制性通氣&#xff1b;一秒率低于70&#xff05;&#…

html 模板配置,模板文件配置

模板文件一定要小寫下劃線&#xff0c;如 list_pubu.html你可以給你每一個模板文件增加一個json配置文件,用于描述這個模板文件;配置文件和模板文件名是同名的,只是后綴為 json,如simpleboot3/portal/index.html模板文件的配置文件就是simpleboot3/portal/index.json;一個簡單的…

POJ 3009 Curling 2.0(簡單DFS)

題意&#xff1a; 每一次碰到障礙則在障礙的旁邊停下來&#xff0c;并且障礙被擊碎。此時可以重新值擲一次冰球。當擲球次數超過 10 次則輸出 -1。 思路&#xff1a; 1. 超過 10 次輸出 -1 這個剪枝很關鍵&#xff1b; 2. 主要是要注意些邊界條件&#xff0c;初始化的情況&…

封裝 oschina.net 表情選擇

1. [代碼]jquery.facial.js //從OSCHINA.NET 提取出來的 表情選擇 插件 by zhouxiang //如果有不滿足的地方 可以自己改改 沒事隨便寫寫的 style 和 html 都被我弄到JS里了 這樣方便簡潔jQuery.fn.extend({ facial: function (opts) { var _self this, _this $…

JNI學習積累之一 ---- 常用函數大全

本文原創&#xff0c;轉載請注明出處&#xff1a;http://blog.csdn.NET/qinjuning 最近一段時間&#xff0c;在工作方面比較閑&#xff0c;分配的Bug不是很多&#xff0c;于是好好利用這段時間就著源代碼看了些許模塊&#xff0c; 主要方式 還是賊看賊看代碼&#xff0c; 同時利…

計算機專業四次評估,教育部第四次“計算機專業”學科評估,四所高校獲A+評級...

隨著2017年權威的第四次學科評估結果出爐后&#xff0c;相信很多高校學科上實力的爭議應該可以平息了。這也是國內官方的學科排名&#xff0c;一共分為12等。入圍學科的最高等級為A&#xff0c;最低評級為C-&#xff0c;如果在同一評級內&#xff0c;按學校代碼先后依次排序。本…

正則領悟

入門 學習正則表達式的最好方法是從例子開始&#xff0c;理解例子之后再自己對例子進行修改&#xff0c;實驗。下面給出了不少簡單的例子&#xff0c;并對它們作了詳細的說明。 假設你在一篇英文小說里查找hi&#xff0c;你可以使用正則表達式hi。 這幾乎是最簡單的正則表達式了…

微軟風格的CSS橫向菜單

<head> <meta http-equiv"Content-Type" content"text/html; charsetgb2312" /> <title>水平導航菜單&#xff08;DIVCSS&#xff09;</title> <style type"text/css"> body{ background: #FFF; font-family: Ari…

php函數庫快速記憶法_PHP速成大法

簡單介紹一下PHP的語法1、嵌入方法&#xff1a;類似ASP的&#xff0c;當然您也可以自己指定。2、引用文件&#xff1a;引用文件的方法有兩種&#xff1a;require 及 include。require 的使用方法如 require("MyRequireFile.php"); 。這個函數通常放在 PHP 程序的最前…

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…

計算幾何/sgu 124 Broken line

題意 給出由n條線段圍成的多邊形&#xff08;每條邊均平行于坐標軸&#xff09;&#xff0c;以及一個點(x0,y0)&#xff0c;問這個點是在形內或是形外或是形上 分析 對于在線段上&#xff0c;比較容易判斷&#xff0c;直接比較一下坐標的位置即可&#xff1b; 若不在形上&#…

(轉)在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;大家可以找其他圖片來練習。有些時候想…

計算機運維知識點,系統運維必會知識點

1 刪除文件的原理文件刪除&#xff1a;需要具備以下兩個條件同時具備才生效1受文件的硬連接控制&#xff0c;有一個硬連接i_link1,減少一個硬連接&#xff0c;i_link-1,當i_link0時&#xff0c;文件就被刪了列&#xff1a;創建文件i_link1,為這個文件創建一個硬連接&#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…

【總有一些東西要弄清】——說說面試時一系列的CSS問題

僅以此篇緬懷那些筆試100次&#xff0c;問100次的CSS問題。 問&#xff1a; CSS選擇符有哪些&#xff1f;哪些屬性可以繼承&#xff1f;優先級&#xff1f;內聯和important哪個優先級高&#xff1f; 選擇符 1通配選擇符&#xff08;*&#xff09;表示頁面內所有元素的樣式*{fon…

面試總結之html+css

最近面試了一些公司&#xff0c;和技術總監聊了一些前端技術方面的內容。回來之后我總結了一下&#xff0c;大致可以分為三個模塊&#xff1a;第一、Html與css 方面&#xff1b;第二、瀏覽器解析方面&#xff1b;第三、js方面。打算&#xff0c;分為三篇博文&#xff0c;根據自…

k8s部署tomcat及web應用_k8s部署tomcat的yaml文件

1、k8s部署tomcat的yaml文件apiVersion: apps/v1kind: Deploymentmetadata:name: mytomcatspec:replicas: 5selector:matchLabels:app: mytomcatminReadySeconds: 1progressDeadlineSeconds: 60revisionHistoryLimit: 5strategy:type: RollingUpdaterollingUpdate:maxSurge: 1m…

計算機的發展經歷階段應用領域,計算機的發展階段

計算機的發展階段以下文字資料是由(歷史新知網www.lishixinzhi.com)小編為大家搜集整理后發布的內容&#xff0c;讓我們趕快一起來看一下吧&#xff01;計算機經歷了四個發展階段。1、電子管數字機(1946—1958年)硬件方面&#xff0c;邏輯元件采用的是真空電子管&#xff0c;外…