亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2273 | 回復: 0
打印 上一主題 下一主題

[Hadoop&HBase] 利用hadoop的mapreduce做用戶來源統(tǒng)計 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-12-23 02:32 |只看該作者 |倒序瀏覽
假設一個這樣的應用場景:需要對一個大日志文件(這個文件有100G或1T大)做用戶來源的統(tǒng)計,需要<br>得到的結果是:廣東省&nbsp;xxx;北京xxx……&nbsp;或&nbsp;電信&nbsp;xxxx&nbsp;;聯(lián)通&nbsp;xxxx。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;主要的工作步驟很簡單:獲取到用戶的IP,解析到用戶IP的地址,然后做地址的統(tǒng)計。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;現(xiàn)在我們用hadoop來簡單實現(xiàn)),在實現(xiàn)過程中,對ip來源地址的解析我現(xiàn)在偷懶只是簡單使用了web調用接口,而不使用程序client調用接口和解析純真庫。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定義Map方法(日志格式為:User_IP|date|URI……):<br><a href="http://blog.chinaunix.net/attachment/201110/27/22270773_1319685789JFTj.jpg" target="_blank" target="_blank"><img src="http://blog.chinaunix.net/attachment/201110/27/22270773_1319685789JFTj.jpg" .load="imgResize(this, 650);" ;="" border="0"></a><br>主要流程為:獲取到每行的第一個字段,使用whois對這個ip進行解析,然后,將來源地址和來源地址的數(shù)量做一個key-value。<br><br>Reduce:<br>&nbsp; <a href="http://blog.chinaunix.net/attachment/201110/27/22270773_1319685826K5l5.jpg" target="_blank" target="_blank"><img src="http://blog.chinaunix.net/attachment/201110/27/22270773_1319685826K5l5.jpg" .load="imgResize(this, 650);" ;="" border="0"></a><br>這個就更簡單了;對每個key-value對做相加的操作。<br><br>主體程序:<br><a href="http://blog.chinaunix.net/attachment/201110/27/22270773_13196858602wuY.jpg" target="_blank" target="_blank"><img src="http://blog.chinaunix.net/attachment/201110/27/22270773_13196858602wuY.jpg" .load="imgResize(this, 650);" ;="" border="0"></a><br>在這里感嘆一句:以前寫個分布式并行運行可麻煩一點,現(xiàn)在很多的一些調度框架使用起來做<br>這方面的事情方便很多)<br><br><br>[hadoop@hadoop-237-13 bin]$ hadoop fs -cat /test/userplace/gzoutput/part-00000<br>
廣東省廣州市 電信&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3<br>
廣東省汕尾市 電信 &nbsp; &nbsp;&nbsp;&nbsp; 1<br>
江蘇省蘇州市 電信 &nbsp; &nbsp;&nbsp;&nbsp; 1<br>
福建省泉州市 電信&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br><br><br><br>在這里引申一個問題,hadoop中使用第三方包的方法:<br>1.將第三方jar包放在集群中每個節(jié)點$HADOOP_HOME/lib目錄下或者JDK的ext目錄下,其中<br>$HAOOP_HOME為Hadoop的根目錄。善于偷懶所以我也采用這種了,因為我做的一些運算使用<br>的包還是比較固定,在裝hadoop的時候打包進去就行。<br><br>2.將所有的jar包解壓縮,然后把他和源程序的類文件打包到一個jar包中。<br><br>3.使用DistributeCache&nbsp;&nbsp;<a target="_blank" href="http://blog.csdn.net/amuseme_lu/article/details/6706110">http://blog.csdn.net/amuseme_lu/article/details/6706110</a><br><br>&nbsp;&nbsp;對DistribueCache的使用是抄網(wǎng)上的<br>&nbsp;&nbsp;a.&nbsp;配置應用程序的cache,把需要使用的文件上傳到DFS中去&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$&nbsp;bin/hadoop&nbsp;fs&nbsp;-copyFromLocal&nbsp;lookup.dat&nbsp;/myapp/lookup.dat&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$&nbsp;bin/hadoop&nbsp;fs&nbsp;-copyFromLocal&nbsp;map.zip&nbsp;/myapp/map.zip&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$&nbsp;bin/hadoop&nbsp;fs&nbsp;-copyFromLocal&nbsp;mylib.jar&nbsp;/myapp/mylib.jar&nbsp;<br>$&nbsp;bin/hadoop&nbsp;fs&nbsp;-copyFromLocal&nbsp;mytar.tar&nbsp;/myapp/mytar.tar<br>$&nbsp;bin/hadoop&nbsp;fs&nbsp;-copyFromLocal&nbsp;mytgz.tgz&nbsp;/myapp/mytgz.tgz&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;$&nbsp;bin/hadoop&nbsp;fs&nbsp;-copyFromLocal&nbsp;mytargz.tar.gz&nbsp;/myapp/mytargz.tar.gz&nbsp;&nbsp;<br><br><br>&nbsp;&nbsp;b.&nbsp;配置JobConf<br>&nbsp;&nbsp;&nbsp;JobConf&nbsp;job&nbsp;=&nbsp;new&nbsp;JobConf();&nbsp;&nbsp;<br>&nbsp;&nbsp;DistributedCache.addCacheFile(new&nbsp;URI("/myapp/lookup.dat#lookup.dat"),job);&nbsp;//&nbsp;這里的lookup.dat加了一個符號連接<br>&nbsp;&nbsp;DistributedCache.addCacheArchive(new&nbsp;URI("/myapp/map.zip",&nbsp;job);&nbsp;<br>&nbsp;&nbsp;DistributedCache.addFileToClassPath(new&nbsp;Path("/myapp/mylib.jar"),&nbsp;job);&nbsp;//&nbsp;這里是把相應的jar包加到Task的啟動路徑上去<br>&nbsp;&nbsp;DistributedCache.addCacheArchive(new&nbsp;URI("/myapp/map.zip",&nbsp;job);&nbsp;<br>&nbsp;&nbsp;DistributedCache.addFileToClassPath(new&nbsp;Path("/myapp/mylib.jar"),&nbsp;job);&nbsp;//&nbsp;這里是把相應的jar包加到Task的啟動路徑上去<br>&nbsp;&nbsp;Distri<br>butedCache.addCacheArchive(new&nbsp;URI("/myapp/mytar.tar",&nbsp;job);&nbsp;<br>&nbsp;&nbsp;DistributedCache.addCacheArchive(new&nbsp;URI("/myapp/mytargz.tar.gz",&nbsp;job)<br><br><br><br><br>c.&nbsp;在Mapper或者Reducer任務中使用這些文件<br>&nbsp;&nbsp;&nbsp;&nbsp;<ul class="wysiwygUl1"><li class="wysiwygLi">public&nbsp;static&nbsp;class&nbsp;MapClass&nbsp;extends&nbsp;MapReduceBase&nbsp;&nbsp;&nbsp;&nbsp;</li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;implements&nbsp;Mapper&lt;K,&nbsp;V,&nbsp;K,&nbsp;V&gt;&nbsp;{&nbsp;&nbsp;</li><li class="wysiwygLi"><br></li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Path[]&nbsp;localArchives;&nbsp;&nbsp;</li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Path[]&nbsp;localFiles;&nbsp;&nbsp;</li><li class="wysiwygLi"><br></li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;configure(JobConf&nbsp;job)&nbsp;{&nbsp;&nbsp;</li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Get&nbsp;the&nbsp;cached&nbsp;archives/files&nbsp;&nbsp;</li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localArchives&nbsp;=&nbsp;DistributedCache.getLocalCacheArchives(job);&nbsp;&nbsp;//&nbsp;得到本地打包的文件,一般是數(shù)據(jù)文件,如字典文件&nbsp;&nbsp;</li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localFiles&nbsp;=&nbsp;DistributedCache.getLocalCacheFiles(job);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;得到本地緩沖的文件,一般是配置文件等&nbsp;&nbsp;</li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li class="wysiwygLi"><br></li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;map(K&nbsp;key,&nbsp;V&nbsp;value,&nbsp;&nbsp;&nbsp;</li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputCollector&lt;K,&nbsp;V&gt;&nbsp;output,&nbsp;Reporter&nbsp;reporter)&nbsp;&nbsp;&nbsp;</li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;IOException&nbsp;{&nbsp;&nbsp;</li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Use&nbsp;data&nbsp;from&nbsp;the&nbsp;cached&nbsp;archives/files&nbsp;here&nbsp;&nbsp;</li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;...&nbsp;&nbsp;</li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;...&nbsp;&nbsp;</li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.collect(k,&nbsp;v);&nbsp;&nbsp;</li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br></li><li class="wysiwygLi">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <br></li></ul><br>
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP