本發(fā)明屬于數(shù)據(jù)處理,具體是一種分布式數(shù)據(jù)庫(kù)數(shù)據(jù)傾斜預(yù)檢查方法。
背景技術(shù):
1、數(shù)據(jù)傾斜是分布式計(jì)算和大數(shù)據(jù)處理中的一個(gè)常見問題,在分布式集群環(huán)境中都可能發(fā)生。它指的是在數(shù)據(jù)處理過程中,某些數(shù)據(jù)項(xiàng)或數(shù)據(jù)分組異常地集中于某些數(shù)據(jù)節(jié)點(diǎn),而其他數(shù)據(jù)節(jié)點(diǎn)處理的數(shù)據(jù)量相對(duì)較少。目前數(shù)據(jù)分布的處理方式為:使用分布列,一類數(shù)據(jù)分布到一起。這樣就要求盡量使用離散的數(shù)據(jù)作為分布列,如果分布列中的數(shù)據(jù)不離散就會(huì)造成數(shù)據(jù)傾斜的情況
2、目前數(shù)據(jù)傾斜的解決方案,都是在數(shù)據(jù)傾斜問題出現(xiàn)后,才著手進(jìn)行解決。由此帶來許多不良影響:磁盤空間利用率低;部分節(jié)點(diǎn)可能因?yàn)樘幚磉^多的數(shù)據(jù)而耗盡資源,而其他節(jié)點(diǎn)則相對(duì)空閑;cpu和內(nèi)存利用率低、任務(wù)執(zhí)行緩慢;由于某些節(jié)點(diǎn)處理的數(shù)據(jù)量過大,整體任務(wù)執(zhí)行時(shí)間被拉長(zhǎng),導(dǎo)致系統(tǒng)不穩(wěn)定;長(zhǎng)期的數(shù)據(jù)傾斜可能導(dǎo)致系統(tǒng)崩潰或內(nèi)存溢出等問題。
3、現(xiàn)有的解決方案需要一遍一遍的重新找分布列、建表、導(dǎo)數(shù)據(jù)、判斷數(shù)據(jù)是否傾斜,這樣不僅會(huì)花費(fèi)大量時(shí)間,人力,而且會(huì)導(dǎo)致系統(tǒng)不穩(wěn)定,影響正常業(yè)務(wù)的進(jìn)行。且若最后原始表中的所有字段都作為分布列,數(shù)據(jù)依舊傾斜,則無法解決數(shù)據(jù)傾斜的問題
技術(shù)實(shí)現(xiàn)思路
1、鑒于上述問題,提出了本發(fā)明以便提供克服上述問題或者至少部分地解決上述問題的一種分布式數(shù)據(jù)庫(kù)數(shù)據(jù)傾斜預(yù)檢查方法。
2、為實(shí)現(xiàn)上述目的,本發(fā)明采用了如下技術(shù)方案:
3、一種分布式數(shù)據(jù)庫(kù)數(shù)據(jù)傾斜預(yù)檢查方法,所述方法包括如下步驟:
4、s1、按照不同數(shù)據(jù)列對(duì)數(shù)據(jù)進(jìn)行分組;
5、s2、將分組后重復(fù)數(shù)據(jù)個(gè)數(shù)最多的數(shù)據(jù)列作為排序字段;
6、s3、獲取當(dāng)前分布式集群中數(shù)據(jù)節(jié)點(diǎn)的個(gè)數(shù);
7、s4、在數(shù)據(jù)表中添加兩個(gè)新的數(shù)據(jù)列;
8、s5、將數(shù)據(jù)分配到各個(gè)數(shù)據(jù)節(jié)點(diǎn)。
9、可選的,步驟s1中使用sql的group?by進(jìn)行分組,并對(duì)每組數(shù)據(jù)進(jìn)行統(tǒng)計(jì)計(jì)算,找出重復(fù)項(xiàng)最多的值。
10、可選的,步驟s2包括:
11、找到值重復(fù)的數(shù)據(jù)量最多的字段為第一個(gè)排序字段;
12、除第一個(gè)排序字段以外,在剩余的字段里找到值重復(fù)的數(shù)據(jù)量最多的字段,作為第二個(gè)排序字段。
13、可選的,如果剩余的字段里值重復(fù)的數(shù)據(jù)量最多的字段一樣,則選值重復(fù)的數(shù)據(jù)量次多的字段的進(jìn)行比對(duì);如果剩余的字段里值重復(fù)的數(shù)據(jù)量次多的字段也一樣,則根據(jù)字段總體所占用的空間進(jìn)行判斷,占用空間大的,字段排序靠前。
14、可選的,步驟s4包括:
15、在數(shù)據(jù)表中添加新的一列,該列的值為無重復(fù)的正整數(shù);
16、在數(shù)據(jù)表中再添加新的一列,該列的值為數(shù)值型唯一鍵的數(shù)據(jù)節(jié)點(diǎn)個(gè)數(shù)。
17、可選的,所述數(shù)據(jù)節(jié)點(diǎn)個(gè)數(shù)為均勻分布的0-9之間的數(shù)值。
18、綜上所述,由于采用了上述技術(shù)方案,本發(fā)明的有益效果是:
19、本發(fā)明在數(shù)據(jù)傾斜問題還未出現(xiàn)前,在數(shù)據(jù)表設(shè)計(jì)之初,通過增加數(shù)值型唯一鍵(id)列,數(shù)值型唯一鍵除以數(shù)據(jù)節(jié)點(diǎn)數(shù)取余(dn)列,從而使數(shù)據(jù)表中數(shù)據(jù)達(dá)到均勻分布目的,從而從根本上杜絕數(shù)據(jù)傾斜問題的產(chǎn)生;這樣在操作上僅僅是在數(shù)據(jù)表中增加兩列,不僅操作起來更加簡(jiǎn)單、明了,而且工作量小,且不會(huì)出現(xiàn)一系列后續(xù)影響,能夠從根本上解決數(shù)據(jù)傾斜問題。
1.一種分布式數(shù)據(jù)庫(kù)數(shù)據(jù)傾斜預(yù)檢查方法,其特征在于,所述方法包括如下步驟:
2.如權(quán)利要求1所述的一種分布式數(shù)據(jù)庫(kù)數(shù)據(jù)傾斜預(yù)檢查方法,其特征在于,步驟s1中使用sql的group?by進(jìn)行分組,并對(duì)每組數(shù)據(jù)進(jìn)行統(tǒng)計(jì)計(jì)算,找出重復(fù)項(xiàng)最多的值。
3.如權(quán)利要求1所述的一種分布式數(shù)據(jù)庫(kù)數(shù)據(jù)傾斜預(yù)檢查方法,其特征在于,步驟s2包括:
4.如權(quán)利要求3所述的一種分布式數(shù)據(jù)庫(kù)數(shù)據(jù)傾斜預(yù)檢查方法,其特征在于,如果剩余的字段里值重復(fù)的數(shù)據(jù)量最多的字段一樣,則選值重復(fù)的數(shù)據(jù)量次多的字段的進(jìn)行比對(duì);如果剩余的字段里值重復(fù)的數(shù)據(jù)量次多的字段也一樣,則根據(jù)字段總體所占用的空間進(jìn)行判斷,占用空間大的,字段排序靠前。
5.如權(quán)利要求1所述的一種分布式數(shù)據(jù)庫(kù)數(shù)據(jù)傾斜預(yù)檢查方法,其特征在于,步驟s4包括:
6.如權(quán)利要求5所述的一種分布式數(shù)據(jù)庫(kù)數(shù)據(jù)傾斜預(yù)檢查方法,其特征在于,所述數(shù)據(jù)節(jié)點(diǎn)個(gè)數(shù)為均勻分布的0-9之間的數(shù)值。