久久亚洲视频-成人av免费在线-亚洲免费大片-www.国产精品.com-又黄又爽又色的视频-精品乱子伦一区二区-无码人妻精品一区二区三区66-欧美一级做-国产在线国偷精品免费看-欧美性极品少妇-精品无码久久久久久久久久

樂思軟件

海量大數(shù)據(jù)處理——從十億詞找出頻率最高10個(gè)

 

大數(shù)據(jù)處理,數(shù)據(jù),大數(shù)據(jù)

  1. 問題描述

  在海量大數(shù)據(jù)處理中,經(jīng)常會(huì)遇到這些問題,就是在海量的大數(shù)據(jù)當(dāng)中找出出現(xiàn)頻率最高的前K個(gè)數(shù),或者從海量數(shù)據(jù)中找出最大的前K個(gè)數(shù),這類問題通常稱為“top K”問題,如:在搜索引擎中,統(tǒng)計(jì)搜索最熱門的10個(gè)查詢詞;在歌曲庫中統(tǒng)計(jì)下載率最高的前10首歌等等。

  2. 當(dāng)前解決方案

  針對top k類問題,通常比較好的方案是【分治+trie樹/hash+小頂堆】,即先將數(shù)據(jù)集按照hash方法分解成多個(gè)小數(shù)據(jù)集,然后使用trie樹或者 hash統(tǒng)計(jì)每個(gè)小數(shù)據(jù)集中的query詞頻,之后用小頂堆求出每個(gè)數(shù)據(jù)集中出頻率最高的前K個(gè)數(shù),最后在所有top K中求出最終的top K。

  實(shí)際上,最優(yōu)的解決方案應(yīng)該是最符合實(shí)際設(shè)計(jì)需求的方案,在實(shí)際應(yīng)用中,可能有足夠大的內(nèi)存,那么直接將數(shù)據(jù)扔到內(nèi)存中一次性處理即可,也可能機(jī)器有多個(gè)核,這樣可以采用多線程數(shù)據(jù)處理整個(gè)數(shù)據(jù)集。

  本文針對不同的應(yīng)用場景,介紹了適合相應(yīng)應(yīng)用場景的解決方案。

  3. 解決方案

  3.1 單機(jī)+單核+足夠大內(nèi)存

  設(shè)每個(gè)查詢詞平均占8Byte,則10億個(gè)查詢詞所需的內(nèi)存大約是10^9*8=8G內(nèi)存。如果你有這么大的內(nèi)存,直接在內(nèi)存中對查詢詞進(jìn)行排序,順序遍歷找出10個(gè)出現(xiàn)頻率最大的10個(gè)即可。這種方法簡單快速,更加實(shí)用。當(dāng)然,也可以先用HashMap求出每個(gè)詞出現(xiàn)的頻率,然后求出出現(xiàn)頻率最大的10個(gè)詞。

  3.2 單機(jī)+多核+足夠大內(nèi)存

  這時(shí)可以直接在內(nèi)存中實(shí)用hash方法將數(shù)據(jù)劃分成n個(gè)partition,每個(gè)partition交給一個(gè)線程數(shù)據(jù)處理,線程的處理邏輯是同3.1節(jié)類似,最后一個(gè)線程將結(jié)果歸并。

  該方法存在一個(gè)瓶頸會(huì)明顯影響效率,即數(shù)據(jù)傾斜,每個(gè)線程的數(shù)據(jù)處理速度可能不同,快的線程需要等待慢的線程,最終的處理速度取決于慢的線程。解決方法是,將數(shù)據(jù)劃分成c*n個(gè)partition(c>1),每個(gè)線程數(shù)據(jù)處理完當(dāng)前partition后主動(dòng)取下一個(gè)partition繼續(xù)處理,直到所有數(shù)據(jù)處理完畢,最后由一個(gè)線程進(jìn)行歸并。

  3.3 單機(jī)+單核+受限內(nèi)存

  這種情況下,需要將原數(shù)據(jù)文件切割成一個(gè)一個(gè)小文件,如,采用hash(x)%M,將原文件中的數(shù)據(jù)切割成M小文件,如果小文件仍大于內(nèi)存大小,繼續(xù)采用hash的方法對數(shù)據(jù)文件進(jìn)行切割,直到每個(gè)小文件小于內(nèi)存大小,這樣,每個(gè)文件可放到內(nèi)存中處理。采用3.1節(jié)的方法依次處理每個(gè)小文件。

  3.4 多機(jī)+受限內(nèi)存

  這種情況下,為了合理利用多臺(tái)機(jī)器的資源,可將數(shù)據(jù)分發(fā)到多臺(tái)機(jī)器上,每臺(tái)機(jī)器采用3.3節(jié)中的策略解決本地的數(shù)據(jù)。可采用hash+socket方法進(jìn)行數(shù)據(jù)分發(fā)。

  從實(shí)際應(yīng)用的角度考慮,3.1~3.4節(jié)的方案并不可行,因?yàn)樵诤A看髷?shù)據(jù)處理環(huán)境下,作業(yè)效率并不是首要考慮的問題,算法的擴(kuò)展性和容錯(cuò)性才是首要考慮的。算法應(yīng)該具有良好的擴(kuò)展性,以便數(shù)據(jù)量進(jìn)一步加大(隨著業(yè)務(wù)的發(fā)展,數(shù)據(jù)量加大是必然的)時(shí),在不修改算法框架的前提下,可達(dá)到近似的線性比;算法應(yīng)該具有容錯(cuò)性,即當(dāng)前某個(gè)文件處理失敗后,能自動(dòng)將其交給另外一個(gè)線程繼續(xù)處理,而不是從頭開始處理。

  Top k問題很適合采用MapReduce框架解決,用戶只需編寫一個(gè)map函數(shù)和兩個(gè)reduce 函數(shù),然后提交到Hadoop(采用mapchain和reducechain)上即可解決該問題。對于map函數(shù),采用hash算法,將hash值相同的數(shù)據(jù)交給同一個(gè)reduce task;對于第一個(gè)reduce函數(shù),采用HashMap統(tǒng)計(jì)出每個(gè)詞出現(xiàn)的頻率,對于第二個(gè)reduce 函數(shù),統(tǒng)計(jì)所有reduce task輸出數(shù)據(jù)中的top k即可。

  4. 總結(jié)

  Top K問題是一個(gè)非常常見的問題,公司一般不會(huì)自己寫個(gè)程序進(jìn)行計(jì)算,而是提交到自己核心的數(shù)據(jù)處理平臺(tái)上計(jì)算,該平臺(tái)的計(jì)算效率可能不如直接寫程序高,但它具有良好的擴(kuò)展性和容錯(cuò)性,而這才是企業(yè)最看重的。

  • 說明:本文內(nèi)容編輯整理自互聯(lián)網(wǎng)公開渠道,轉(zhuǎn)載僅作對信息共享之用,本站對本信息之真實(shí)性和可靠性以及文章本身的觀點(diǎn)不持有認(rèn)同態(tài)度。


  • 集成系統(tǒng)網(wǎng)絡(luò)情報(bào)信息數(shù)據(jù)庫

    CIO頻道人物視窗
    CIO頻道方案案例庫
    大數(shù)據(jù)建設(shè)方案案例庫
    電子政務(wù)建設(shè)方案案例庫
    互聯(lián)集成系統(tǒng)構(gòu)建方案案例庫
    商務(wù)智能建設(shè)方案案例庫
    系統(tǒng)集成類軟件信息研發(fā)企業(yè)名錄