專利名稱::面向海量數(shù)據(jù)的分布式處理方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及海量數(shù)據(jù)的分布式處理
技術(shù)領(lǐng)域:
,尤其涉及一種面向以數(shù)組形式存儲的海量數(shù)據(jù)的分布式處理方法。
背景技術(shù):
:隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)產(chǎn)生的數(shù)據(jù)越來越多,如何存儲和處理這些海量數(shù)據(jù),是一個亟待解決的問題。MapReduce是由Google提出的分布式處理框架,用戶只要編寫“Map”和“Reduce”中的處理過程,MapReduce系統(tǒng)就可以使用戶實(shí)現(xiàn)對海量數(shù)據(jù)的分布式并行處理,并提供自動的任務(wù)容錯和負(fù)載均衡。結(jié)合Google的分布式文件系統(tǒng)(GFS),MapReduce可以充分利用數(shù)據(jù)的局部性,從而大大減少網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。Hadoop是MapReduce和GFS架構(gòu)的開源實(shí)現(xiàn),被Yahoo!、Facebook等許多公司使用。由于MapReduce框架的高效易用、可容錯和可擴(kuò)展,它被廣泛應(yīng)用于文檔聚類、機(jī)器學(xué)習(xí)、日志分析等應(yīng)用程序中。隨著儀器精度,數(shù)據(jù)采集和研究方法的快速發(fā)展,科學(xué)研究收集和生成的數(shù)據(jù)也越來越多。這些數(shù)據(jù)大多以數(shù)據(jù)的形式(如Net⑶F、HDF文件格式)存儲在網(wǎng)絡(luò)文件系統(tǒng)(NFS)和并行文件系統(tǒng)上,用戶可以編寫串行程序用單機(jī)進(jìn)行處理,但是顯然單機(jī)的處理能力無法應(yīng)對海量的科學(xué)數(shù)據(jù);用戶可以編寫MPI程序來進(jìn)行多機(jī)處理,但是MPI的調(diào)試、容錯和負(fù)載均衡使得完成一個簡單的處理程序都非常費(fèi)時費(fèi)力。MapReduce的分布式處理框架可以克服MPI多機(jī)處理的缺點(diǎn),但是MapReduce并行處理框架最初是針對Web數(shù)據(jù)而設(shè)計的,并不能簡單地應(yīng)用到以數(shù)組方式存儲的科學(xué)數(shù)據(jù)上。另外,科學(xué)家使用MapReduce框架處理數(shù)據(jù)的時候需要自己編寫相應(yīng)的MapReduce處理程序,雖然相比MPI多機(jī)程序,已經(jīng)減少了很多工作量,但還是有一定的學(xué)習(xí)門檻和工作量。Hive是架設(shè)于MapReduce之上的開源SQL引擎,提供數(shù)據(jù)查詢和分析功能。Hive能夠提供SQL語義,并將SQL語義轉(zhuǎn)化為MapReduce任務(wù)進(jìn)行執(zhí)行。但是Hive并不能直接應(yīng)用于科學(xué)數(shù)據(jù)處理,因?yàn)镠ive中的處理都是基于表的列和行進(jìn)行的,而以數(shù)組形式存儲的科學(xué)數(shù)據(jù)沒有表的列和行的概念。
發(fā)明內(nèi)容(一)要解決的技術(shù)問題本發(fā)明要解決的技術(shù)問題是如何設(shè)計一種對于以數(shù)組形式存儲的海量數(shù)據(jù)的分布式處理方法。(二)技術(shù)方案為解決上述技術(shù)問題,本發(fā)明提供了一種面向海量數(shù)據(jù)的分布式處理方法,包括以下步驟Sl根據(jù)SQL命令以及數(shù)組文件內(nèi)的變量信息計算輸出變量和條件變量集合中的主變量,如果主變量存在,執(zhí)行步驟S2,其中,所述數(shù)組文件是以數(shù)組形式存儲的數(shù)據(jù)文件;S2:判斷是否進(jìn)行條件變量的選擇優(yōu)化,如果否,那么在讀取數(shù)據(jù)時,遍歷數(shù)組文件中的主變量的整個索引范圍;如果是,那么先根據(jù)條件變量的選擇范圍計算輸出變量的維度范圍,并根據(jù)該維度范圍讀取數(shù)據(jù);S3判斷數(shù)組是否合并存儲,如果否,那么讀取數(shù)組組成數(shù)據(jù)元組;如果是,那么不展開讀取的數(shù)據(jù),且生成另一個數(shù)據(jù)元組,所生成的數(shù)據(jù)元組中每一個單元都包含該列對應(yīng)變量的數(shù)據(jù)值的集合;S4=SQL引擎根據(jù)SQL命令以及表中定義的各列的數(shù)據(jù)類型生成MapReduce任務(wù)接收到的數(shù)據(jù)元組,并生成結(jié)果數(shù)據(jù)元組;S5:對于生成的結(jié)果數(shù)據(jù)元組,判斷是否需要將其以數(shù)組文件存儲,如果否,那么就按照保存為其他文件格式的方法處理該結(jié)果數(shù)據(jù)元組;如果是,那么判斷結(jié)果數(shù)據(jù)元組中的數(shù)組是否被合并存儲,如果未被合并存儲,則遍歷結(jié)果數(shù)據(jù)的行,每一列生成一個變量的數(shù)組,并按照表中定義的列的數(shù)據(jù)類型將數(shù)組存儲到數(shù)組文件,如果已被合并存儲,那么將結(jié)果數(shù)據(jù)元組中每個單元的內(nèi)容取出作為一個變量數(shù)組,并按照表中定義的列的數(shù)據(jù)類型將數(shù)組存儲到數(shù)組文件。優(yōu)選地,步驟S3中,如果數(shù)據(jù)不進(jìn)行合并存儲,則所述數(shù)據(jù)元組的個數(shù)取決于主變量的維度范圍,每個數(shù)據(jù)元組包含輸出變量和條件變量在當(dāng)前主變量索引處的值。優(yōu)選地,所述海量數(shù)據(jù)包括多個所述數(shù)據(jù)文件。(三)有益效果本發(fā)明設(shè)計了一種基于MapReduce的、對于以數(shù)組形式存儲的海量數(shù)據(jù)的分布式處理方法,使得用戶可以使用SQL命令對以數(shù)組形式存儲的海量數(shù)據(jù)進(jìn)行分布式處理,該方法具有使用簡單、運(yùn)行高效,可容錯的特點(diǎn)。圖1為本發(fā)明實(shí)施例的方法流程圖2為多維數(shù)組到數(shù)據(jù)庫表的行和列的相互映射例示圖3為對條件變量進(jìn)行選擇優(yōu)化的例示圖4為在表格單元中合并數(shù)組存儲的例示圖。具體實(shí)施方式下面結(jié)合附圖和實(shí)施例,對本發(fā)明的具體實(shí)施方式作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。首先需要說明的是,由于以數(shù)組形式存儲的科學(xué)數(shù)據(jù)文件格式比較多,本發(fā)明實(shí)施例中以常用的Net⑶F文件格式為例。Net⑶F文件示例如下example1.nc文件中存儲了χ[x]、y[y]、time[time]、varl[time,y]、var2[time,y]、val3[time][y][x],6個變量,定義如下所示Netcdfexample1{dimensions:x=4;y=6;time=UNLIMITED;//(2currently)variables:intx(x);inty(y);doubletime(time);intvail(time,y);intval2(time,y);intval3(time,y,x);data:x=2,6,4,8;y=3,6,9,12,15,18;time=1000.0,1001.0;varl=l,2,3,4,5,6,7,8,9,10,ll,12;var2=2,4,6,8,10,12,14,16,18,20,22,24;var3=l,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48;}下面對本發(fā)明實(shí)施例中所用到的一些名詞進(jìn)行說明輸出變量指SQL查詢中select語句中作用到的變量;條件變量指SQL查詢中where語句中作用到并進(jìn)行條件判斷的變量;維度變量指變量名稱和維度名稱相同的變量,如X(X);主變量如果在一組變量中,其他變量都是某一變量a的維度變量或者是與該變量a每一個維度都相同的變量,則該變量a為主變量。例如變量集合{time(time),y(y),var1(time,y),var2(time,y)}ψ,var1(time,y)>var2(time,y)者Pi±$fi。量中,有可能不存在主變量,如{time(time),var1(time,y),var3(time,y,x)},因?yàn)関arl不是var3的維度變量且varl的維度和var3不同。下面結(jié)合圖1對本發(fā)明實(shí)施例的方法流程進(jìn)行詳細(xì)說明,該圖1也是圖2所示的數(shù)組和表的相互映射方法以及圖3所示的優(yōu)化方法在MapReduce和其SQL引擎系統(tǒng)實(shí)現(xiàn)的具體流程。本發(fā)明實(shí)施例的方法包括以下步驟Sl根據(jù)SQL命令以及數(shù)組文件內(nèi)的變量信息計算輸出變量和條件變量集合中的主變量,如果主變量不存在,那么返回SQL命令有誤的命令,并停止執(zhí)行本流程;否則執(zhí)行步驟S2。其中,所述數(shù)組文件是以數(shù)組形式存儲的數(shù)據(jù)文件。本發(fā)明中并行處理很多數(shù)據(jù)文件,所以稱為“海量數(shù)據(jù)”。S2:判斷是否進(jìn)行條件變量的選擇優(yōu)化,如果否,那么在讀取數(shù)據(jù)時,遍歷數(shù)組文件中的主變量的整個索引范圍;如果是,那么先根據(jù)條件變量的選擇范圍計算輸出變量的維度范圍,并根據(jù)該維度范圍讀取數(shù)據(jù)(而不是遍歷數(shù)組文件中的主變量的整個索引范圍)。S3判斷數(shù)組是否合并存儲,如果否,那么讀取數(shù)組組成數(shù)據(jù)元組(該數(shù)據(jù)元組的個數(shù)取決于主變量的維度范圍,每個數(shù)據(jù)元組包含輸出變量和條件變量在當(dāng)前主變量索引處的值);如果是,那么不展開讀取的數(shù)據(jù),且生成另一個數(shù)據(jù)元組,所生成的數(shù)據(jù)元組中每一個單元都包含該列對應(yīng)變量的數(shù)據(jù)值的集合。S4=SQL引擎根據(jù)SQL命令以及表(表包含兩個意思,一個是表的結(jié)構(gòu),另外一個是表的數(shù)據(jù),這里指表的結(jié)構(gòu))中定義的各列的數(shù)據(jù)類型來生成MapReduce任務(wù)接收到的數(shù)據(jù)元組,并生成結(jié)果數(shù)據(jù)元組;S5對于生成的結(jié)果數(shù)據(jù)元組,判斷是否需要將其以數(shù)組文件存儲。如果否,那么就按照保存為其他文件格式的方法處理該結(jié)果數(shù)據(jù)元組;如果是,那么判斷結(jié)果數(shù)據(jù)元組中的數(shù)組是否被合并存儲,如果未被合并存儲,則遍歷結(jié)果數(shù)據(jù)的行,每一列生成一個變量的數(shù)組,并按照表中定義的列的數(shù)據(jù)類型將數(shù)組存儲到數(shù)組文件,如果被合并存儲了,那么將結(jié)果數(shù)據(jù)元組中每個單元的內(nèi)容取出來作為一個變量數(shù)組,并按照表中定義的列的數(shù)據(jù)類型將數(shù)組存儲到數(shù)組文件。其中,給MapReduce的輸入數(shù)據(jù)和結(jié)果數(shù)據(jù)都是很多數(shù)據(jù)元組,一個數(shù)據(jù)元組對應(yīng)所述表中一行的數(shù)據(jù)。關(guān)于輸入文件格式、優(yōu)化方法、以及輸出文件格式的選擇,可以由用戶指定,也可由系統(tǒng)根據(jù)SQL命令和數(shù)據(jù)屬性自動判斷。由于要使用SQL命令來處理數(shù)據(jù),就必須把這些數(shù)據(jù)映射到數(shù)據(jù)庫表的行和列。圖2示出了多維數(shù)組到數(shù)據(jù)庫表的行和列的相互映射方法,這里的相互是指讀文件時,將數(shù)組轉(zhuǎn)化為行和列,寫結(jié)果文件時,將行和列轉(zhuǎn)化為數(shù)組,這里的相互映射是指從數(shù)組文件變成和數(shù)據(jù)庫表對應(yīng)的數(shù)據(jù)元組,經(jīng)過MapReduce處理后,再由數(shù)組元組變成數(shù)組文件的過程,包含在整個步驟SlS5中。在讀取輸入文件時,將多維數(shù)組按主變量展開,然后將其排列成數(shù)據(jù)庫表的行和列的方式,表中的列是對應(yīng)變量的單個值,表中的行是每個主變量和其維度變量的值。之后根據(jù)SQL語義的處理命令處理相應(yīng)的行和列,在將結(jié)果寫入輸出文件時,遍歷表的行,并將對應(yīng)的列轉(zhuǎn)化為數(shù)組進(jìn)行存儲。圖2所示的方法的缺點(diǎn)是對于數(shù)據(jù)的范圍查詢和處理,很有可能讀取和展開了不必要的數(shù)據(jù),圖2對條件變量進(jìn)行了選擇優(yōu)化,在讀取輸入文件時,先根據(jù)條件變量的查詢范圍條件計算對應(yīng)維度的范圍,然后根據(jù)維度的范圍讀取需要的變量。能這樣優(yōu)化的前提是條件變量的選擇的范圍是一段連續(xù)的范圍,不能是離散的或是多個連續(xù)范圍。一般來說這要求條件變量的值是遞增或遞減的。之后根據(jù)SQL語義的處理命令處理相應(yīng)的行和列,在將結(jié)果寫入輸出文件時,遍歷表的行,并將對應(yīng)的列轉(zhuǎn)化為數(shù)組進(jìn)行存儲。圖2,圖3所示的方法中會將變量展開,為了減少中間數(shù)據(jù)的大小,同時為了保留變量之間的維度關(guān)系,可以在表格單元中合并數(shù)組存儲。圖3示出了在圖2的基礎(chǔ)上進(jìn)行合并數(shù)組存儲。在讀取輸入文件時,先根據(jù)條件變量的查詢范圍條件計算對應(yīng)維度的范圍,然后根據(jù)維度的范圍讀取需要的變量,并將每個變量對應(yīng)到表的一列,為了避免變量展開后的數(shù)據(jù)膨脹,這里沒有按照主變量進(jìn)行展開,而是一行中每個單元的內(nèi)容包含該單元對應(yīng)變量的符合計算范圍的值的集合,之后根據(jù)SQL語義的處理命令,處理相應(yīng)的行和列。這樣優(yōu)化一般都是針對簡單的范圍抽取查詢,因?yàn)槌朔秶槿?,其他對合并存儲的變量處理,還是需要對其進(jìn)行展開。在將結(jié)果寫入輸出文件時,將每一行中的單元取出,由于一個單元中是對應(yīng)變量的值的集合,可以直接按照數(shù)組進(jìn)行存儲,最后變量之間的維度關(guān)系仍然能夠保留。下面介紹用戶使用本發(fā)明的方法對海量數(shù)據(jù)進(jìn)行分布式處理的操作流程由于以數(shù)組形式存儲的科學(xué)數(shù)據(jù)文件格式比較多,這里以比較常用的NetCDF文件格式為例。Net⑶F文件中,數(shù)據(jù)以數(shù)組的形式進(jìn)行存儲,比如Hadoop的HDFS文件系統(tǒng)上‘/user/yifeng/example‘下一個examplel.nc文件中存儲了x[x]、y[y]、time[time]、varl[time,y]、var2[time,y]、val3[time][y][x]6個變量。第一步要創(chuàng)建表來映射Net⑶F文件中的變量createtableexample(intχ,inty,doubletime,intvail,intval2,intval3)ROWFORMATSERDE'org.apache,hadoop.hive,contrib.serde2.NcFileSerDe'STOREDASINPUTF0RMAT'org.apache,hadoop.hive,contrib.fileformat.ηetcdf.NcFileInputFormat'0UTPUTF0RMAT'org.apache,hadoop.hive,contrib.fileformat.netcdf.NcFileOutputFormat'這里創(chuàng)建了一個表,表的名稱為example,其中包含6個變量和examplel.nc中變量類型和名稱是一致的。這里指定了SERDE為org.apache,hadoop.hive,contrib.serde2.NcFileSerDe,INPUTF0RMAT為org.apache,hadoop.hive,contrib.fileformat.netcdf.NcFiIeInputFormat,0UTPUTF0RMAT為org.apache,hadoop.hive,contrib.fileformat.netcdf.NcFiIeOutputFormat0SERDE是Hive中用來對數(shù)據(jù)進(jìn)行變換操作以及序列化和反序列化,INPUTF0RMAT是文件的Hive中文件的輸入格式,這里是以NetCDF文件格式輸入,0UTPUTF0RMAT是Hive中文件的輸出格式,這里以NetCDF文件格式輸出。用戶可以指定不同的INPUTF0RMAT和SERDE來選擇不同的優(yōu)化方法,系統(tǒng)也可以根據(jù)用戶的查詢和數(shù)據(jù)屬性來判斷。第二步是將整個數(shù)據(jù)集和表對應(yīng)起來LOADDATAINPATH‘/user/yifeng/example'OVERWRITEINTOTABLEexample;這樣Hadoop文件系統(tǒng)HDFS上/user/yifeng/example目錄下所有的Net⑶F文件都映射到這個表了,這里要求Net⑶F文件的結(jié)構(gòu)都和examplel.nc相同(包含相同的維度和變量),數(shù)據(jù)可以不同,由于大多數(shù)數(shù)據(jù)都是按照某一維度(如時間)分片存儲,所以能夠滿足結(jié)構(gòu)相同的要求。第三步是用戶輸入SQL命令,系統(tǒng)會根據(jù)SQL命令動態(tài)映射并對相關(guān)變量進(jìn)行數(shù)據(jù)處理并產(chǎn)生結(jié)果文件。下面舉例說明例1SQL命令為selecttime,varl,var2fromexamplewherey>=3andy<=9;(1)未進(jìn)行條件變量選擇優(yōu)化和數(shù)組合并存儲的情況NcFileInputi7Ormat從查詢命令中得知要使用3個變量time,y,varl,其中輸出變量為time,varl,y為條件變量,根據(jù)Net⑶F文件頭信息得知varl,var2為主變量,time,y都是varl和var2的維度變量。NcFileInputi7Ormat從Net⑶F文件中遍歷輸出數(shù)據(jù)元組{time,y,varl,var2},如第一個數(shù)據(jù)元組為{1000.0,3,1,2},數(shù)據(jù)元組的個數(shù)取決于主變量varl或var2的維度,這里為6x2=12,NcFileSerDe從NcFilehputFormat得知要使用的變量為time,y,varl,var2,并根據(jù)表中變量的類型來反序列化NcFilehputFormat輸出的數(shù)據(jù)元組{time為double類型,y為int類型,varl為int類型,var2為int類型},之后就交給Hive的SQL引擎去在執(zhí)行MapReduce任務(wù)了。MapReduce從12個數(shù)據(jù)元組中過濾出y>=3和y<=9的元組,共3x2個。0UTPUTF0RMAT將其寫到Net⑶F文件,結(jié)果如下Netcdfoutput1{dimensions:len=6;variables:time(len);varl(Ien);var2(Ien);data:time=1000.0,1000.0,1000.0,1001.0,1001.0,1001.0;varl=l,2,3,7,8,9;var2=2,4,6,14,16,18;}可以看到varl,var2和time之間的維度關(guān)系無法保留。(2)進(jìn)行條件變量選擇優(yōu)化和數(shù)組合并存儲的情況NcFileInputFormat從查詢命令中得知要使用3個變量time,y,varl,其中輸出變量為time,varl,y為條件變量,根據(jù)Net⑶F文件頭信息得知varl為主變量,time,y都是varl的維度變量。NcFilelnputi^rmat從根據(jù)判斷條件y>=3andy<=9得到varl,生成一個數(shù)組元組{[1000.0,1001.0],{[1,2,3,7,8,9],[2,3]},[2,4,6,14,16,18],3},varl中的[2,3]說明主變量varl(var2同varl)的time維度長度為2,y維度長度為3.Hive的SQL引擎生成MapReduce任務(wù)不會過濾該元組,因?yàn)閥=3符合y>=3andy<=9的條件,最后生成的Net⑶F文件如下Netcdfouptutl{dimensions:time=2;y=3;varl=6;variables:time(time);varl(time,y);var2(time,y)data:time=1000.0,1001.0;varl=l,2,3,7,8,9;var2=2,4,6,14,16,18;}可以看到varl,var2和time之間的維度關(guān)系仍然保留,并且傳輸?shù)臄?shù)據(jù)量和生成的文件大小比未進(jìn)行條件選擇優(yōu)化的方法要小。例2SQL命令為:selecttime,y,χ,var3,fromexamplewherey=6andx>=6andχ<=8;(1)未進(jìn)行條件選擇優(yōu)化和數(shù)組合并存儲的情況{time,y,x,var3}中主變量為var3.總的生成的數(shù)據(jù)元組為為2x6x4=48個,經(jīng)過過濾符合條件數(shù)據(jù)元組的共有=4個,具體如下{1000.0,6,6,6},{1000.0,6,8,8},{1001.0,6,6,30},{1001.0,6,8,32},最后生成的NetCDF文件如下Netcdfoutput1{dimensions:len=4;variables:time(len);y(Ien);x(len);var3(Ien);data:time=1000.0,1000.0,1001.0,1001.0;y=6,6,6,6;x=6,8,6,8;var3=6,8,30,32;(2)進(jìn)行條件選擇優(yōu)化的情況作為條件變量的χ變量的χ>=6andx>=8的選擇范圍[1,3]不是連續(xù)的,無法使用條件選擇優(yōu)化。由以上實(shí)施例可以看出,本發(fā)明設(shè)計了一種基于MapReduce的、對于以數(shù)組形式存儲的海量數(shù)據(jù)的分布式處理方法,使得用戶可以使用SQL命令對以數(shù)組形式存儲的海量數(shù)據(jù)進(jìn)行分布式處理,該方法具有使用簡單、運(yùn)行高效,可容錯的特點(diǎn)。以上所述僅是本發(fā)明的實(shí)施方式,應(yīng)當(dāng)指出,對于本
技術(shù)領(lǐng)域:
的普通技術(shù)人員來說,在不脫離本發(fā)明技術(shù)原理的前提下,還可以做出若干改進(jìn)和變型,這些改進(jìn)和變型也應(yīng)視為本發(fā)明的保護(hù)范圍。權(quán)利要求1.一種面向海量數(shù)據(jù)的分布式處理方法,其特征在于,包括以下步驟51根據(jù)SQL命令以及數(shù)組文件內(nèi)的變量信息計算輸出變量和條件變量集合中的主變量,如果主變量存在,執(zhí)行步驟S2,其中,所述數(shù)組文件是以數(shù)組形式存儲的數(shù)據(jù)文件;52判斷是否進(jìn)行條件變量的選擇優(yōu)化,如果否,那么在讀取數(shù)據(jù)時,遍歷數(shù)組文件中的主變量的整個索引范圍;如果是,那么先根據(jù)條件變量的選擇范圍計算輸出變量的維度范圍,并根據(jù)該維度范圍讀取數(shù)據(jù);53判斷數(shù)組是否合并存儲,如果否,那么讀取數(shù)組組成數(shù)據(jù)元組;如果是,那么不展開讀取的數(shù)據(jù),且生成另一個數(shù)據(jù)元組,所生成的數(shù)據(jù)元組中每一個單元都包含該列對應(yīng)變量的數(shù)據(jù)值的集合;54=SQL引擎根據(jù)SQL命令以及表中定義的各列的數(shù)據(jù)類型生成MapReduce任務(wù)接收到的數(shù)據(jù)元組,并生成結(jié)果數(shù)據(jù)元組;S5:對于生成的結(jié)果數(shù)據(jù)元組,判斷是否需要將其以數(shù)組文件存儲,如果否,那么就按照保存為其他文件格式的方法處理該結(jié)果數(shù)據(jù)元組;如果是,那么判斷結(jié)果數(shù)據(jù)元組中的數(shù)組是否被合并存儲,如果未被合并存儲,則遍歷結(jié)果數(shù)據(jù)的行,每一列生成一個變量的數(shù)組,并按照表中定義的列的數(shù)據(jù)類型將數(shù)組存儲到數(shù)組文件,如果已被合并存儲,那么將結(jié)果數(shù)據(jù)元組中每個單元的內(nèi)容取出作為一個變量數(shù)組,并按照表中定義的列的數(shù)據(jù)類型將數(shù)組存儲到數(shù)組文件。2.如權(quán)利要求1所述的方法,其特征在于,步驟S3中,如果數(shù)據(jù)不進(jìn)行合并存儲,則所述數(shù)據(jù)元組的個數(shù)取決于主變量的維度范圍,每個數(shù)據(jù)元組包含輸出變量和條件變量在當(dāng)前主變量索引處的值。3.如權(quán)利要求1或2所述的方法,其特征在于,所述海量數(shù)據(jù)包括多個所述數(shù)據(jù)文件。全文摘要本發(fā)明涉及海量數(shù)據(jù)的分布式處理
技術(shù)領(lǐng)域:
,公開了一種面向海量數(shù)據(jù)的分布式處理方法,包括以下步驟S1根據(jù)SQL命令以及數(shù)組文件內(nèi)的變量信息計算輸出變量和條件變量集合中的主變量,如果主變量存在,執(zhí)行S2;S2判斷是否進(jìn)行條件變量的選擇優(yōu)化;S3判斷數(shù)組是否合并存儲;S4SQL引擎根據(jù)SQL命令以及表中定義的各列的數(shù)據(jù)類型生成MapReduce任務(wù)接收到的數(shù)據(jù)元組,并生成結(jié)果數(shù)據(jù)元組;S5對于生成的結(jié)果數(shù)據(jù)元組,判斷是否需要將其以數(shù)組文件存儲。本發(fā)明設(shè)計了一種基于MapReduce的、對于以數(shù)組形式存儲的海量數(shù)據(jù)的分布式處理方法,使得用戶可以使用SQL命令對以數(shù)組形式存儲的海量數(shù)據(jù)進(jìn)行分布式處理,該方法具有使用簡單、運(yùn)行高效,可容錯的特點(diǎn)。文檔編號G06F17/30GK102521367SQ201110424530公開日2012年6月27日申請日期2011年12月16日優(yōu)先權(quán)日2011年12月16日發(fā)明者楊廣文,耿益鋒,黃小猛申請人:清華大學(xué)