日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MapReduce实现手机上网日志分析(分区) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、問(wèn)題背景

  實(shí)際業(yè)務(wù)的需要,比如以移動(dòng)為例,河南的用戶去了北京上網(wǎng),那么他的上網(wǎng)信息默認(rèn)保存在了北京的基站,那么我們想要查詢北京地區(qū)的上網(wǎng)日志信息默認(rèn)也包含了其他地區(qū)用戶的在本區(qū)的上網(wǎng)信息,否則只能掃描日志找到北京,很慢,所以分區(qū)很需要。

二、數(shù)據(jù)集分析

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 視頻網(wǎng)站 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 站點(diǎn)統(tǒng)計(jì) 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 站點(diǎn)統(tǒng)計(jì) 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 

  查看電話號(hào)碼一列,看前三位分為移動(dòng)、聯(lián)通和電信,不過(guò)還有以84開頭的同意歸屬為海外,那么我們需要的共有4個(gè)reducer,那么需要Partitioner里面需要自己分為四類。

  一個(gè)reducer對(duì)應(yīng)一個(gè)結(jié)果文件。

  不能再本地運(yùn)行,這樣的話只能一個(gè)map,一個(gè)reducer,無(wú)論設(shè)置。

三、理論準(zhǔn)備

3.1 抽象類與接口

?  我們都知道在面向?qū)ο蟮念I(lǐng)域一切都是對(duì)象,同時(shí)所有的對(duì)象都是通過(guò)類來(lái)描述的,但是并不是所有的類都是來(lái)描述對(duì)象的。如果一個(gè)類沒有足夠的信息來(lái)描述一個(gè)具體的對(duì)象,而需要其他具體的類來(lái)支撐它,那么這樣的類我們稱它為抽象類。比如new Animal(),我們都知道這個(gè)是產(chǎn)生一個(gè)動(dòng)物Animal對(duì)象,但是這個(gè)Animal具體長(zhǎng)成什么樣子我們并不知道,它沒有一個(gè)具體動(dòng)物的概念,所以他就是一個(gè)抽象類,需要一個(gè)具體的動(dòng)物,如狗、貓來(lái)對(duì)它進(jìn)行特定的描述,我們才知道它長(zhǎng)成啥樣。

  抽象類和普通類的區(qū)別是強(qiáng)制讓子類去重寫弗雷的方法。

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: 貓叫:喵喵... 狗叫:汪汪... 其實(shí)抽象類就是一個(gè)規(guī)范,譬如打印機(jī)肯定有打印功能,但是具體打印彩色還是黑白就由具體的打印機(jī)去實(shí)現(xiàn),強(qiáng)制其他打印機(jī)實(shí)現(xiàn)發(fā)音方法,但是普通類并沒有這樣的要求,可能出錯(cuò)。

  抽象層次不同。抽象類是對(duì)類抽象,而接口是對(duì)行為的抽象。抽象類是對(duì)整個(gè)類整體進(jìn)行抽象,包括屬性、行為,但是接口卻是對(duì)類局部(行為)進(jìn)行抽象。

? ? ?抽象類所跨域的是具有相似特點(diǎn)的類,而接口卻可以跨域不同的類。我們知道抽象類是從子類中發(fā)現(xiàn)公共部分,然后泛化成抽象類,子類繼承該父類即可,但是接口不同。實(shí)現(xiàn)它的子類可以不存在任何關(guān)系,共同之處。例如貓、狗可以抽象成一個(gè)動(dòng)物類抽象類,具備叫的方法。鳥、飛機(jī)可以實(shí)現(xiàn)飛Fly接口,具備飛的行為,這里我們總不能將鳥、飛機(jī)共用一個(gè)父類吧!所以說(shuō)抽象類所體現(xiàn)的是一種繼承關(guān)系,要想使得繼承關(guān)系合理,父類和派生類之間必須存在"is-a" 關(guān)系,即父類和派生類在概念本質(zhì)上應(yīng)該是相同的。對(duì)于接口則不然,并不要求接口的實(shí)現(xiàn)者和接口定義在概念本質(zhì)上是一致的, 僅僅是實(shí)現(xiàn)了接口定義的契約而已。

java本身不支持多繼承,通過(guò)實(shí)現(xiàn)多個(gè)接口來(lái)達(dá)到多繼承的目的。

3.2 static塊與單例

  static塊會(huì)在實(shí)例初始化之前執(zhí)行,所以你可以在方法調(diào)用之前進(jìn)行一些初始化操作,

  單例是獲取對(duì)象的一種方式而已,保證只有一個(gè)實(shí)現(xiàn)類,

  實(shí)際開發(fā)中幾乎用不到,單例spring提供有實(shí)現(xiàn),static在測(cè)試的時(shí)候可能會(huì)用到,還有加載一些系統(tǒng)配置文件的時(shí)候可能會(huì)把加載寫在static塊中。

四、代碼實(shí)現(xiàn)

//Partitioner是map執(zhí)行完成后reduce還沒執(zhí)行,所以他的類型是map的輸出類型 public class DataCountPartitioner extends Partitioner<Text,DataBean> {//沒執(zhí)行一次變讀取一次數(shù)據(jù)庫(kù)很不好,可以做緩存,或者搞成單利,//為了簡(jiǎn)單直接搞一個(gè)static塊private static Map<String , Integer> dataCountMap = new HashMap<String , Integer>();static {//靜態(tài)的從上往下執(zhí)行,也就是先執(zhí)行上面的datacoutnMap,否則靜態(tài)塊里//網(wǎng)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表示分區(qū)號(hào)//numPartitions:幾個(gè)reducer就有幾個(gè)這個(gè)值@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等開頭的默認(rèn)是國(guó)外if(null==code) {code = 0;}return code;} }

  

五、結(jié)果分析

5.1 _SUCCESS

  這個(gè)沒啥用,mapreduce自帶的,不過(guò)如果你的程序有多部mapreduce,肯定會(huì)有中間結(jié)果,那么倒是可以這個(gè)_success來(lái)判斷是否執(zhí)行了上個(gè)步驟,也就是說(shuō)在補(bǔ)數(shù)據(jù)的時(shí)候,如果發(fā)現(xiàn)某一步_success了?那么就說(shuō)明上一步不用補(bǔ)跑mapreduce,直接執(zhí)行下面的程序.

5.2 結(jié)果

  查看結(jié)果發(fā)現(xiàn)0里面是134和841開頭的,達(dá)到預(yù)期,1和2分別是聯(lián)通,3是空的,為什么呢?因?yàn)閜artitioner里面的分類設(shè)置類3個(gè),而reducer個(gè)數(shù)是4個(gè),其中一個(gè)reducer沒有數(shù)據(jù)粉發(fā)過(guò)去所以就是空的。

  那如果reducer個(gè)數(shù)小于partitioner個(gè)數(shù)呢,我發(fā)現(xiàn)輸出文件加油,也沒報(bào)錯(cuò),就是空文件夾。需要log4j才能看到報(bào)錯(cuò)信息。

?

總結(jié)

以上是生活随笔為你收集整理的MapReduce实现手机上网日志分析(分区)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。