一種基于Hadoop MapReduce編程框架的數(shù)據(jù)統(tǒng)計(jì)排重的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及大規(guī)模數(shù)據(jù)處理的技術(shù)領(lǐng)域,具體地涉及一種基于Hadoop MapReduce編程框架的數(shù)據(jù)統(tǒng)計(jì)排重的方法,適用于在Hadoop上進(jìn)行大規(guī)模數(shù)據(jù)的屬性統(tǒng)計(jì)。
【背景技術(shù)】
[0002]對(duì)于大規(guī)模數(shù)據(jù)的屬性統(tǒng)計(jì),現(xiàn)有的解決方法通常會(huì)使用散列表,也叫hash表,對(duì)相同的key統(tǒng)計(jì)其各個(gè)屬性出現(xiàn)的次數(shù),或者計(jì)算各個(gè)屬性對(duì)應(yīng)的權(quán)重之和。
[0003]其計(jì)算過(guò)程為將object劃分key,將object對(duì)應(yīng)的所有的attribute和weight劃分為value。對(duì)于數(shù)據(jù)集中所有相同的object,將它們所有相同attribute的weight值相加,并將所有attribute與weight之和使用hash表存儲(chǔ)于內(nèi)存中。如圖3所示,由于有裝載因子限制,其中會(huì)有空的存儲(chǔ)空間。
[0004]這種方法存在以下不足:
[0005]l、hash表在內(nèi)存中開(kāi)辟的空間需要根據(jù)裝載因子確定,通常裝載因子都會(huì)小于1,Java的HashMap的裝載因子默認(rèn)為0.75。這意味著存儲(chǔ)75條數(shù)據(jù)就需要開(kāi)辟100條數(shù)據(jù)所占用的空間。
[0006]2、在上述過(guò)程中使用的存儲(chǔ)空間全部在內(nèi)存中,如果裝載量比例大于裝載因子,hash表會(huì)重新調(diào)整存儲(chǔ)空間。由于該操作通常應(yīng)用于一些屬性的量不確定的對(duì)象,例如圖4,比如一個(gè)用戶在搜索引擎中搜索的關(guān)鍵詞、一輛車經(jīng)過(guò)的地理位置信息等等。在這些例子中有的對(duì)象的屬性量分布不均勻。有的用戶搜索的關(guān)鍵詞非常多,而有的就比較少。尤其是將一個(gè)用戶一個(gè)月的數(shù)量全部統(tǒng)計(jì)時(shí),面臨的完全是TB級(jí)的數(shù)據(jù)。如果使用hash表,其占用的內(nèi)存空間是無(wú)法預(yù)料的。所以有的計(jì)算節(jié)點(diǎn)會(huì)特別慢,當(dāng)開(kāi)辟內(nèi)存過(guò)多時(shí),會(huì)使計(jì)算節(jié)點(diǎn)宕機(jī),最終也無(wú)法得到結(jié)果。
【發(fā)明內(nèi)容】
[0007]本發(fā)明的技術(shù)解決問(wèn)題是:克服現(xiàn)有技術(shù)的不足,提供一種基于HadoopMapReduce編程框架的數(shù)據(jù)統(tǒng)計(jì)排重的方法,其無(wú)需開(kāi)辟過(guò)多的存儲(chǔ)空間,就能夠從容應(yīng)對(duì)更大量數(shù)據(jù)的排重統(tǒng)計(jì)。
[0008]本發(fā)明的技術(shù)解決方案是:這種基于Hadoop MapReduce編程框架的數(shù)據(jù)統(tǒng)計(jì)排重的方法,該方法使用Hadoop的MapReduce的key和value的劃分機(jī)制,包括以下步驟:
[0009](I)每個(gè)map分別處理各自分區(qū)的數(shù)據(jù),將數(shù)據(jù)對(duì)象object和其對(duì)應(yīng)的每個(gè)attribute分別結(jié)合,形成不同的關(guān)鍵詞key ;將每個(gè)屬性attribute對(duì)應(yīng)的權(quán)重weight劃分為其與object結(jié)合形成的key的權(quán)值value,從而形成key/value對(duì);
[0010](2)按照key將數(shù)據(jù)劃分到不同的reduce分區(qū),并對(duì)不同的reduce分區(qū)的數(shù)據(jù)分別按照key排序;
[0011](3)將步驟⑵的數(shù)據(jù)寫回該map節(jié)點(diǎn)的磁盤。
[0012]本發(fā)明使用了 MapReduce的key和value的劃分機(jī)制,無(wú)需開(kāi)辟過(guò)多的存儲(chǔ)空間,不會(huì)過(guò)度依賴于內(nèi)存,所以當(dāng)遇到更大量的數(shù)據(jù),通常是幾個(gè)TB,幾十個(gè)TB,也就是幾個(gè)月的數(shù)據(jù)時(shí),可以從容應(yīng)對(duì)。
【附圖說(shuō)明】
[0013]圖1為規(guī)整數(shù)據(jù)。
[0014]圖2為根據(jù)本發(fā)明的MapReduce的執(zhí)行示意圖。
[0015]圖3為現(xiàn)有技術(shù)的計(jì)算方法的示意圖。
[0016]圖4為不規(guī)整數(shù)據(jù)。
[0017]圖5為根據(jù)本發(fā)明的Map的過(guò)程示意圖。
[0018]圖6為根據(jù)本發(fā)明的Reduce的過(guò)程示意圖。
【具體實(shí)施方式】
[0019]本發(fā)明是一種Hadoop的MapReduce設(shè)計(jì)模式,適用于在Hadoop上進(jìn)行大規(guī)模數(shù)據(jù)屬性統(tǒng)計(jì)(只適用于專利中遇到的統(tǒng)計(jì)情景)。不同于普通利用字典的方法,巧妙利用Hadoop的MapReduce特性,對(duì)單個(gè)對(duì)象進(jìn)行大量屬性的統(tǒng)計(jì)。
[0020]本發(fā)明所面對(duì)的情景如圖1所示(后續(xù)圖中分別使用O代表object,A代表attribute,W代表weight),即統(tǒng)計(jì)每個(gè)對(duì)象所對(duì)應(yīng)的所有出現(xiàn)的屬性的總權(quán)重。
[0021]如圖2所示,這種基于Hadoop MapReduce編程框架的數(shù)據(jù)統(tǒng)計(jì)排重的方法,該方法使用Hadoop的MapReduce的key和value的劃分機(jī)制,包括以下步驟:
[0022](I)每個(gè)map分別處理各自分區(qū)的數(shù)據(jù),將數(shù)據(jù)對(duì)象object和其對(duì)應(yīng)的每個(gè)attribute分別結(jié)合,形成不同的關(guān)鍵詞key ;將每個(gè)屬性attribute對(duì)應(yīng)的權(quán)重weight劃分為其與object結(jié)合形成的key的權(quán)值value,從而形成key/value對(duì);
[0023](2)按照key將數(shù)據(jù)劃分到不同的reduce分區(qū),并對(duì)不同的reduce分區(qū)的數(shù)據(jù)分別按照key排序;
[0024](3)將步驟⑵的數(shù)據(jù)寫回該map節(jié)點(diǎn)的磁盤。
[0025]本發(fā)明使用了 MapReduce的key和value的劃分機(jī)制,無(wú)需開(kāi)辟過(guò)多的存儲(chǔ)空間,不會(huì)過(guò)度依賴于內(nèi)存,所以當(dāng)遇到更大量的數(shù)據(jù),通常是幾個(gè)TB,幾十個(gè)TB,也就是幾個(gè)月的數(shù)據(jù)時(shí),也可以從容應(yīng)對(duì)。
[0026]另外,如圖2、5所示,該方法還包括以下步驟:
[0027](4)每個(gè)reduce計(jì)算節(jié)點(diǎn)從各個(gè)map節(jié)點(diǎn)取走屬于該reduce計(jì)算節(jié)點(diǎn)的數(shù)據(jù),對(duì)取回的所有數(shù)據(jù)按照key進(jìn)行merger排序;
[0028](5)相同key對(duì)應(yīng)的value形成一個(gè)列表,并返回該列表的一個(gè)迭代子;
[0029](6)對(duì)每個(gè)key對(duì)應(yīng)的數(shù)據(jù)集列表進(jìn)行合并處理;
[0030](7)輸出處理結(jié)果。
[0031]另外,如圖6所示,所述步驟(I)還包括:對(duì)每個(gè)由object和attribute形成的key,將key相同的weight值相加。
[0032]相比于現(xiàn)有技術(shù),該技術(shù)執(zhí)行過(guò)程中不會(huì)過(guò)度依賴于內(nèi)存,所以當(dāng)遇到更大量的數(shù)據(jù),通常是幾個(gè)TB,幾十個(gè)TB,也就是幾個(gè)月的數(shù)據(jù)時(shí),可以從容應(yīng)對(duì),僅僅是使用了MapReduce的key和value的劃分機(jī)制,并沒(méi)有開(kāi)辟更多的內(nèi)存空間。但使用hash表,就有可能因?yàn)橛械膶?duì)象的屬性過(guò)多,需要開(kāi)辟過(guò)多的存儲(chǔ)空間,使得計(jì)算節(jié)點(diǎn)宕機(jī)也得不到計(jì)算結(jié)果。
[0033]以上所述,僅是本發(fā)明的較佳實(shí)施例,并非對(duì)本發(fā)明作任何形式上的限制,凡是依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所作的任何簡(jiǎn)單修改、等同變化與修飾,均仍屬本發(fā)明技術(shù)方案的保護(hù)范圍。
【主權(quán)項(xiàng)】
1.一種基于Hadoop MapReduce編程框架的數(shù)據(jù)統(tǒng)計(jì)排重的方法,其特征在于:該方法基于Hadoop MapReduce編程框架的key和value的劃分機(jī)制,包括以下步驟: (1)每個(gè)map分別處理各自分區(qū)的數(shù)據(jù),將數(shù)據(jù)對(duì)象object和其對(duì)應(yīng)的每個(gè)attribute分別結(jié)合,形成不同的關(guān)鍵詞key ;將每個(gè)屬性attribute對(duì)應(yīng)的權(quán)重weight劃分為其與object結(jié)合形成的key的權(quán)值value,從而形成key/value對(duì); (2)按照key將數(shù)據(jù)劃分到不同的reduce分區(qū),并對(duì)不同的reduce分區(qū)的數(shù)據(jù)分別按照key排序; (3)將步驟(2)的數(shù)據(jù)寫回該map節(jié)點(diǎn)的磁盤。
2.根據(jù)權(quán)利要求1所述的基于HadoopMapReduce編程框架的數(shù)據(jù)統(tǒng)計(jì)排重的方法,其特征在于:該方法還包括以下步驟: (4)每個(gè)reduce計(jì)算節(jié)點(diǎn)從各個(gè)map節(jié)點(diǎn)取走屬于該reduce計(jì)算節(jié)點(diǎn)的數(shù)據(jù),對(duì)取回的所有數(shù)據(jù)按照key進(jìn)行merger排序; (5)相同key對(duì)應(yīng)的value形成一個(gè)列表,并返回該列表的一個(gè)迭代子; (6)對(duì)每個(gè)key對(duì)應(yīng)的數(shù)據(jù)集列表進(jìn)行合并處理; (7)輸出處理結(jié)果。
3.根據(jù)權(quán)利要求2所述的基于HadoopMapReduce編程框架的數(shù)據(jù)統(tǒng)計(jì)排重的方法,其特征在于:所述步驟(I)還包括:對(duì)每個(gè)由object和attribute形成的key,將key相同的weight值相加。
【專利摘要】本發(fā)明公開(kāi)一種基于Hadoop MapReduce編程框架的數(shù)據(jù)統(tǒng)計(jì)排重的方法,該方法基于Hadoop MapReduce編程框架的key和value的劃分機(jī)制,包括步驟:(1)每個(gè)map分別處理各自分區(qū)的數(shù)據(jù),將數(shù)據(jù)對(duì)象object和其對(duì)應(yīng)的每個(gè)attribute分別結(jié)合,形成不同的關(guān)鍵詞key;將每個(gè)屬性attribute對(duì)應(yīng)的權(quán)重weight劃分為其與object結(jié)合形成的key的權(quán)值value,從而形成key/value對(duì);(2)按照key將數(shù)據(jù)劃分到不同的reduce分區(qū),并對(duì)不同的reduce分區(qū)的數(shù)據(jù)分別按照key排序;(3)將步驟(2)的數(shù)據(jù)寫回該map節(jié)點(diǎn)的磁盤。
【IPC分類】G06F17-30
【公開(kāi)號(hào)】CN104598567
【申請(qǐng)?zhí)枴緾N201510013399
【發(fā)明人】李鵬
【申請(qǐng)人】北京中交興路車聯(lián)網(wǎng)科技有限公司
【公開(kāi)日】2015年5月6日
【申請(qǐng)日】2015年1月12日