本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,具體涉及一種分布式數(shù)據(jù)處理方法及裝置。
背景技術(shù):
分布式數(shù)據(jù)處理也可以稱為分布式計算、分布式處理或分布式事務(wù)處理。分布式數(shù)據(jù)處理是指在計算或處理時,發(fā)起者將需要計算的數(shù)據(jù)或需要處理的事務(wù)分成多個子計算、子處理或子事務(wù),然后把這些子計算、子處理或子事務(wù)分配給多個參與者進行計算或處理,最后發(fā)起者把各參與者的處理結(jié)果綜合起來得到最終的結(jié)果。
隨著大數(shù)據(jù)時代的到來,各行各業(yè)需要處理的數(shù)據(jù)量越來越大,而分布式數(shù)據(jù)處理技術(shù)的引入,極大地提高了數(shù)據(jù)處理效率,促進了各行各業(yè)的發(fā)展。
但是,發(fā)明人在實現(xiàn)本發(fā)明的過程中,發(fā)現(xiàn)在現(xiàn)有技術(shù)中至少存在如下問題:在分布式數(shù)據(jù)處理過程中,通常根據(jù)數(shù)據(jù)的鍵將需要處理的數(shù)據(jù)分發(fā)到參與處理的各個服務(wù)器上,因此,鍵相同的數(shù)據(jù)將被分發(fā)到同一臺服務(wù)器上,若某一個鍵對應(yīng)的數(shù)據(jù)量非常大,則會出現(xiàn)數(shù)據(jù)分發(fā)不均勻的情況。此時,個別服務(wù)器被分發(fā)的數(shù)據(jù)量特別多,而其他服務(wù)器被分發(fā)數(shù)據(jù)量比較少,這種情況下,數(shù)據(jù)多的服務(wù)器運算負荷大,處理花費的時間長,拉低了整體的數(shù)據(jù)處理效率;而數(shù)據(jù)少的服務(wù)器運算負荷小,部分運算能力被閑置,利用率不高,導致了資源的浪費。同時,當一臺服務(wù)器上處理的數(shù)據(jù)量過大時還常常出現(xiàn)處理失敗的情況。
技術(shù)實現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的分布式數(shù)據(jù)處理方法和相應(yīng)的分布式數(shù)據(jù)處理裝置。
根據(jù)本發(fā)明的一個方面,提供了一種分布式數(shù)據(jù)處理方法,該方法包括:將在同一數(shù)據(jù)集中的出現(xiàn)次數(shù)大于預(yù)設(shè)次數(shù)的鍵對應(yīng)的數(shù)據(jù)確定為傾斜數(shù)據(jù),將包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為傾斜數(shù)據(jù)集,將未包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為非傾斜數(shù)據(jù)集;根據(jù)預(yù)設(shè)的鍵標記集合,為傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的傾斜數(shù)據(jù)集;其中,鍵標記集合中包含N個不同的鍵標記,N為自然數(shù);將非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)復(fù)制為N個,得到擴容后的非傾斜數(shù)據(jù)集,根據(jù)鍵標記集合,為擴容后的非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的非傾斜數(shù)據(jù)集;按照預(yù)設(shè)的數(shù)據(jù)分配規(guī)則,將處理后的傾斜數(shù)據(jù)集以及處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理。
可選的,處理后的傾斜數(shù)據(jù)集以及處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的鍵為該數(shù)據(jù)的原始鍵與該數(shù)據(jù)的鍵標記的組合;則按照預(yù)設(shè)的數(shù)據(jù)分配規(guī)則,將處理后的傾斜數(shù)據(jù)集以及處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理的步驟具體包括:根據(jù)各個數(shù)據(jù)的鍵,將處理后的傾斜數(shù)據(jù)集以及處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理。
可選的,將處理后的傾斜數(shù)據(jù)集以及處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理的步驟之后,進一步包括:從處理后的各個數(shù)據(jù)的鍵中刪除鍵標記,得到各個數(shù)據(jù)的原始鍵。
可選的,為傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始值分別添加一個鍵標記的步驟具體包括:將鍵標記集合中的各個鍵標記依次添加到傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中;或者,將鍵標記集合中的各個鍵標記隨機添加到傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。
可選的,為擴容后的非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記的步驟具體包括:將鍵標記集合中的各個鍵標記依次添加到擴容后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中;或者,將鍵標記集合中的各個鍵標記隨機添加到擴容后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。
可選的,鍵標記包括:用于添加在原始鍵的起始位置的前綴型鍵標記,和/或,用于添加在原始鍵的末尾位置的后綴型鍵標記;并且,鍵標記包括以下中的至少一種:單字符類鍵標記、字符串類鍵標記、以及數(shù)字類鍵標記。
可選的,當鍵標記為數(shù)字類鍵標記時,數(shù)據(jù)分配規(guī)則包括:對每個數(shù)據(jù)的鍵進行模運算,根據(jù)運算結(jié)果為該數(shù)據(jù)分配服務(wù)器;和/或,當鍵標記為單字符類鍵標記和/或字符串類鍵標記時,數(shù)據(jù)分配規(guī)則包括:根據(jù)各個數(shù)據(jù)的鍵中包含的相同字符的個數(shù),對各個數(shù)據(jù)的鍵進行聚類處理,根據(jù)聚類處理的結(jié)果為各個數(shù)據(jù)分配服務(wù)器。
根據(jù)本發(fā)明的另一方面,提供了一種分布式數(shù)據(jù)處理裝置,該裝置包括:確定模塊,用于將在同一數(shù)據(jù)集中的出現(xiàn)次數(shù)大于預(yù)設(shè)次數(shù)的鍵對應(yīng)的數(shù)據(jù)確定為傾斜數(shù)據(jù),將包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為傾斜數(shù)據(jù)集,將未包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為非傾斜數(shù)據(jù)集;傾斜數(shù)據(jù)集標記模塊,用于根據(jù)預(yù)設(shè)的鍵標記集合,為傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的傾斜數(shù)據(jù)集;其中,鍵標記集合中包含N個不同的鍵標記,N為自然數(shù);非傾斜數(shù)據(jù)集標記模塊,用于將非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)復(fù)制為N個,得到擴容后的非傾斜數(shù)據(jù)集,根據(jù)鍵標記集合,為擴容后的非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的非傾斜數(shù)據(jù)集;分配模塊,用于按照預(yù)設(shè)的數(shù)據(jù)分配規(guī)則,將處理后的傾斜數(shù)據(jù)集以及處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理。
可選的,處理后的傾斜數(shù)據(jù)集以及處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的鍵為該數(shù)據(jù)的原始鍵與該數(shù)據(jù)的鍵標記的組合;則分配模塊具體用于:根據(jù)各個數(shù)據(jù)的鍵,將處理后的傾斜數(shù)據(jù)集以及處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理。
可選的,裝置進一步包括:刪除模塊,用于從處理后的各個數(shù)據(jù)的鍵中刪除鍵標記,得到各個數(shù)據(jù)的原始鍵。
可選的,傾斜數(shù)據(jù)集標記模塊具體用于:將鍵標記集合中的各個鍵標記依次添加到傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中;或者,將鍵標記集合中的各個鍵標記隨機添加到傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。
可選的,非傾斜數(shù)據(jù)集標記模塊具體用于:將鍵標記集合中的各個鍵標記依次添加到擴容后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中;或者,將鍵標記集合中的各個鍵標記隨機添加到擴容后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。
可選的,鍵標記包括:用于添加在原始鍵的起始位置的前綴型鍵標記,和/或,用于添加在原始鍵的末尾位置的后綴型鍵標記;并且,鍵標記包括以下中的至少一種:單字符類鍵標記、字符串類鍵標記、以及數(shù)字類鍵標記。
可選的,當鍵標記為數(shù)字類鍵標記時,數(shù)據(jù)分配規(guī)則包括:對每個數(shù)據(jù)的鍵進行模運算,根據(jù)運算結(jié)果為該數(shù)據(jù)分配服務(wù)器;和/或,當鍵標記為單字符類鍵標記和/或字符串類鍵標記時,數(shù)據(jù)分配規(guī)則包括:根據(jù)各個數(shù)據(jù)的鍵中包含的相同字符的個數(shù),對各個數(shù)據(jù)的鍵進行聚類處理,根據(jù)聚類處理的結(jié)果為各個數(shù)據(jù)分配服務(wù)器。
在本發(fā)明提供的一種分布式數(shù)據(jù)處理方法及裝置中,能夠預(yù)先根據(jù)鍵的出現(xiàn)次數(shù)確定傾斜數(shù)據(jù),并將包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為傾斜數(shù)據(jù)集,將未包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為非傾斜數(shù)據(jù)集,進而為傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,并對非傾斜數(shù)據(jù)集中的數(shù)據(jù)進行擴容后添加鍵標記。由于數(shù)據(jù)分配過程是根據(jù)鍵執(zhí)行的,因此,通過對數(shù)據(jù)的原始鍵添加鍵標記,能夠使數(shù)據(jù)更加均勻地分配到各臺服務(wù)器上,能夠充分利用每臺服務(wù)器的運算能力,同時也解決了現(xiàn)有技術(shù)中存在的一臺服務(wù)器上處理的數(shù)據(jù)量過大時常常導致處理失敗的問題,保證了分布式計算系統(tǒng)的穩(wěn)定性,進一步提高了分布式計算的效率。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了本發(fā)明實施例一提供的一種分布式數(shù)據(jù)處理方法的流程示意圖;
圖2示出了本發(fā)明實施例二提供的一種分布式數(shù)據(jù)處理方法的流程示意圖;
圖3示出了本發(fā)明實施例三提供的一種分布式數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖;
圖4示出了本發(fā)明實施例四提供的一種分布式數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。
實施例一
圖1示出了本發(fā)明實施例一提供的一種分布式數(shù)據(jù)處理方法的流程示意圖,該方法包括:
步驟S110:將在同一數(shù)據(jù)集中的出現(xiàn)次數(shù)大于預(yù)設(shè)次數(shù)的鍵對應(yīng)的數(shù)據(jù)確定為傾斜數(shù)據(jù),將包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為傾斜數(shù)據(jù)集,將未包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為非傾斜數(shù)據(jù)集。
在分布式數(shù)據(jù)處理過程中,待處理的數(shù)據(jù)是根據(jù)與其對應(yīng)的鍵的鍵值來分配到不同服務(wù)器上的。如果一臺服務(wù)器上分布的數(shù)據(jù)太多,會導致該臺服務(wù)器處理時間太長,而其它服務(wù)器上分布的數(shù)據(jù)少,處理時間也比較少,導致整個分布式數(shù)據(jù)處理過程的運算瓶頸集中在一臺服務(wù)器上,從而降低了分布式數(shù)據(jù)處理的效率。這種因為數(shù)據(jù)分布不均,導致一次分布式數(shù)據(jù)處理過程中的某個服務(wù)器完成作業(yè)的時間遠遠高于其它服務(wù)器,從而造成總體作業(yè)的資源消耗高和效率低下的情況就叫做“數(shù)據(jù)傾斜”,而集中分布在某臺服務(wù)器上導致出現(xiàn)該情況的數(shù)據(jù)就是傾斜數(shù)據(jù)。
為了解決上述的數(shù)據(jù)傾斜問題,本發(fā)明實施例提出了一種分布式數(shù)據(jù)處理方法。首先,分別對每個數(shù)據(jù)集中出現(xiàn)的各個鍵進行抽樣計算,得出每個數(shù)據(jù)集中的每個鍵的出現(xiàn)次數(shù)。當某個鍵的出現(xiàn)次數(shù)大于預(yù)設(shè)次數(shù)時,預(yù)示該鍵對應(yīng)的數(shù)據(jù)將集中分配在某臺服務(wù)器上,因此需要將該鍵對應(yīng)的數(shù)據(jù)確定為傾斜數(shù)據(jù),將包含該傾斜數(shù)據(jù)的數(shù)據(jù)集確定為傾斜數(shù)據(jù)集,將未包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為非傾斜數(shù)據(jù)集。
步驟S120:根據(jù)預(yù)設(shè)的鍵標記集合,為傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的傾斜數(shù)據(jù)集;其中,鍵標記集合中包含N個不同的鍵標記,N為自然數(shù)。
因為數(shù)據(jù)傾斜情況往往出現(xiàn)在數(shù)據(jù)集進行聚合運算的情況下。為了避免出現(xiàn)數(shù)據(jù)傾斜情況,需要盡可能地將數(shù)據(jù)均勻的分布到所有服務(wù)器上。因為待處理數(shù)據(jù)是根據(jù)與其對應(yīng)的鍵的鍵值分配到不同服務(wù)器上,所以本發(fā)明實施例通過對待處理數(shù)據(jù)對應(yīng)的鍵進行修改,以盡可能達到平均分配數(shù)據(jù)的目的。
鍵標記集合中預(yù)存有N個不同的鍵標記,N為自然數(shù),將上述鍵標記添加到傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵上,由此處理后的傾斜數(shù)據(jù)集中各個數(shù)據(jù)的鍵為該數(shù)據(jù)的原始鍵與該數(shù)據(jù)的鍵標記的組合。添加方式可以是將鍵標記作為前綴添加到原始鍵上,也可以將鍵標記作為后綴添加到原始鍵上,本發(fā)明對此不作具體限定,本領(lǐng)域技術(shù)人員可以根據(jù)具體情況靈活設(shè)定。
步驟S130:將非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)復(fù)制為N個,得到擴容后的非傾斜數(shù)據(jù)集,根據(jù)鍵標記集合,為擴容后的非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的非傾斜數(shù)據(jù)集。
為了能夠保證數(shù)據(jù)集的聚合運算不出錯誤,需要對非傾斜數(shù)據(jù)集進行擴容處理,即將非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)復(fù)制為N個(N的取值與上述鍵標記集合中包含的鍵標記個數(shù)相同),并將上述鍵標記集合中的鍵標記添加到擴容后的非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵上。添加方式與傾斜數(shù)據(jù)集中的添加方式一致。
步驟S140:按照預(yù)設(shè)的數(shù)據(jù)分配規(guī)則,將處理后的傾斜數(shù)據(jù)集以及處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理。
具體地,根據(jù)預(yù)設(shè)的數(shù)據(jù)分配規(guī)則,將經(jīng)過上述步驟處理后的傾斜數(shù)據(jù)集和非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理,由于數(shù)據(jù)分配規(guī)則是根據(jù)數(shù)據(jù)的鍵進行分配的,因此,通過對數(shù)據(jù)的原始鍵進行改變,能夠?qū)崿F(xiàn)待處理數(shù)據(jù)在多臺服務(wù)器上的平均分布,避免出現(xiàn)數(shù)據(jù)傾斜的情況。
由此可見,本發(fā)明提供的一種分布式數(shù)據(jù)處理方法可以通過對數(shù)據(jù)對應(yīng)的鍵進行特殊處理,實現(xiàn)對待處理數(shù)據(jù)進行合理分配,使數(shù)據(jù)更加均勻地分配到服務(wù)器上,能夠充分利用每臺服務(wù)器的運算能力,進一步提高了分布式計算的效率。
實施例二
圖2示出了本發(fā)明實施例二提供的一種分布式數(shù)據(jù)處理方法的流程示意圖,該方法包括:
步驟S210:將在同一數(shù)據(jù)集中的出現(xiàn)次數(shù)大于預(yù)設(shè)次數(shù)的鍵對應(yīng)的數(shù)據(jù)確定為傾斜數(shù)據(jù),將包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為傾斜數(shù)據(jù)集,將未包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為非傾斜數(shù)據(jù)集。
在分布式數(shù)據(jù)處理過程中,待處理的數(shù)據(jù)是根據(jù)與其對應(yīng)的鍵的鍵值來分配到不同服務(wù)器上的。如果一臺服務(wù)器上分布的數(shù)據(jù)太多,會導致該臺服務(wù)器處理時間太長,而其它服務(wù)器上分布的數(shù)據(jù)少,處理時間也比較少,導致整個分布式數(shù)據(jù)處理過程的運算瓶頸集中在一臺服務(wù)器上,從而降低了分布式數(shù)據(jù)處理的效率。這種因為數(shù)據(jù)分布不均,導致一次分布式數(shù)據(jù)處理過程中的某個服務(wù)器完成作業(yè)的時間遠遠高于其它服務(wù)器,從而造成總體作業(yè)的資源消耗高和效率低下的情況就叫做“數(shù)據(jù)傾斜”,而集中分布在某臺服務(wù)器上導致出現(xiàn)該情況的數(shù)據(jù)就是傾斜數(shù)據(jù)。
為了解決上述的數(shù)據(jù)傾斜問題,本發(fā)明實施例提出了一種分布式數(shù)據(jù)處理方法。首先,分別對每個數(shù)據(jù)集中出現(xiàn)的各個鍵進行抽樣計算,得出每個數(shù)據(jù)集中的每個鍵的出現(xiàn)次數(shù)。當某個鍵的出現(xiàn)次數(shù)大于預(yù)設(shè)次數(shù)時,說明該鍵對應(yīng)的數(shù)據(jù)過于集中在某臺服務(wù)器上,因此需要將該鍵對應(yīng)的數(shù)據(jù)確定為傾斜數(shù)據(jù),將包含該傾斜數(shù)據(jù)的數(shù)據(jù)集確定為傾斜數(shù)據(jù)集,將未包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為非傾斜數(shù)據(jù)集。其中,預(yù)設(shè)次數(shù)的具體取值可根據(jù)經(jīng)驗或根據(jù)分布式服務(wù)器的數(shù)量確定。
步驟S220:根據(jù)預(yù)設(shè)的鍵標記集合,為傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的傾斜數(shù)據(jù)集;其中,鍵標記集合中包含N個不同的鍵標記,N為自然數(shù)。
因為數(shù)據(jù)傾斜情況往往出現(xiàn)在數(shù)據(jù)集進行聚合運算的情況下,為了避免出現(xiàn)數(shù)據(jù)傾斜情況,需要盡可能地將數(shù)據(jù)均勻的分布到所有服務(wù)器上。因為待處理數(shù)據(jù)是根據(jù)與其對應(yīng)的鍵的鍵值分配到不同服務(wù)器上,所以本發(fā)明實施例通過對待處理數(shù)據(jù)對應(yīng)的鍵進行修改,以盡可能達到平均分配數(shù)據(jù)的目的。
鍵標記集合中預(yù)存有N個不同的鍵標記,N為自然數(shù),將上述鍵標記添加到傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵上,由此處理后的傾斜數(shù)據(jù)集中各個數(shù)據(jù)的鍵為該數(shù)據(jù)的原始鍵與該數(shù)據(jù)的鍵標記的組合。上述鍵標記可以是作為前綴添加到原始鍵起始位置的前綴型鍵標記,也可以是作為后綴添加到原始鍵的末尾位置的后綴型鍵標記。該鍵標記的類型可以是單字符類鍵標記,也可以是字符串類鍵標記,還可以是數(shù)字類鍵標記。本發(fā)明對此不作具體限定,本領(lǐng)域技術(shù)人員可以根據(jù)具體情況靈活設(shè)定。
關(guān)于鍵標記的具體添加方式,在本發(fā)明實施例中,可以將鍵標記集合中的各個鍵標記依次添加到傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。假設(shè),傾斜數(shù)據(jù)集中的數(shù)據(jù)的原始鍵為key1、key2、key3、key4、key5,預(yù)設(shè)的鍵標記集合中的鍵標記為0、1、2、3、4,則處理后的鍵為0_key1、1_key2、2_key3、3_key4、4_key5。
在其他實施例中,鍵標記的具體添加方式也可以是將鍵標記集合中的各個鍵標記隨機添加到傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。假設(shè),傾斜數(shù)據(jù)集中的數(shù)據(jù)的原始鍵為key1、key2、key3、key4、key5,預(yù)設(shè)的鍵標記集合中的鍵標記為0、1、2、3、4,則處理后的鍵為1_key1、0_key2、2_key3、3_key4、4_key5。至于在實際應(yīng)用中,具體選擇上述哪一種添加方式,本發(fā)明對此不作具體限定,本領(lǐng)域技術(shù)人員可以根據(jù)實際情況設(shè)定。
步驟S230:將非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)復(fù)制為N個,得到擴容后的非傾斜數(shù)據(jù)集,根據(jù)鍵標記集合,為擴容后的非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的非傾斜數(shù)據(jù)集。
為了能夠保證數(shù)據(jù)集的聚合運算不出錯誤,需要對非傾斜數(shù)據(jù)集進行擴容處理,即:將非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)復(fù)制為N個(N的取值與上述鍵標記集合中包含的鍵標記個數(shù)相同),并將上述鍵標記集合中的鍵標記添加到非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵上,處理后的鍵為該數(shù)據(jù)的原始鍵與該數(shù)據(jù)的鍵標記的組合。上述鍵標記可以是作為前綴添加到原始鍵起始位置的前綴型鍵標記,也可以是作為后綴添加到原始鍵的末尾位置的后綴型鍵標記。該鍵標記的類型可以是單字符類鍵標記,也可以是字符串類鍵標記,還可以是數(shù)字類鍵標記。本發(fā)明對此不作具體限定,本領(lǐng)域技術(shù)人員可以根據(jù)具體情況靈活設(shè)定。
在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn):為了提高數(shù)據(jù)處理的準確性,有必要對非傾斜數(shù)據(jù)集進行擴容。下面以一個具體例子來闡述:假設(shè),確定的傾斜數(shù)據(jù)集中各個數(shù)據(jù)的原始鍵分別為key1、key2、key3、key4、key5,確定的非傾斜數(shù)據(jù)集中的數(shù)據(jù)的原始鍵為key7,預(yù)設(shè)的鍵標記集合中的鍵標記為0、1、2、3、4。
當傾斜數(shù)據(jù)集中的各個數(shù)據(jù)與非傾斜數(shù)據(jù)集中的數(shù)據(jù)進行聚合運算時:
當處理后的傾斜數(shù)據(jù)集中的各個數(shù)據(jù)與未經(jīng)擴容直接處理的非傾斜數(shù)據(jù)集中的數(shù)據(jù)進行聚合運算時:
由此可見,在未經(jīng)擴容的情況下,可能出現(xiàn)1_key(1,())、2_key(3,())、3_key(4,())、4_key(5,())這四個錯誤的計算結(jié)果。
當處理后的傾斜數(shù)據(jù)集中的各個數(shù)據(jù)與擴容后的非傾斜數(shù)據(jù)集中的數(shù)據(jù)進行聚合運算時:
由此可見,與擴容后的非傾斜數(shù)據(jù)集進行聚合運算所得到的結(jié)果均為正確結(jié)果,在后續(xù)處理時,只需將添加的鍵標記去除即可。因此,在本實施例中,為了進一步提高數(shù)據(jù)處理的正確性,需要對非傾斜數(shù)據(jù)集進行擴容操作。
關(guān)于鍵標記的具體添加方式,在本發(fā)明實施例中,可以將鍵標記集合中的各個鍵標記依次添加到擴容后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。假設(shè),N為5,預(yù)設(shè)的鍵標記集合中的鍵標記為0、1、2、3、4,擴容前的非傾斜數(shù)據(jù)集中的數(shù)據(jù)的原始鍵為key7,則擴容后的非傾斜數(shù)據(jù)集中的數(shù)據(jù)的原始鍵為5個key7,處理后的鍵為0_key7、1_key7、2_key7、3_key7、4_key7。
在其他實施例中,鍵標記的具體添加方式也可以是將鍵標記集合中的各個鍵標記隨機添加到擴容后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。假設(shè),N為5,預(yù)設(shè)的鍵標記集合中的鍵標記為0、1、2、3、4,擴容前的非傾斜數(shù)據(jù)集中的數(shù)據(jù)的原始鍵為key7,則擴容后的非傾斜數(shù)據(jù)集中的數(shù)據(jù)的原始鍵為5個key7,處理后的鍵為0_key7、4_key7、1_key7、3_key7、2_key7。
步驟S240:按照預(yù)設(shè)的數(shù)據(jù)分配規(guī)則,將處理后的傾斜數(shù)據(jù)集以及處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理。
具體而言,步驟S240是根據(jù)各個數(shù)據(jù)的鍵,將處理后的傾斜數(shù)據(jù)集以及處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器,從而進行分布式處理。其中,當鍵標記類型不同時,預(yù)設(shè)的分配規(guī)則也可能不同,本領(lǐng)域技術(shù)人員可以根據(jù)分配規(guī)則來確定鍵標記的設(shè)置方式:例如,當鍵標記為數(shù)字類鍵標記時,數(shù)據(jù)分配規(guī)則為對每個數(shù)據(jù)的鍵進行模運算之后,根據(jù)運算結(jié)果為該數(shù)據(jù)分配服務(wù)器,由此可見,數(shù)字類鍵標記尤其適用于按照模運算結(jié)果進行分配的場景中。又如,當鍵標記為單字符類鍵標記或者字符串類鍵標記時,數(shù)據(jù)分配的規(guī)則為根據(jù)各個數(shù)據(jù)的鍵中包含的相同字符的個數(shù),對各個數(shù)據(jù)的鍵進行聚類處理,根據(jù)聚類處理的結(jié)果為各個數(shù)據(jù)分配服務(wù)器,由此可見,單字符類鍵標記或者字符串類鍵標記尤其適用于根據(jù)鍵的聚類結(jié)果進行分配的場景中。具體地,在本實施例中,假設(shè)分配規(guī)則為:從鍵的首字母開始進行動態(tài)匹配,從而將鍵的起始部分相同的數(shù)據(jù)分配到同一服務(wù)器上,則優(yōu)選地將單字符類鍵標記或者字符串類鍵標記以前綴方式添加到各個數(shù)據(jù)的原始鍵中,從而能夠盡可能地實現(xiàn)數(shù)據(jù)分配的均衡化。對于鍵標記類型的選擇和預(yù)設(shè)分配規(guī)則的設(shè)定,本發(fā)明不作具體限定,本領(lǐng)域技術(shù)人員可以根據(jù)實際情況靈活設(shè)定。
步驟S250:從處理后的各個數(shù)據(jù)的鍵中刪除鍵標記,得到各個數(shù)據(jù)的原始鍵。
因為鍵標記是本發(fā)明添加到各個數(shù)據(jù)的鍵中的標識,并非各個數(shù)據(jù)的鍵自帶的部分,所以在經(jīng)過本發(fā)明的分布式數(shù)據(jù)處理方法處理之后,需要將處理后的各個數(shù)據(jù)的鍵中的鍵標記刪除,從而得到各個數(shù)據(jù)的原始鍵,以便運算結(jié)果用于之后的實際應(yīng)用中。
由此可見,本發(fā)明提供的一種分布式數(shù)據(jù)處理方法可以通過對數(shù)據(jù)對應(yīng)的鍵進行特殊處理,實現(xiàn)對待處理數(shù)據(jù)進行合理分配,使數(shù)據(jù)更加均勻地分配到服務(wù)器上,能夠充分利用每臺服務(wù)器的運算能力,同時也解決了現(xiàn)有技術(shù)中存在的一臺服務(wù)器上處理的數(shù)據(jù)量過大時常常導致處理失敗的問題,保證了分布式計算系統(tǒng)的穩(wěn)定性,進一步提高了分布式計算的效率。
實施例三
圖3示出了本發(fā)明實施例三提供的一種分布式數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖,該裝置包括:確定模塊310、傾斜數(shù)據(jù)集標記模塊320、非傾斜數(shù)據(jù)集標記模塊330和分配模塊340。
確定模塊310:將在同一數(shù)據(jù)集中的出現(xiàn)次數(shù)大于預(yù)設(shè)次數(shù)的鍵對應(yīng)的數(shù)據(jù)確定為傾斜數(shù)據(jù),將包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為傾斜數(shù)據(jù)集,將未包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為非傾斜數(shù)據(jù)集。
在分布式數(shù)據(jù)處理過程中,待處理的數(shù)據(jù)是根據(jù)與其對應(yīng)的鍵的鍵值來分配到不同服務(wù)器上的。如果一臺服務(wù)器上分布的數(shù)據(jù)太多,會導致該臺服務(wù)器處理時間太長,而其它服務(wù)器上分布的數(shù)據(jù)少,處理時間也比較少,導致整個分布式數(shù)據(jù)處理過程的運算瓶頸集中在一臺服務(wù)器上,從而降低了分布式數(shù)據(jù)處理的效率。這種因為數(shù)據(jù)分布不均,導致一次分布式數(shù)據(jù)處理過程中的某個服務(wù)器完成作業(yè)的時間遠遠高于其它服務(wù)器,從而造成總體作業(yè)的資源消耗高和效率低下的情況就叫做“數(shù)據(jù)傾斜”,而集中分布在某臺服務(wù)器上導致出現(xiàn)該情況的數(shù)據(jù)就是傾斜數(shù)據(jù)。
為了解決上述的數(shù)據(jù)傾斜問題,本發(fā)明實施例提出了一種分布式數(shù)據(jù)處理裝置。首先,確定模塊310分別對每個數(shù)據(jù)集中出現(xiàn)的各個鍵進行抽樣計算,得出每個數(shù)據(jù)集中的每個鍵的出現(xiàn)次數(shù)。當某個鍵的出現(xiàn)次數(shù)大于預(yù)設(shè)次數(shù)時,預(yù)示該鍵對應(yīng)的數(shù)據(jù)將集中分配在某臺服務(wù)器上,因此確定模塊310需要將該鍵對應(yīng)的數(shù)據(jù)確定為傾斜數(shù)據(jù),將包含該傾斜數(shù)據(jù)的數(shù)據(jù)集確定為傾斜數(shù)據(jù)集,將未包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為非傾斜數(shù)據(jù)集。
傾斜數(shù)據(jù)集標記模塊320:根據(jù)預(yù)設(shè)的鍵標記集合,為傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的傾斜數(shù)據(jù)集;其中,鍵標記集合中包含N個不同的鍵標記,N為自然數(shù)。
因為數(shù)據(jù)傾斜情況往往出現(xiàn)在數(shù)據(jù)集進行聚合運算的情況下。為了避免出現(xiàn)數(shù)據(jù)傾斜情況,需要盡可能地將數(shù)據(jù)均勻的分布到所有服務(wù)器上。因為待處理數(shù)據(jù)是根據(jù)與其對應(yīng)的鍵的鍵值分配到不同服務(wù)器上,所以本發(fā)明實施例通過對待處理數(shù)據(jù)對應(yīng)的鍵進行修改,以盡可能達到平均分配數(shù)據(jù)的目的。
鍵標記集合中預(yù)存有N個不同的鍵標記,N為自然數(shù),傾斜數(shù)據(jù)集標記模塊320將上述鍵標記添加到傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵上,由此處理后的傾斜數(shù)據(jù)集中各個數(shù)據(jù)的鍵為該數(shù)據(jù)的原始鍵與該數(shù)據(jù)的鍵標記的組合。添加方式可以是將鍵標記作為前綴添加到原始鍵上,也可以將鍵標記作為后綴添加到原始鍵上,本發(fā)明對此不作具體限定,本領(lǐng)域技術(shù)人員可以根據(jù)具體情況靈活設(shè)定。
非傾斜數(shù)據(jù)集標記模塊330:將非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)復(fù)制為N個,得到擴容后的非傾斜數(shù)據(jù)集,根據(jù)鍵標記集合,為擴容后的非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的非傾斜數(shù)據(jù)集。
為了能夠保證數(shù)據(jù)集的聚合運算不出錯誤,非傾斜數(shù)據(jù)集標記模塊330需要對非傾斜數(shù)據(jù)集進行擴容處理,即將非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)復(fù)制為N個(N的取值與上述鍵標記集合中包含的鍵標記個數(shù)相同),并將上述鍵標記集合中的鍵標記添加到擴容后的非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵上。添加方式與傾斜數(shù)據(jù)集中的添加方式一致。
分配模塊340:按照預(yù)設(shè)的數(shù)據(jù)分配規(guī)則,將處理后的傾斜數(shù)據(jù)集以及處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理。
具體地,分配模塊340根據(jù)預(yù)設(shè)的數(shù)據(jù)分配規(guī)則,將經(jīng)過上述步驟處理后的傾斜數(shù)據(jù)集和非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理,由于數(shù)據(jù)分配規(guī)則是根據(jù)數(shù)據(jù)的鍵進行分配的,因此,通過對數(shù)據(jù)的原始鍵進行改變,能夠?qū)崿F(xiàn)待處理數(shù)據(jù)在多臺服務(wù)器上的平均分布,避免出現(xiàn)數(shù)據(jù)傾斜的情況。
關(guān)于上述各個模塊的具體結(jié)構(gòu)和工作原理可參照方法實施例中相應(yīng)部分的描述,此處不再贅述。
由此可見,本發(fā)明提供的一種分布式數(shù)據(jù)處理裝置可以通過對數(shù)據(jù)對應(yīng)的鍵進行特殊處理,實現(xiàn)對待處理數(shù)據(jù)進行合理分配,使數(shù)據(jù)更加均勻地分配到服務(wù)器上,能夠充分利用每臺服務(wù)器的運算能力,進一步提高了分布式計算的效率。
實施例四
圖4示出了本發(fā)明實施例四提供的一種分布式數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖,該裝置包括:確定模塊410、傾斜數(shù)據(jù)集標記模塊420、非傾斜數(shù)據(jù)集標記模塊430、分配模塊440和刪除模塊450。
確定模塊410,用于將在同一數(shù)據(jù)集中的出現(xiàn)次數(shù)大于預(yù)設(shè)次數(shù)的鍵對應(yīng)的數(shù)據(jù)確定為傾斜數(shù)據(jù),將包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為傾斜數(shù)據(jù)集,將未包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為非傾斜數(shù)據(jù)集。
在分布式數(shù)據(jù)處理過程中,待處理的數(shù)據(jù)是根據(jù)與其對應(yīng)的鍵的鍵值來分配到不同服務(wù)器上的。如果一臺服務(wù)器上分布的數(shù)據(jù)太多,會導致該臺服務(wù)器處理時間太長,而其它服務(wù)器上分布的數(shù)據(jù)少,處理時間也比較少,導致整個分布式數(shù)據(jù)處理過程的運算瓶頸集中在一臺服務(wù)器上,從而降低了分布式數(shù)據(jù)處理的效率。這種因為數(shù)據(jù)分布不均,導致一次分布式數(shù)據(jù)處理過程中的某個服務(wù)器完成作業(yè)的時間遠遠高于其它服務(wù)器,從而造成總體作業(yè)的資源消耗高和效率低下的情況就叫做“數(shù)據(jù)傾斜”,而集中分布在某臺服務(wù)器上導致出現(xiàn)該情況的數(shù)據(jù)就是傾斜數(shù)據(jù)。
為了解決上述的數(shù)據(jù)傾斜問題,首先,確定模塊410分別對每個數(shù)據(jù)集中出現(xiàn)的各個鍵進行抽樣計算,得出每個數(shù)據(jù)集中的每個鍵的出現(xiàn)次數(shù)。當某個鍵的出現(xiàn)次數(shù)大于預(yù)設(shè)次數(shù)時,說明該鍵對應(yīng)的數(shù)據(jù)過于集中在某臺服務(wù)器上,因此需要將該鍵對應(yīng)的數(shù)據(jù)確定為傾斜數(shù)據(jù),將包含該傾斜數(shù)據(jù)的數(shù)據(jù)集確定為傾斜數(shù)據(jù)集,將未包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為非傾斜數(shù)據(jù)集。其中,預(yù)設(shè)次數(shù)的具體取值可以根據(jù)經(jīng)驗或根據(jù)分布式服務(wù)器的數(shù)量確定。
傾斜數(shù)據(jù)集標記模塊420,用于根據(jù)預(yù)設(shè)的鍵標記集合,為傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的傾斜數(shù)據(jù)集;其中,鍵標記集合中包含N個不同的鍵標記,N為自然數(shù)。
因為數(shù)據(jù)傾斜情況往往出現(xiàn)在數(shù)據(jù)集進行聚合運算的情況下,為了避免出現(xiàn)數(shù)據(jù)傾斜情況,需要盡可能地將數(shù)據(jù)均勻的分布到所有服務(wù)器上。因為待處理數(shù)據(jù)是根據(jù)與其對應(yīng)的鍵的鍵值分配到不同服務(wù)器上,所以本發(fā)明實施例通過對待處理數(shù)據(jù)對應(yīng)的鍵進行修改,以盡可能達到平均分配數(shù)據(jù)的目的。
鍵標記集合中預(yù)存有N個不同的鍵標記,N為自然數(shù),傾斜數(shù)據(jù)集標記模塊420將上述鍵標記添加到傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵上,由此處理后的傾斜數(shù)據(jù)集中各個數(shù)據(jù)的鍵為該數(shù)據(jù)的原始鍵與該數(shù)據(jù)的鍵標記的組合。上述鍵標記可以是作為前綴添加到原始鍵起始位置的前綴型鍵標記,也可以是作為后綴添加到原始鍵的末尾位置的后綴型鍵標記。該鍵標記的類型可以是單字符類鍵標記,也可以是字符串類鍵標記,還可以是數(shù)字類鍵標記。本發(fā)明對此不作具體限定,本領(lǐng)域技術(shù)人員可以根據(jù)具體情況靈活設(shè)定。
關(guān)于鍵標記的具體添加方式,在本發(fā)明實施例中,可以將鍵標記集合中的各個鍵標記依次添加到傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。假設(shè),傾斜數(shù)據(jù)集中的數(shù)據(jù)的原始鍵為key1、key2、key3、key4、key5,預(yù)設(shè)的鍵標記集合中的鍵標記為0、1、2、3、4,則處理后的鍵為0_key1、1_key2、2_key3、3_key4、4_key5。
在其他實施例中,鍵標記的具體添加方式也可以是將鍵標記集合中的各個鍵標記隨機添加到傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。假設(shè),傾斜數(shù)據(jù)集中的數(shù)據(jù)的原始鍵為key1、key2、key3、key4、key5,預(yù)設(shè)的鍵標記集合中的鍵標記為0、1、2、3、4,則處理后的鍵為1_key1、0_key2、2_key3、3_key4、4_key5。至于在實際應(yīng)用中,具體選擇上述哪一種添加方式,本發(fā)明對此不作具體限定,本領(lǐng)域技術(shù)人員可以根據(jù)實際情況設(shè)定。
非傾斜數(shù)據(jù)集標記模塊430,用于將非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)復(fù)制為N個,得到擴容后的非傾斜數(shù)據(jù)集,根據(jù)鍵標記集合,為擴容后的非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的非傾斜數(shù)據(jù)集。
為了能夠保證數(shù)據(jù)集的聚合運算不出錯誤,非傾斜數(shù)據(jù)集標記模塊430需要對非傾斜數(shù)據(jù)集進行擴容處理,即:將非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)復(fù)制為N個(N的取值與上述鍵標記集合中包含的鍵標記個數(shù)相同),并將上述鍵標記集合中的鍵標記添加到非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵上,處理后的鍵為該數(shù)據(jù)的原始鍵與該數(shù)據(jù)的鍵標記的組合。上述鍵標記可以是作為前綴添加到原始鍵起始位置的前綴型鍵標記,也可以是作為后綴添加到原始鍵的末尾位置的后綴型鍵標記。該鍵標記的類型可以是單字符類鍵標記,也可以是字符串類鍵標記,還可以是數(shù)字類鍵標記。本發(fā)明對此不作具體限定,本領(lǐng)域技術(shù)人員可以根據(jù)具體情況靈活設(shè)定。
關(guān)于鍵標記的具體添加方式,在本發(fā)明實施例中,可以將鍵標記集合中的各個鍵標記依次添加到擴容后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。假設(shè),N為5,預(yù)設(shè)的鍵標記集合中的鍵標記為0、1、2、3、4,擴容前的非傾斜數(shù)據(jù)集中的數(shù)據(jù)的原始鍵為key7,則擴容后的非傾斜數(shù)據(jù)集中的數(shù)據(jù)的原始鍵為5個key7,處理后的鍵為0_key7、1_key7、2_key7、3_key7、4_key7。
在其他實施例中,鍵標記的具體添加方式也可以是將鍵標記集合中的各個鍵標記隨機添加到擴容后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。假設(shè),N為5,預(yù)設(shè)的鍵標記集合中的鍵標記為0、1、2、3、4,擴容前的非傾斜數(shù)據(jù)集中的數(shù)據(jù)的原始鍵為key7,則擴容后的非傾斜數(shù)據(jù)集中的數(shù)據(jù)的原始鍵為5個key7,處理后的鍵為0_key7、4_key7、1_key7、3_key7、2_key7。
分配模塊440:按照預(yù)設(shè)的數(shù)據(jù)分配規(guī)則,將處理后的傾斜數(shù)據(jù)集以及處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理。
具體而言,分配模塊440是根據(jù)各個數(shù)據(jù)的鍵,將處理后的傾斜數(shù)據(jù)集以及處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器,從而進行分布式處理。其中,當鍵標記類型不同時,預(yù)設(shè)的分配規(guī)則也可能不同,本領(lǐng)域技術(shù)人員可以根據(jù)分配規(guī)則來確定鍵標記的設(shè)置方式:例如,當鍵標記為數(shù)字類鍵標記時,數(shù)據(jù)分配規(guī)則為對每個數(shù)據(jù)的鍵進行模運算之后,根據(jù)運算結(jié)果為該數(shù)據(jù)分配服務(wù)器,由此可見,數(shù)字類鍵標記尤其適用于按照模運算結(jié)果進行分配的場景中。又如,當鍵標記為單字符類鍵標記或者字符串類鍵標記時,數(shù)據(jù)分配的規(guī)則為根據(jù)各個數(shù)據(jù)的鍵中包含的相同字符的個數(shù),對各個數(shù)據(jù)的鍵進行聚類處理,根據(jù)聚類處理的結(jié)果為各個數(shù)據(jù)分配服務(wù)器,由此可見,單字符類鍵標記或者字符串類鍵標記尤其適用于根據(jù)鍵的聚類結(jié)果進行分配的場景中。具體地,在本實施例中,假設(shè)分配規(guī)則為:從鍵的首字母開始進行動態(tài)匹配,從而將鍵的起始部分相同的數(shù)據(jù)分配到同一服務(wù)器上,則優(yōu)選地將單字符類鍵標記或者字符串類鍵標記以前綴方式添加到各個數(shù)據(jù)的原始鍵中,從而能夠盡可能地實現(xiàn)數(shù)據(jù)分配的均衡化。對于鍵標記類型的選擇和預(yù)設(shè)分配規(guī)則的設(shè)定,本發(fā)明不作具體限定,本領(lǐng)域技術(shù)人員可以根據(jù)實際情況靈活設(shè)定。
刪除模塊450:從處理后的各個數(shù)據(jù)的鍵中刪除鍵標記,得到各個數(shù)據(jù)的原始鍵。
因為鍵標記是本發(fā)明添加到各個數(shù)據(jù)的鍵中的標識,并非各個數(shù)據(jù)的鍵自帶的部分,所以在經(jīng)過本發(fā)明的分布式數(shù)據(jù)處理方法處理之后,刪除模塊450需要將處理后的各個數(shù)據(jù)的鍵中的鍵標記刪除,從而得到各個數(shù)據(jù)的原始鍵,以便運算結(jié)果用于之后的實際應(yīng)用中。
關(guān)于上述各個模塊的具體結(jié)構(gòu)和工作原理可參照方法實施例中相應(yīng)部分的描述,此處不再贅述。
由此可見,本發(fā)明提供的一種分布式數(shù)據(jù)處理方法可以通過對數(shù)據(jù)對應(yīng)的鍵進行特殊處理,實現(xiàn)對待處理數(shù)據(jù)進行合理分配,使數(shù)據(jù)更加均勻地分配到服務(wù)器上,能夠充分利用每臺服務(wù)器的運算能力,同時也解決了現(xiàn)有技術(shù)中存在的一臺服務(wù)器上處理的數(shù)據(jù)量過大時常常導致處理失敗的問題,保證了分布式計算系統(tǒng)的穩(wěn)定性,進一步提高了分布式計算的效率。
在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
類似地,應(yīng)當理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權(quán)利要求書由此明確地并入該具體實施方式,其中每個權(quán)利要求本身都作為本發(fā)明的單獨實施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對實施例中的設(shè)備中的模塊進行自適應(yīng)性地改變并且把它們設(shè)置在與該實施例不同的一個或多個設(shè)備中??梢园褜嵤├械哪K或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權(quán)利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的分布式數(shù)據(jù)處理裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。
本發(fā)明公開了:A1、一種分布式數(shù)據(jù)處理方法,包括:
將在同一數(shù)據(jù)集中的出現(xiàn)次數(shù)大于預(yù)設(shè)次數(shù)的鍵對應(yīng)的數(shù)據(jù)確定為傾斜數(shù)據(jù),將包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為傾斜數(shù)據(jù)集,將未包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為非傾斜數(shù)據(jù)集;
根據(jù)預(yù)設(shè)的鍵標記集合,為所述傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的傾斜數(shù)據(jù)集;其中,所述鍵標記集合中包含N個不同的鍵標記,N為自然數(shù);
將所述非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)復(fù)制為N個,得到擴容后的非傾斜數(shù)據(jù)集,根據(jù)所述鍵標記集合,為所述擴容后的非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的非傾斜數(shù)據(jù)集;
按照預(yù)設(shè)的數(shù)據(jù)分配規(guī)則,將所述處理后的傾斜數(shù)據(jù)集以及所述處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理。
A2、根據(jù)A1所述的方法,其中,所述處理后的傾斜數(shù)據(jù)集以及所述處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的鍵為該數(shù)據(jù)的原始鍵與該數(shù)據(jù)的鍵標記的組合;
則所述按照預(yù)設(shè)的數(shù)據(jù)分配規(guī)則,將所述處理后的傾斜數(shù)據(jù)集以及所述處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理的步驟具體包括:根據(jù)各個數(shù)據(jù)的鍵,將所述處理后的傾斜數(shù)據(jù)集以及所述處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理。
A3、根據(jù)A1或A2所述的方法,其中,所述將所述處理后的傾斜數(shù)據(jù)集以及所述處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理的步驟之后,進一步包括:
從處理后的各個數(shù)據(jù)的鍵中刪除所述鍵標記,得到各個數(shù)據(jù)的原始鍵。
A4、根據(jù)A1-A3任一所述的方法,其中,所述為所述傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始值分別添加一個鍵標記的步驟具體包括:
將所述鍵標記集合中的各個鍵標記依次添加到所述傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中;或者,
將所述鍵標記集合中的各個鍵標記隨機添加到所述傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。
A5、根據(jù)A1-A4任一所述的方法,其中,所述為所述擴容后的非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記的步驟具體包括:
將所述鍵標記集合中的各個鍵標記依次添加到所述擴容后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中;或者,
將所述鍵標記集合中的各個鍵標記隨機添加到所述擴容后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。
A6、根據(jù)A1-A5任一所述的方法,其中,所述鍵標記包括:用于添加在原始鍵的起始位置的前綴型鍵標記,和/或,用于添加在原始鍵的末尾位置的后綴型鍵標記;
并且,所述鍵標記包括以下中的至少一種:單字符類鍵標記、字符串類鍵標記、以及數(shù)字類鍵標記。
A7、根據(jù)A1-A6任一所述的方法,其中,當所述鍵標記為數(shù)字類鍵標記時,所述數(shù)據(jù)分配規(guī)則包括:對每個數(shù)據(jù)的鍵進行模運算,根據(jù)運算結(jié)果為該數(shù)據(jù)分配服務(wù)器;和/或,
當所述鍵標記為單字符類鍵標記和/或字符串類鍵標記時,所述數(shù)據(jù)分配規(guī)則包括:根據(jù)各個數(shù)據(jù)的鍵中包含的相同字符的個數(shù),對各個數(shù)據(jù)的鍵進行聚類處理,根據(jù)聚類處理的結(jié)果為各個數(shù)據(jù)分配服務(wù)器。
B8、一種分布式數(shù)據(jù)處理裝置,包括:
確定模塊,用于將在同一數(shù)據(jù)集中的出現(xiàn)次數(shù)大于預(yù)設(shè)次數(shù)的鍵對應(yīng)的數(shù)據(jù)確定為傾斜數(shù)據(jù),將包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為傾斜數(shù)據(jù)集,將未包含傾斜數(shù)據(jù)的數(shù)據(jù)集確定為非傾斜數(shù)據(jù)集;
傾斜數(shù)據(jù)集標記模塊,用于根據(jù)預(yù)設(shè)的鍵標記集合,為所述傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的傾斜數(shù)據(jù)集;其中,所述鍵標記集合中包含N個不同的鍵標記,N為自然數(shù);
非傾斜數(shù)據(jù)集標記模塊,用于將所述非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)復(fù)制為N個,得到擴容后的非傾斜數(shù)據(jù)集,根據(jù)所述鍵標記集合,為所述擴容后的非傾斜數(shù)據(jù)集中的每個數(shù)據(jù)的原始鍵分別添加一個鍵標記,得到處理后的非傾斜數(shù)據(jù)集;
分配模塊,用于按照預(yù)設(shè)的數(shù)據(jù)分配規(guī)則,將所述處理后的傾斜數(shù)據(jù)集以及所述處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理。
B9、根據(jù)B8所述的裝置,其中,所述處理后的傾斜數(shù)據(jù)集以及所述處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的鍵為該數(shù)據(jù)的原始鍵與該數(shù)據(jù)的鍵標記的組合;
則分配模塊具體用于:根據(jù)各個數(shù)據(jù)的鍵,將所述處理后的傾斜數(shù)據(jù)集以及所述處理后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)分配給多臺服務(wù)器進行分布式處理。
B10、根據(jù)B8或B9所述的裝置,其中,所述裝置進一步包括:
刪除模塊,用于從處理后的各個數(shù)據(jù)的鍵中刪除所述鍵標記,得到各個數(shù)據(jù)的原始鍵。
B11、根據(jù)B8-B10任一所述的裝置,其中,所述傾斜數(shù)據(jù)集標記模塊具體用于:
將所述鍵標記集合中的各個鍵標記依次添加到所述傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中;或者,
將所述鍵標記集合中的各個鍵標記隨機添加到所述傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。
B12、根據(jù)B8-B11任一所述的裝置,其中,所述非傾斜數(shù)據(jù)集標記模塊具體用于:
將所述鍵標記集合中的各個鍵標記依次添加到所述擴容后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中;或者,
將所述鍵標記集合中的各個鍵標記隨機添加到所述擴容后的非傾斜數(shù)據(jù)集中的各個數(shù)據(jù)的原始鍵中。
B13、根據(jù)B8-B12任一所述的裝置,其中,所述鍵標記包括:用于添加在原始鍵的起始位置的前綴型鍵標記,和/或,用于添加在原始鍵的末尾位置的后綴型鍵標記;
并且,所述鍵標記包括以下中的至少一種:單字符類鍵標記、字符串類鍵標記、以及數(shù)字類鍵標記。
B14、根據(jù)B8-B13任一所述的裝置,其中,當所述鍵標記為數(shù)字類鍵標記時,所述數(shù)據(jù)分配規(guī)則包括:對每個數(shù)據(jù)的鍵進行模運算,根據(jù)運算結(jié)果為該數(shù)據(jù)分配服務(wù)器;和/或,
當所述鍵標記為單字符類鍵標記和/或字符串類鍵標記時,所述數(shù)據(jù)分配規(guī)則包括:根據(jù)各個數(shù)據(jù)的鍵中包含的相同字符的個數(shù),對各個數(shù)據(jù)的鍵進行聚類處理,根據(jù)聚類處理的結(jié)果為各個數(shù)據(jù)分配服務(wù)器。