本發(fā)明屬于大數(shù)據(jù)處理,涉及地球物理勘探領(lǐng)域中地震數(shù)據(jù)的處理,具體地說是一種海量地震數(shù)據(jù)的索引構(gòu)建方法、索引庫(kù)及查詢方法。
背景技術(shù):
1、地震數(shù)據(jù)處理是石油勘探行業(yè)中的重要技術(shù),其作用是能夠根據(jù)特定的處理算法對(duì)野外采集的地震數(shù)據(jù)進(jìn)行處理和計(jì)算,從而得出地下地質(zhì)結(jié)構(gòu)的圖像,用于指導(dǎo)后續(xù)的鉆井、石油開采等工作。
2、隨著新的勘探技術(shù)和高精度的采集技術(shù)在石油勘探中不斷應(yīng)用,從野外采集到的原始地震數(shù)據(jù)量增長(zhǎng)迅速,目前單一工區(qū)采集的原始地震數(shù)據(jù)量有的已經(jīng)超過pb級(jí)別,其地震道數(shù)可達(dá)千億條。地震道由道頭和道體兩部分組成。其中道頭中存儲(chǔ)了與該地震道相關(guān)的屬性信息,包括:炮點(diǎn)坐標(biāo)、檢波點(diǎn)坐標(biāo)、采樣點(diǎn)數(shù)、炮號(hào)、道號(hào)等信息,每個(gè)屬性稱為一個(gè)道頭關(guān)鍵字;道體是一個(gè)浮點(diǎn)數(shù)組,每一個(gè)浮點(diǎn)數(shù)稱為一個(gè)采樣點(diǎn)。同時(shí)地震數(shù)據(jù)體是高維度結(jié)構(gòu)化的數(shù)據(jù),每個(gè)地震道都擁有上百種屬性信息,存放在不同的道頭關(guān)鍵字中。
3、然而,交互式地震應(yīng)用程序在訪問地震數(shù)據(jù)體時(shí),通常只對(duì)該地震數(shù)據(jù)體的部分?jǐn)?shù)據(jù)集感興趣。因此,為了提升交互式地震應(yīng)用程序在訪問地震數(shù)據(jù)體時(shí)獲取數(shù)據(jù)道集信息的多樣性及響應(yīng)時(shí)間,通常需要對(duì)pb級(jí)海量地震數(shù)據(jù)進(jìn)行地震數(shù)據(jù)處理。
4、目前地震數(shù)據(jù)處理過程中,訪問地震數(shù)據(jù)索引關(guān)鍵字信息所采用的索引結(jié)構(gòu)主要以多級(jí)關(guān)聯(lián)表的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),主要包括:索引文件、兩級(jí)索引文件和多級(jí)關(guān)鍵字信息文件,各級(jí)數(shù)據(jù)表獨(dú)立存儲(chǔ)于磁盤上。
5、關(guān)鍵字信息表的創(chuàng)建方式分為兩種:
6、第一種是單節(jié)點(diǎn)多線程方式,在程序讀取所有的道頭后,將需要構(gòu)建索引的關(guān)鍵字提取出來并生成索引記錄緩存在內(nèi)存中,隨后利用tbb庫(kù)的多線程將這些記錄并行排序,以多級(jí)數(shù)據(jù)表的形式輸出到存儲(chǔ)設(shè)備上。由于這種方法最多只能使用10個(gè)線程,不適合在地震數(shù)據(jù)量比較大的時(shí)候使用;
7、另一種方式是在mapreduce并行編程框架的基礎(chǔ)上進(jìn)行索引生成和分段排序,生成多個(gè)有序索引文件,最后在主節(jié)點(diǎn)上將所有的輸出結(jié)果進(jìn)行物理合并后得到索引數(shù)據(jù)表。但是這種方法為保證索引數(shù)據(jù)表物理有序,在最終階段需要將reduce階段生成的所有輸出結(jié)果集中到主節(jié)點(diǎn)上進(jìn)行讀取、排序與合并,使合并耗時(shí)會(huì)隨著地震數(shù)據(jù)量的增多而大幅增加。
技術(shù)實(shí)現(xiàn)思路
1、為解決現(xiàn)有技術(shù)中存在的以上不足,本發(fā)明提供了一種海量地震數(shù)據(jù)的索引構(gòu)建方法、索引庫(kù)及查詢方法,其中公開的海量地震數(shù)據(jù)的索引構(gòu)建方法旨在提升海量地震數(shù)據(jù)索引的構(gòu)建效率。
2、為實(shí)現(xiàn)上述目的,本發(fā)明所采用的技術(shù)方案如下:一種海量地震數(shù)據(jù)的索引構(gòu)建方法,該方法基于mapreduce并行編程框架來實(shí)現(xiàn),具體包括以下步驟:
3、s1、解析作業(yè)參數(shù):對(duì)后續(xù)mapreduce作業(yè)運(yùn)行過程中所需要用到的作業(yè)參數(shù)進(jìn)行設(shè)置;
4、s2、構(gòu)建數(shù)據(jù)索引分析文件:基于步驟s1中獲取到的作業(yè)參數(shù),啟動(dòng)mapreduce作業(yè)并控制作業(yè)流程,統(tǒng)計(jì)索引第一關(guān)鍵字從小到大的值及對(duì)應(yīng)的道數(shù)信息,生成數(shù)據(jù)索引分析文件;
5、s3、構(gòu)建數(shù)據(jù)索引文件:同樣是基于步驟s1中獲取到的作業(yè)參數(shù),啟動(dòng)mapreduce作業(yè)并控制作業(yè)流程,在map階段統(tǒng)計(jì)所有索引關(guān)鍵字及對(duì)應(yīng)的道數(shù)信息,在map分區(qū)階段將所有索引關(guān)鍵字有序排列,并通過讀取步驟s2生成的數(shù)據(jù)索引分析文件將所有索引關(guān)鍵字及對(duì)應(yīng)的道數(shù)信息有序分配給reducer進(jìn)程,在reduce階段,每個(gè)reducer進(jìn)程將接收到的數(shù)據(jù)排序后直接輸出生成多級(jí)關(guān)聯(lián)表形式的索引文件。
6、作為本發(fā)明的限定,步驟s1包括:獲取用戶所提供的地震數(shù)據(jù)信息;獲取創(chuàng)建索引所需要的關(guān)鍵字信息;獲取hosts文件;獲取reduce進(jìn)程個(gè)數(shù);獲取臨時(shí)文件存儲(chǔ)路徑。
7、作為本發(fā)明的進(jìn)一步限定,步驟s2包括:
8、s2.1、起始階段:將地震數(shù)據(jù)的道頭拆分為多個(gè)map任務(wù),并動(dòng)態(tài)地分配到各個(gè)mapper進(jìn)程中;
9、s2.2、map階段:每個(gè)mapper進(jìn)程對(duì)該map任務(wù)中獲取的數(shù)據(jù)塊信息進(jìn)行讀取,每次讀取一道道頭數(shù)據(jù),并提取出該道道頭中的索引第一關(guān)鍵字形成key,從存儲(chǔ)讀取對(duì)應(yīng)的數(shù)據(jù)道形成value,存入key/value對(duì)中;
10、s2.3、map分區(qū)階段:調(diào)用劃分函數(shù)getpartition得到key值相對(duì)應(yīng)的reducer進(jìn)程編號(hào),以此將key/value對(duì)均勻地分區(qū)并分配給對(duì)應(yīng)的reduce任務(wù),每個(gè)分區(qū)內(nèi)會(huì)調(diào)用比較函數(shù)類對(duì)key值按照從小到大進(jìn)行排序,最終輸出到每個(gè)mapper進(jìn)程所在節(jié)點(diǎn)的本地存儲(chǔ)介質(zhì)上;
11、s2.4、reduce階段:當(dāng)reducer進(jìn)程接收到所有映射到該reducer進(jìn)程的map輸出后,會(huì)調(diào)用key比較函數(shù)類對(duì)映射到該reducer進(jìn)程的所有數(shù)據(jù)排序,并將相同key對(duì)應(yīng)的所有value存放在一起;在最后的reduce任務(wù)中,將該reducer進(jìn)程中相同key的所有value進(jìn)行累加,即可獲取各個(gè)索引第一關(guān)鍵字所對(duì)應(yīng)的道數(shù)信息;
12、s2.5、輸出階段:讀取每個(gè)reducer進(jìn)程的輸出結(jié)果,按索引第一關(guān)鍵字從小到大進(jìn)行排序后,再將所有文件匯總成一個(gè)數(shù)據(jù)索引分析文件,最終輸出到存儲(chǔ)設(shè)備。
13、作為本發(fā)明的更進(jìn)一步限定,步驟s2.1中按照每個(gè)map任務(wù)處理4096mb的數(shù)據(jù)量,對(duì)地震數(shù)據(jù)的道頭進(jìn)行分塊,并計(jì)算每個(gè)數(shù)據(jù)塊需要讀取的地震數(shù)據(jù)范圍。
14、作為本發(fā)明的更進(jìn)一步限定,步驟s3包括:
15、s3.1、起始階段:將地震數(shù)據(jù)的道頭拆分為多個(gè)map任務(wù),并動(dòng)態(tài)地分配到各個(gè)mapper進(jìn)程中;
16、s3.2、map階段:每個(gè)mapper進(jìn)程對(duì)獲取的數(shù)據(jù)塊信息進(jìn)行讀取,每次讀取一道道頭數(shù)據(jù),并依次提取出該道道頭中的所有索引關(guān)鍵字形成key,從存儲(chǔ)讀取對(duì)應(yīng)的數(shù)據(jù)道形成value,存入key/value對(duì)中;
17、s3.3、map分區(qū)階段:首先重寫比較函數(shù)類,并利用重寫后的比較函數(shù)類將所有索引關(guān)鍵字有序排列;再重寫劃分函數(shù)getpartition,通過讀取步驟s2生成的所述數(shù)據(jù)索引分析文件,并利用重寫后的劃分函數(shù)getpartition將所有索引關(guān)鍵字及對(duì)應(yīng)的道數(shù)信息有序分配給reducer進(jìn)程;
18、s3.4、reduce階段:當(dāng)reducer進(jìn)程接收到所有映射到該reducer進(jìn)程的map輸出后,會(huì)將這些數(shù)據(jù)排序后直接在存儲(chǔ)設(shè)備上輸出多級(jí)關(guān)聯(lián)表形式的索引文件。
19、作為本發(fā)明的再更進(jìn)一步限定,步驟s3.3中,重寫比較函數(shù)類后需要將所有索引關(guān)鍵字依次解析出來進(jìn)行比較,具體為:
20、先將索引第一關(guān)鍵字按從小到大進(jìn)行排序,如果索引第一關(guān)鍵字相等就繼續(xù)比較下一個(gè)索引關(guān)鍵字,以此類推;如果兩道的各個(gè)索引關(guān)鍵字相對(duì),則比較道位置信息,直到將所有索引關(guān)鍵字有序排列。
21、作為本發(fā)明的又再更進(jìn)一步限定,步驟s3.3中,利用重寫后的劃分函數(shù)getpartition進(jìn)行分區(qū)的具體方式為:
22、由key得到索引第一關(guān)鍵字key1,將key1分成numpartitions個(gè)組,分組的個(gè)數(shù)與reducer進(jìn)程個(gè)數(shù)相同;
23、讀取步驟s2生成的所述數(shù)據(jù)索引分析文件,累加每個(gè)索引第一關(guān)鍵字的道數(shù)信息得到數(shù)據(jù)的總道數(shù);根據(jù)平均分配原則,用總道數(shù)除以reducer進(jìn)程個(gè)數(shù)以此獲取每個(gè)reducer進(jìn)程需要處理的道數(shù)信息;
24、根據(jù)每個(gè)reduce任務(wù)需要處理的道數(shù)信息,依次將numpartition0分組文件中key1對(duì)應(yīng)的道數(shù)逐行累加,當(dāng)小于reduce0任務(wù)需要處理的道數(shù)時(shí),將key1對(duì)應(yīng)的所有value劃分到reduce0任務(wù)中,當(dāng)大于reduce0任務(wù)需要處理的道數(shù)時(shí),將對(duì)應(yīng)的多余value劃分到reduce1任務(wù)中;之后將所述多余value的道數(shù),與numpartition1分組文件中key1對(duì)應(yīng)的道數(shù)逐行累加,當(dāng)小于reduce1任務(wù)需要處理的道數(shù)時(shí),將key1對(duì)應(yīng)的所有value劃分到reduce1任務(wù)中,當(dāng)大于reduce1任務(wù)需要處理的道數(shù)時(shí),將對(duì)應(yīng)的多余value劃分到reduce2任務(wù)中;以此類推,直到獲取每個(gè)索引第一關(guān)鍵字的值對(duì)應(yīng)到的reduce進(jìn)程編號(hào);
25、最終將數(shù)據(jù)輸出到每個(gè)mapper進(jìn)程所在節(jié)點(diǎn)的本地存儲(chǔ)介質(zhì)上。
26、本發(fā)明還公開了一種海量地震數(shù)據(jù)索引庫(kù),由如上所述的海量地震數(shù)據(jù)的索引構(gòu)建方法所創(chuàng)建,包括:
27、索引文件,存放當(dāng)前reducer進(jìn)程處理的地震數(shù)據(jù)道數(shù)、所有索引關(guān)鍵字及類型;
28、第一關(guān)鍵字索引文件,存放索引第一關(guān)鍵字的值、對(duì)應(yīng)的地震道數(shù)量以及在其他關(guān)鍵字索引文件中的位置;
29、其他關(guān)鍵字索引文件,存放其他索引關(guān)鍵字的值以及對(duì)應(yīng)的地震道編號(hào);
30、多級(jí)關(guān)鍵字信息文件,文件個(gè)數(shù)為索引關(guān)鍵字個(gè)數(shù)減一,存放當(dāng)前索引關(guān)鍵字的值、包含下一級(jí)索引關(guān)鍵字的最小值、包含下一級(jí)索引關(guān)鍵字的最大值、包含下一級(jí)索引關(guān)鍵字的數(shù)量以及該索引關(guān)鍵字在下一級(jí)索引關(guān)鍵字信息文件中的位置。
31、作為本發(fā)明的限定,還包括總索引文件,存放地震數(shù)據(jù)總道數(shù)、所有索引關(guān)鍵字及類型、使用海量地震數(shù)據(jù)的索引構(gòu)建方法創(chuàng)建索引庫(kù)的標(biāo)志以及reducer進(jìn)程個(gè)數(shù)。
32、本發(fā)明還公開了一種海量地震數(shù)據(jù)的查詢方法,基于海量地震數(shù)據(jù)索引庫(kù),首先通過讀取總索引文件獲取reduce的進(jìn)程數(shù)量,然后根據(jù)需要查詢的各級(jí)索引關(guān)鍵字信息到相應(yīng)的reducenum個(gè)索引文件中進(jìn)行查找;
33、所述海量地震數(shù)據(jù)索引庫(kù)由如上所述的海量地震數(shù)據(jù)的索引構(gòu)建方法所創(chuàng)建。
34、作為本發(fā)明的限定,當(dāng)需要查詢索引關(guān)鍵字key1~keyn范圍的地震數(shù)據(jù)時(shí),到第一關(guān)鍵字索引文件、其他關(guān)鍵字索引文件中進(jìn)行查詢,包括以下步驟:
35、a1、根據(jù)獲取到的reduce進(jìn)程數(shù)量,通過查詢第一關(guān)鍵字索引文件找到符合key1條件的索引項(xiàng);
36、a2、根據(jù)查詢到的key1所對(duì)應(yīng)的索引表位置,定位到其他關(guān)鍵字索引文件中讀取該位置對(duì)應(yīng)的索引數(shù)據(jù);
37、a3、依次按reduce進(jìn)程編號(hào)的順序繼續(xù)讀取其他關(guān)鍵字索引文件,直到依次篩選出符合key2~keyn條件的全部索引項(xiàng);
38、a4、根據(jù)索引項(xiàng)中所存的地震道編號(hào)讀取到對(duì)應(yīng)的地震道數(shù)據(jù)。
39、作為本發(fā)明的另一種限定,當(dāng)需要查詢索引關(guān)鍵字信息時(shí),到多級(jí)關(guān)鍵字信息文件中進(jìn)行查詢,具體為:
40、先依次在所有reducenum個(gè)第一級(jí)關(guān)鍵字信息文件中查詢符合條件的關(guān)鍵字信息,再根據(jù)查詢到的在下一級(jí)關(guān)鍵字信息文件中對(duì)應(yīng)的位置,到第二級(jí)關(guān)鍵字信息文件中進(jìn)行讀取,以此類推,直到得到所需的索引關(guān)鍵字信息。
41、由于采用了上述的技術(shù)方案,本發(fā)明與現(xiàn)有技術(shù)相比,所取得的有益效果是:
42、本發(fā)明公開的海量地震數(shù)據(jù)的索引構(gòu)建方法依賴于mapreduce并行編程框架,其最大創(chuàng)新點(diǎn)在于對(duì)海量地震數(shù)據(jù)執(zhí)行了兩次mapreduce作業(yè),并選擇在最終階段不將所有輸出結(jié)果集中到主節(jié)點(diǎn)上進(jìn)行讀取、排序與合并,解決了合并耗時(shí)隨地震數(shù)據(jù)量增多而大幅增加的問題,有效提高了pb級(jí)海量地震數(shù)據(jù)創(chuàng)建索引的效率。
43、具體的,第一次mapreduce作業(yè)旨在創(chuàng)建數(shù)據(jù)索引分析文件,該文件只對(duì)索引第一關(guān)鍵字從小到大的值及對(duì)應(yīng)的道數(shù)信息進(jìn)行統(tǒng)計(jì),在后續(xù)第二次mapreduce作業(yè)的map分區(qū)階段,通過讀取該文件進(jìn)行關(guān)鍵字-節(jié)點(diǎn)分配,使分配到每個(gè)reducer進(jìn)程的數(shù)據(jù)是有序的;
44、第二次mapreduce作業(yè)旨在創(chuàng)建數(shù)據(jù)索引文件(即針對(duì)海量地震數(shù)據(jù)創(chuàng)建的索引),該文件統(tǒng)計(jì)所有索引關(guān)鍵字及對(duì)應(yīng)的道數(shù)信息,由于分配到每個(gè)reducer進(jìn)程的數(shù)據(jù)是有序的,每個(gè)reducer進(jìn)程分別輸出多級(jí)數(shù)據(jù)表形式的索引文件后,得到的也是整體有序的排序結(jié)果,因此無需再將所有結(jié)果集中到主節(jié)點(diǎn)上進(jìn)行讀取、排序與合并,直接輸出至存儲(chǔ)設(shè)備上即可。