于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算。Map-Reduce模型主要包括Map、分桶和Reduce三部分,其中,Map任務(wù)的計(jì)算結(jié)果經(jīng)過(guò)分桶后作為Reduce任務(wù)的輸入,也就是說(shuō),Map任務(wù)的計(jì)算結(jié)果可經(jīng)由不同的分桶算法分發(fā)給不同的Reduce任務(wù)進(jìn)行處理,并得到最終處理結(jié)果。為了能夠便于用戶快速定位到Map任務(wù)中的key對(duì)應(yīng)的計(jì)算結(jié)果,本發(fā)明提出一種支持快速查詢Map-Reduce輸出結(jié)果的分桶方法及系統(tǒng)。下面參考附圖描述本發(fā)明實(shí)施例的支持快速查詢Map-Reduce輸出結(jié)果的分桶方法、裝置及設(shè)備。
[0037]圖1是根據(jù)本發(fā)明一個(gè)實(shí)施例的支持快速查詢Map-Reduce輸出結(jié)果的分桶方法的流程圖。圖2是根據(jù)本發(fā)明一個(gè)實(shí)施例的支持快速查詢Map-Reduce輸出結(jié)果的分桶框架圖。
[0038]如圖1和圖2所示,該方法包括:
[0039]SlOl,獲取Reduce任務(wù)的數(shù)量,并根據(jù)數(shù)量確定對(duì)應(yīng)的哈希策略。
[0040]其中,哈希即hash,一般譯做“散列”,就是把任意長(zhǎng)度的輸入(又叫做預(yù)映射,pre-1Mage),通過(guò)散列算法,變換成固定長(zhǎng)度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,所以不可能從散列值來(lái)唯一的確定輸入值。簡(jiǎn)單的說(shuō),哈希策略就是將任意長(zhǎng)度的消息壓縮為固定長(zhǎng)度的消息摘要。
[0041]需要說(shuō)明的是,在本發(fā)明的實(shí)施例中,哈希策略與Reduce任務(wù)的數(shù)量相關(guān),換而言之,如果Reduce任務(wù)的數(shù)量為N,則哈希策略為關(guān)于N的哈希函數(shù)。
[0042]如圖2所示,Mapper (即Map任務(wù))確定的哈希策略可為:
[0043]hash_id = hash (key) % N,
[0044]其中,hash_id為第一整數(shù)標(biāo)識(shí),key為Map任務(wù)中的key,N為Reduce任務(wù)的數(shù)量。
[0045]S102,根據(jù)哈希策略對(duì)Map任務(wù)中的Key進(jìn)行哈希計(jì)算生成第一整數(shù)標(biāo)識(shí)。
[0046]在本發(fā)明的實(shí)施例中,在Map任務(wù)中,可根據(jù)哈希策略對(duì)應(yīng)的關(guān)于N的哈希函數(shù)對(duì)Map任務(wù)中的Key進(jìn)行哈希計(jì)算生成第一整數(shù)標(biāo)識(shí)。其中,該第一整數(shù)標(biāo)識(shí)大于或等于零且小于N。
[0047]在本發(fā)明的一個(gè)實(shí)施例中,還可包括接收任務(wù)數(shù)據(jù)的步驟,其中,任務(wù)數(shù)據(jù)的第一列為Map任務(wù)中的key。需要說(shuō)明的是,在本發(fā)明的其他實(shí)施例中,Map任務(wù)中的key也可位于任務(wù)數(shù)據(jù)中其他位置,如第2列、第3列等。
[0048]應(yīng)當(dāng)理解,在Map任務(wù)中,所執(zhí)行的操作(如進(jìn)行哈希計(jì)算等),是對(duì)任務(wù)數(shù)據(jù)中的每個(gè)元素分別進(jìn)行相應(yīng)的操作,每個(gè)元素分別獨(dú)立進(jìn)行操作。在操作過(guò)程中,任務(wù)數(shù)據(jù)并未被更改,而是創(chuàng)建了一個(gè)新的列表以存儲(chǔ)生成的第一整數(shù)標(biāo)識(shí)。因此,Map任務(wù)是可以高度并行的,從而能夠滿足高性能要求的應(yīng)用以及并行計(jì)算領(lǐng)域的需求。
[0049]在本發(fā)明的一個(gè)實(shí)施例中,Map任務(wù)中的key可為任務(wù)數(shù)據(jù)的標(biāo)志信息。也就是說(shuō),Map任務(wù)中的key與任務(wù)場(chǎng)景相關(guān),舉例來(lái)說(shuō),如果任務(wù)數(shù)據(jù)為多個(gè)用戶的通信記錄,則Map任務(wù)中的key為用戶的手機(jī)號(hào),如果任務(wù)數(shù)據(jù)為手機(jī)中用戶的操作記錄,則Map任務(wù)中的key為手機(jī)的設(shè)備號(hào)。
[0050]S103,將第一整數(shù)標(biāo)識(shí)作為Reduce任務(wù)的標(biāo)識(shí),并根據(jù)Reduce任務(wù)的標(biāo)識(shí)分配對(duì)應(yīng)的Reduce任務(wù)進(jìn)行處理。
[0051]在本發(fā)明的實(shí)施例中,N個(gè)Reduce任務(wù)的標(biāo)識(shí)(reduce_id)分別為0,I,......,N_l,
因此,可將第一整數(shù)標(biāo)識(shí)對(duì)應(yīng)的數(shù)據(jù)分配給任務(wù)標(biāo)識(shí)一致的Reduce任務(wù)。舉例來(lái)說(shuō),如圖2所示,Partit1ner (分桶模塊)可讀取Mapper的輸出數(shù)據(jù)中各個(gè)Map任務(wù)中的key所對(duì)應(yīng)的第一整數(shù)標(biāo)識(shí),并將每個(gè)第一整數(shù)標(biāo)識(shí)對(duì)應(yīng)的整行數(shù)據(jù)分配給對(duì)應(yīng)的Reduce任務(wù)(Reducer)進(jìn)行處理。也就是說(shuō),按照reduce_id = hash_id的規(guī)則將Map輸出結(jié)果分配至相應(yīng)的Reduce任務(wù)進(jìn)行處理。
[0052]其中,Map任務(wù)的輸出結(jié)果中,可將各個(gè)Map任務(wù)中的key計(jì)算得到的第一整數(shù)標(biāo)識(shí)作為輸出結(jié)果列表的第一列。從而Partit1ner可通過(guò)讀取Map任務(wù)的輸出結(jié)果中的第一列數(shù)據(jù)以獲取第一整數(shù)標(biāo)識(shí)。
[0053]根據(jù)本發(fā)明實(shí)施例的支持快速查詢Map-Reduce輸出結(jié)果的分桶方法,根據(jù)Reduce任務(wù)的數(shù)量確定對(duì)應(yīng)的哈希策略,并對(duì)Map任務(wù)中的Key進(jìn)行哈希計(jì)算生成第一整數(shù)標(biāo)識(shí),再將第一整數(shù)標(biāo)識(shí)作為Reduce任務(wù)的標(biāo)識(shí)分配對(duì)應(yīng)的Reduce任務(wù)進(jìn)行處理,從而可以快速查詢到Map任務(wù)中的Key對(duì)應(yīng)的計(jì)算結(jié)果,便于管理,節(jié)省了時(shí)間和資源,提高了數(shù)據(jù)分析的效率,且提高了數(shù)據(jù)用戶的工作效率。
[0054]圖3是根據(jù)本發(fā)明另一個(gè)實(shí)施例的支持快速查詢Map-Reduce輸出結(jié)果的分桶方法的流程圖。
[0055]如圖3和圖2所示,該方法包括:
[0056]S201,獲取Reduce任務(wù)的數(shù)量,并根據(jù)數(shù)量確定對(duì)應(yīng)的哈希策略。
[0057]其中,哈希即hash,一般譯做“散列”,就是把任意長(zhǎng)度的輸入(又叫做預(yù)映射,pre-1Mage),通過(guò)散列算法,變換成固定長(zhǎng)度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,所以不可能從散列值來(lái)唯一的確定輸入值。簡(jiǎn)單的說(shuō),哈希策略就是將任意長(zhǎng)度的消息壓縮為固定長(zhǎng)度的消息摘要。
[0058]需要說(shuō)明的是,在本發(fā)明的實(shí)施例中,哈希策略與Reduce任務(wù)的數(shù)量相關(guān),換而言之,如果Reduce任務(wù)的數(shù)量為N,則哈希策略為關(guān)于N的哈希函數(shù)。
[0059]如圖2所示,Mapper (即Map任務(wù))確定的哈希策略可為:
[0060]hash_id = hash (key) % N,
[0061]其中,hash_id為第一整數(shù)標(biāo)識(shí),key為Map任務(wù)中的key,N為Reduce任務(wù)的數(shù)量。
[0062]S202,根據(jù)哈希策略對(duì)Map任務(wù)中的Key進(jìn)行哈希計(jì)算生成第一整數(shù)標(biāo)識(shí)。
[0063]在本發(fā)明的實(shí)施例中,在Map任務(wù)中,可根據(jù)哈希策略對(duì)應(yīng)的關(guān)于N的哈希函數(shù)對(duì)Map任務(wù)中的Key進(jìn)行哈希計(jì)算生成第一整數(shù)標(biāo)識(shí)。其中,該第一整數(shù)標(biāo)識(shí)大于或等于零且小于N。
[0064]在本發(fā)明的一個(gè)實(shí)施例中,還可包括接收任務(wù)數(shù)據(jù)的步驟,其中,任務(wù)數(shù)據(jù)的第一列為Map任務(wù)中的key。需要說(shuō)明的是,在本發(fā)明的其他實(shí)施例中,Map任務(wù)中的key也可位于任務(wù)數(shù)據(jù)中其他位置,如第2列、第3列等。
[0065]應(yīng)當(dāng)理解,在Map任務(wù)中,所執(zhí)行的操作(如進(jìn)行哈希計(jì)算等),是對(duì)任務(wù)數(shù)據(jù)中的每個(gè)元素分別進(jìn)行相應(yīng)的操作,每個(gè)元素分別獨(dú)立進(jìn)行操作。在操作過(guò)程中,任務(wù)數(shù)據(jù)并未被更改,而是創(chuàng)建了一個(gè)新的列表以存儲(chǔ)生成的第一整數(shù)標(biāo)識(shí)。因此,Map任務(wù)是可以高度并行的,從而能夠滿足高性能要求的應(yīng)用以及并行計(jì)算領(lǐng)域的需求。
[0066]在本發(fā)明的一個(gè)實(shí)施例中,Map任務(wù)中的key可為任務(wù)數(shù)據(jù)的標(biāo)志信息。也就是說(shuō),Map任務(wù)中的key與任務(wù)場(chǎng)景相關(guān),舉例來(lái)說(shuō),如果任務(wù)數(shù)據(jù)為多個(gè)用戶的通信記錄,則Map任務(wù)中的key為用戶的手機(jī)號(hào),如果任務(wù)數(shù)據(jù)為手機(jī)中用戶的操作記錄,則Map任務(wù)中的key為手機(jī)的設(shè)備號(hào)。
[0067]S203,對(duì)Map任務(wù)參數(shù)進(jìn)行設(shè)置,將第一整數(shù)標(biāo)識(shí)設(shè)置為鍵值。
[0068]在本發(fā)明的實(shí)施例中,可將指定的Map任務(wù)參數(shù)設(shè)置為I
[0069]具體地,可在Map任務(wù)參數(shù)中指定mapred.map.0utput, num.field為1,從而設(shè)定以該第一整數(shù)標(biāo)識(shí)作為鍵值,即表示對(duì)于分桶模塊來(lái)說(shuō),以該第一整數(shù)整數(shù)作為key。
[0070]S204,讀取Map任務(wù)的鍵值,將鍵值作為Reduce任務(wù)的標(biāo)識(shí),并根據(jù)Reduce任務(wù)的標(biāo)識(shí)分配對(duì)應(yīng)的Reduce任務(wù)進(jìn)行處理。
[0071]在本發(fā)明的實(shí)施例中,N個(gè)Reduce任務(wù)的標(biāo)識(shí)(reduce_id)分別為0,I,......,N_l,
因此,可將第一整數(shù)標(biāo)識(shí)對(duì)應(yīng)的數(shù)據(jù)分配給任務(wù)標(biāo)識(shí)一致的Reduce任務(wù)。舉例來(lái)說(shuō),如圖2所示,Partit1ner (分桶模塊)可讀取Mapper的輸出數(shù)據(jù)中各個(gè)Map任務(wù)中的key所對(duì)應(yīng)的第一整數(shù)標(biāo)識(shí),并將每個(gè)第一整數(shù)標(biāo)識(shí)對(duì)應(yīng)的整行數(shù)據(jù)分配給對(duì)應(yīng)的Reduce任務(wù)(Reducer)進(jìn)行處理。也就是說(shuō),按照reduce_id