專利名稱:一種實現(xiàn)大數(shù)據(jù)實時處理的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機應(yīng)用系統(tǒng)領(lǐng)域,具體涉及ー種涉及海量數(shù)據(jù)實時處理的方法。
背景技術(shù):
隨著信息化的發(fā)展,企業(yè)要處理的數(shù)據(jù)爆炸式的增長,數(shù)據(jù)量都達到了 TB級,PB級,由此帶來了一系列的問題。數(shù)據(jù)量的增多,系統(tǒng)的負載越來越大,數(shù)據(jù)的入庫和查詢性能隨之下降。在不增加硬件成本的情況下,如何發(fā)揮系統(tǒng)的最大性能,使入庫,查詢速度最快,是許多企業(yè)面臨的難題。云計算的出現(xiàn)為海量數(shù)據(jù)處理提供了有效地解決途徑,在通常的云計算解決方案中,通過Hadoop (—種分布式系統(tǒng)基礎(chǔ)架構(gòu))的HDFS (—種分布式文件系統(tǒng))可以方便的實現(xiàn)海量數(shù)據(jù)存儲,同時有效防止單點故障,避免不必要的損失。但是,在HDFS上進行數(shù)據(jù)檢索時,常用的方法是開啟全局捜索MapReduce (大規(guī)模數(shù)據(jù)并行運算),這需要完整過濾一遍·HDFS上存儲的所有數(shù)據(jù)。在云計算中,尤其是在海量數(shù)據(jù)情況下,這樣做會對系統(tǒng)資源造成巨大的浪費,耗費大量的時間,這顯然不是一個適合投入現(xiàn)實生產(chǎn)環(huán)境的方式。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服現(xiàn)有云計算解決方案中常用數(shù)據(jù)處理方法會造成系統(tǒng)資源浪費,數(shù)據(jù)處理時間長的缺點,提供一種有效的海量數(shù)據(jù)實時處理方法。本發(fā)明的實現(xiàn)大數(shù)據(jù)實時處理方法,其數(shù)據(jù)的入庫,查詢,傳輸都是并發(fā)的,實時的
(1)實時入庫以現(xiàn)有的HDFS為基礎(chǔ),在每臺datanode(數(shù)據(jù)節(jié)點)上啟動多線程創(chuàng)建索引,并行創(chuàng)建索引文件,索引的創(chuàng)建以B+樹的結(jié)構(gòu)生成;
(2)實時查詢使用分布式計算系統(tǒng),在服務(wù)器端創(chuàng)建并提交job(任務(wù))進行查詢,查詢分為三步
A.namenode (控制節(jié)點)上進行索引過濾,由于索引文件名是按照時間創(chuàng)建的,根據(jù)查詢條件中的時間和索引文件名匹配,篩選滿足條件的索引文件;
B.將任務(wù)分發(fā)到每臺datanode上,根據(jù)篩選出的索引文件和查詢條件通過B+樹查詢,得到滿足條件的數(shù)據(jù)的位置;
C.再次進行任務(wù)的分發(fā),根據(jù)上一歩得到的數(shù)據(jù)的位置在每臺機器上讀取數(shù)據(jù),并返回查詢結(jié)果;
(3)實時結(jié)果傳輸使用jetty(—個開源的servlet容器)作為web容器,在HDFS上做數(shù)據(jù)查詢的同吋,jetty輪循查詢結(jié)果目錄,如果不為空,則讀取查詢結(jié)果文件并返回給客戶端,客戶端繼續(xù)向服務(wù)器端發(fā)送continue (繼續(xù))請求,服務(wù)器端啟動多線程讀取查詢結(jié)果,將讀取數(shù)據(jù)返回給客戶端,如果返回的讀取數(shù)據(jù)為空,流程結(jié)束,如果不為空,客戶端繼續(xù)發(fā)送continue請求;查詢過程中,任何datanode查詢成功,即向客戶端返回數(shù)據(jù),不需要所有datanode查詢完成。
本發(fā)明的大數(shù)據(jù)實時處理方法中,數(shù)據(jù)的入庫,查詢,傳輸都是并發(fā)的,實時的。在創(chuàng)建任務(wù)的同時,進行過濾索引,過濾索引的同時,將過濾完的索引文件分發(fā)到datanode上面,同時datanode完成本地文件的查詢,并向客戶端返回數(shù)據(jù)。任何datanode的查詢完成,即向用戶返回查詢結(jié)果。本發(fā)明方法處理過程都是并發(fā)執(zhí)行的,最大限度的利用了計算機的硬件設(shè)備,高效B+結(jié)構(gòu)和查詢的并行執(zhí)行,使查詢達到了實時完成,極大地提高了查詢的效率,用戶執(zhí)行查詢操作時便能獲得查詢結(jié)果。
圖I是基于B+樹的字段索引不意 圖2是jetty的查詢流程 圖3是數(shù)據(jù)的查詢傳輸流程圖。
具體實施例方式下面結(jié)合附圖對本發(fā)明的技術(shù)方案進行詳細說明
本發(fā)明的所有處理都是并發(fā)執(zhí)行的,最大限度的利用了計算機的硬件設(shè)備,極大地提高了處理效率。使用戶執(zhí)行查詢操作時便能獲得查詢結(jié)果。本發(fā)明包括數(shù)據(jù)的實時入庫,實時查詢,實時結(jié)果傳輸,數(shù)據(jù)的入庫,查詢,傳輸都 是并發(fā)的,實時的。I.實時入庫
以現(xiàn)有的HDFS為基礎(chǔ),在每臺datanode上啟動多線程創(chuàng)建索引,并行創(chuàng)建索引文件。索引的創(chuàng)建方式如圖I所示
對ー些重要字段建立索引,以B+樹的結(jié)構(gòu)生成,每一條新的記錄只需要插入到B+樹中。B+樹的插入僅在葉結(jié)點上進行。每插入ー個(關(guān)鍵碼-指針)索引項后都要判斷結(jié)點中的子樹棵數(shù)是否超出范圍。當插入后結(jié)點中的子樹棵數(shù)大于m (B+樹的階數(shù))吋,需要將葉結(jié)點分裂為兩個結(jié)點。它們的雙親結(jié)點中應(yīng)同時包含這兩個結(jié)點的最大關(guān)鍵碼和結(jié)點地址。此后,問題歸于在非葉結(jié)點中的插入了。在非葉結(jié)點中關(guān)鍵碼的插入與葉結(jié)點的插入類似,非葉結(jié)點中的子樹棵數(shù)的上限為m,超出這個范圍也要進行結(jié)點分裂。在做根結(jié)點分裂吋,因為沒有雙親結(jié)點,就必須創(chuàng)建新的雙親結(jié)點,作為樹的新根。2.實時查詢
使用分布式計算系統(tǒng),首先客戶端向服務(wù)器端發(fā)送get請求,服務(wù)器端創(chuàng)建并提交job進行查詢,查詢分為三步
I) . namenode進行索引過濾,由于索引文件名是按照時間創(chuàng)建的,根據(jù)查詢條件中的時間(查詢條件中必須有時間條件,開始時間和結(jié)束時間)和索引文件名匹配,篩選滿足條件的索引文件。2).將任務(wù)分發(fā)到每臺datanode上,根據(jù)篩選出的索引文件和查詢條件通過B+樹查詢,得到滿足條件的數(shù)據(jù)的位置。數(shù)據(jù)位置記錄了存儲數(shù)據(jù)所在機器(datanode)的ip和偏移量,根據(jù)ip找到機器,再根據(jù)偏移量就能找到對應(yīng)的數(shù)據(jù)。3).再次進行任務(wù)的分發(fā),根據(jù)上一歩得到的數(shù)據(jù)的位置在每臺機器上讀取數(shù)據(jù),并返回查詢結(jié)果,將查詢結(jié)果集寫到本地文件中。高效B+結(jié)構(gòu)和查詢的并行執(zhí)行,使查詢達到了實時完成。3.實時結(jié)果傳輸
使用jetty作為web容器,在HDFS上做數(shù)據(jù)查詢的同時,jetty輪循查詢結(jié)果目錄,如果不為空,則讀取查詢結(jié)果文件并返回給客戶端,客戶端繼續(xù)向服務(wù)器端發(fā)送continue請求,服務(wù)器端啟動多線程讀取查詢結(jié)果,將讀取數(shù)據(jù)返回給客戶端,如果返回的讀取數(shù)據(jù)為空,流程結(jié)束,如果不為空,客戶端繼續(xù)發(fā)送continue請求。查詢過程中,任何datanode查詢成功,即向客戶端返回數(shù)據(jù),不需要所有datanode查詢完成。 圖2是jetty的查詢流程圖,圖3是數(shù)據(jù)的查詢傳輸完整流程。使用jetty作為web容器,首先客戶端向服務(wù)器端發(fā)送get請求,服務(wù)器端解析json (—種輕量級的數(shù)據(jù)交換格式)串,根據(jù)json串中的查詢條件實例化job對象,提交job進行分布式查詢,最后返回結(jié)果。在HDFS上做查詢的同吋,jetty輪循查詢結(jié)果目錄,如果不為空,則讀取文件并返回給客戶端,客戶端繼續(xù)向服務(wù)端發(fā)送continue請求,服務(wù)器端啟動多線程讀取查詢結(jié)果,將讀取數(shù)據(jù)返回給客戶端。如果查詢結(jié)果為空并且HDFS上的查詢已經(jīng)結(jié)束,則返回空,流程結(jié)束。
權(quán)利要求
1.ー種大數(shù)據(jù)實時處理方法,其特征在于數(shù)據(jù)的入庫,查詢,傳輸都是并發(fā)的,實時的 (1)實時入庫以現(xiàn)有的HDFS為基礎(chǔ),在每臺datanode上啟動多線程創(chuàng)建索引,并行創(chuàng)建索引文件,索引的創(chuàng)建以B+樹的結(jié)構(gòu)生成; (2)實時查詢使用分布式計算系統(tǒng),在服務(wù)器端創(chuàng)建并提交job進行查詢,查詢分為~- j_hiニ少 A.namenode上進行索引過濾,由于索引文件名是按照時間創(chuàng)建的,根據(jù)查詢條件中的時間和索引文件名匹配,篩選滿足條件的索引文件; B.將任務(wù)分發(fā)到每臺datanode上,根據(jù)篩選出的索引文件和查詢條件通過B+樹查詢,得到滿足條件的數(shù)據(jù)的位置; C.再次進行任務(wù)的分發(fā),根據(jù)上一歩得到的數(shù)據(jù)的位置在每臺機器上讀取數(shù)據(jù),并返回查詢結(jié)果; (3)實時結(jié)果傳輸使用jetty作為web容器,在HDFS上做數(shù)據(jù)查詢的同吋,jetty輪循查詢結(jié)果目錄,如果不為空,則讀取查詢結(jié)果文件并返回給客戶端,客戶端繼續(xù)向服務(wù)器端發(fā)送continue請求,服務(wù)器端啟動多線程讀取查詢結(jié)果,將讀取數(shù)據(jù)返回給客戶端,如果返回的讀取數(shù)據(jù)為空,流程結(jié)束,如果不為空,客戶端繼續(xù)發(fā)送continue請求;查詢過程中,任何datanode查詢成功,即向客戶端返回數(shù)據(jù),不需要所有datanode查詢完成。
全文摘要
本發(fā)明公開一種大數(shù)據(jù)實時處理方法,涉及計算機應(yīng)用系統(tǒng)領(lǐng)域。本發(fā)明數(shù)據(jù)的入庫,查詢,傳輸都是并發(fā)的,實時的。在分發(fā)任務(wù)的同時,進行過濾索引,過濾索引的同時,將過濾完的索引文件分發(fā)到datanode上面,同時datanode完成本地文件的查詢,并向客戶端返回數(shù)據(jù)。任何datanode的查詢完成,即向用戶返回查詢結(jié)果。本發(fā)明方法處理過程都是并發(fā)執(zhí)行的,最大限度的利用了計算機的硬件設(shè)備,高效B+結(jié)構(gòu)和查詢的并行執(zhí)行,使查詢達到了實時完成,極大地提高了查詢的效率,用戶執(zhí)行查詢操作時便能獲得查詢結(jié)果。
文檔編號G06F17/30GK102841944SQ201210306420
公開日2012年12月26日 申請日期2012年8月27日 優(yōu)先權(quán)日2012年8月27日
發(fā)明者張真, 王磊, 陳偉, 王胤然, 楊震宇, 周亮亮 申請人:南京云創(chuàng)存儲科技有限公司