两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種基于Memcached的大數(shù)據(jù)緩存交互式查詢方法與流程

文檔序號:11230475閱讀:403來源:國知局
本發(fā)明涉及大數(shù)據(jù)、數(shù)據(jù)庫
技術領域
:,尤其涉及一種基于memcached的大數(shù)據(jù)緩存交互式查詢方法。
背景技術
::隨著網(wǎng)絡的發(fā)展和普及,應用生產(chǎn)和需要處理的數(shù)據(jù)量越來越大。數(shù)據(jù)的爆炸式增長,使得現(xiàn)在數(shù)據(jù)庫系統(tǒng)的工作負載日益增大,不斷增長的數(shù)據(jù)量要求越來越多的應用程序能夠擴展到更大的集群里去計算,因此大數(shù)據(jù)分布式計算是處理海量數(shù)據(jù)的必由之路。在信息技術高速發(fā)展的今天,各種大數(shù)據(jù)處理和分析工具及框架應運而生,其中典型的處理框架如hadoop、spark、storm等。以伯克利大學推出的apachespark為例,它是目前非常強大的分布式計算框架。spark使用了內(nèi)存內(nèi)運算技術,能在數(shù)據(jù)尚未寫入硬盤時即在內(nèi)存內(nèi)分析運算,在某種程度上是對mapreduce模型的一種擴展。spark解決了mapreduce不擅長的計算工作,比如迭代式、交互式和流式。雖然spark在操作大數(shù)據(jù)集上很有優(yōu)勢,但是它仍然需要數(shù)據(jù)的持久化存儲,hdfs是比較通用的選擇,其和spark結(jié)合使用,然而它基于磁盤的特點,導致在實時應用程序中會影響性能。參與大數(shù)據(jù)計算的數(shù)據(jù)來自流、內(nèi)存以及磁盤,后者包括關系數(shù)據(jù)庫管理系統(tǒng)(rdbms)、hbase數(shù)據(jù)庫、mongodb數(shù)據(jù)庫以及hdfs文件系統(tǒng)。在大數(shù)據(jù)處理框架中,待處理的數(shù)據(jù)格式需要滿足諸如可分塊、不可修改等規(guī)范,因此,人們定義了類似于rdd(resilientdistributeddatasets,彈性分布式數(shù)據(jù)集)以及hiveql、sparksql等類sql的接口,并且針對常用的數(shù)據(jù)源提供了相應的驅(qū)動程序。如:借助于apachespark的sparksql組件,可以將hbase、mongodb、hdfs文件系統(tǒng)等存儲映射成數(shù)據(jù)庫表,并提供高效的sql查詢能力。hbase、mongodb、hdfs文件系統(tǒng)將數(shù)據(jù)存儲在磁盤中,盡管它們采用了cache結(jié)構(gòu),但仍具有較大的讀寫延遲。在大數(shù)據(jù)應用場景中,為了實現(xiàn)更高效的數(shù)據(jù)訪問性能,很多高頻數(shù)據(jù)(如:熱門商品、實時統(tǒng)計變量等)往往需要借助于memcached這一類緩存系統(tǒng)進行存儲。memcached是以livejournal公司里的bradfitzpatric為首開發(fā)的一款軟件,是一套分布式的高速緩存系統(tǒng),由于它基于內(nèi)存緩存的特性,使得在應用中有比較高的性能與可擴展性。由于memcached與hbase、關系型數(shù)據(jù)庫等系統(tǒng)采用了不同的存儲模型即key-value模型,因此需要針對memcached開發(fā)支持大數(shù)據(jù)計算框架的sql查詢驅(qū)動。另一方面,現(xiàn)有的應用程序,只能通過api方式調(diào)用memcached服務(這些api往往對應著memcached協(xié)議的不同命令,https://github.com/memcached/memcached/wiki/commands),這種api的使用方式缺乏與大數(shù)據(jù)處理框架的集成能力。以一個weblog(web日志)統(tǒng)計系統(tǒng)為例,為了高效的統(tǒng)計網(wǎng)站的用戶數(shù),網(wǎng)站的日志記錄會依次流經(jīng)大數(shù)據(jù)消息系統(tǒng)kafka、大數(shù)據(jù)存儲系統(tǒng)hbase、在線緩存系統(tǒng)memcached,以及傳統(tǒng)的關系型數(shù)據(jù)庫mysql等。然而由于memcached采用api而非sql語言,程序開發(fā)人員無法采用一種通用的、適用于大數(shù)據(jù)計算框架的方法來操作memcached,這種緊耦合性會影響系統(tǒng)部署的靈活性。已存在一些針對hbase、hdfs、solr、mongodb的大數(shù)據(jù)交互式查詢接口的方案,如:華為開源的astro(https://github.com/huaweibigdata/astro)就是這樣一款針對hbase的sql查詢驅(qū)動。類似的軟件還包括solr-sql(https://github.com/bluejoe2008/solr-sql)、elasticsearch-sql(https://github.com/nlpchina/elasticsearch-sql)等。然而,目前還不存在一種基于memcached的大數(shù)據(jù)緩存交互式查詢的方法。技術實現(xiàn)要素:本發(fā)明的目的在于提供一種基于memcached的大數(shù)據(jù)緩存交互式查詢方法,該方法有效實現(xiàn)了針對大數(shù)據(jù)緩存進行交互式查詢的能力,同時改善了現(xiàn)有hadoop/spark生態(tài)中各大數(shù)據(jù)管理系統(tǒng)(hbase、impala等)無法滿足實時緩存數(shù)據(jù)高效讀寫的現(xiàn)狀。針對上述目的,本發(fā)明所采用的技術方案為:一種基于memcached的大數(shù)據(jù)緩存交互式查詢方法,其步驟包括:1)將memcached驅(qū)動程序放入sparksql的類路徑中,并引入到sparksql的sqlcontext(sql環(huán)境)中;所述memcached驅(qū)動程序包括defaultsource、memcachedrelation和memcachedrdd,其中所述defaultsource實現(xiàn)了spark中的relationprovider,用于創(chuàng)建sparksql數(shù)據(jù)源中的memcachedrelation;所述memcachedrelation繼承并實現(xiàn)了spark中的baserelation和tablescan,用于根據(jù)用戶需求實現(xiàn)sparksql與memcached服務器之間的交互;所述memcachedrdd為spark處理memcached服務器中的數(shù)據(jù)提供接口;2)根據(jù)memcached服務器中緩存數(shù)據(jù)的結(jié)構(gòu)指定表的數(shù)據(jù)模式(schema),調(diào)用sqlcontext的sql()方法,提交createtable語句創(chuàng)建sparksql數(shù)據(jù)源中的表;3)調(diào)用sqlcontext的sql()方法,提交sqlinsert語句,在sparksql中根據(jù)上述創(chuàng)建的表并調(diào)用memcachedapi將數(shù)據(jù)寫入memcached服務器中;4)調(diào)用sqlcontext的sql()方法,提交sqlselect語句,在sparksql中根據(jù)上述創(chuàng)建的表并調(diào)用memcachedapi查詢memcached服務器中的緩存數(shù)據(jù)。進一步地,步驟1)中所述memcached驅(qū)動程序表現(xiàn)為一個java程序包(jar)的形式。進一步地,步驟1)中所述memcachedrelation還用于存放數(shù)據(jù)模式的映射和scan數(shù)據(jù)的規(guī)則。進一步地,步驟1)中所述memcachedrdd還定義了數(shù)據(jù)在模式定義下類型的強制轉(zhuǎn)換。進一步地,步驟2)中所述數(shù)據(jù)模式包括數(shù)據(jù)表的表名及所屬類型、列的列名,且每一列需要指定列名以及值類型。進一步地,步驟2)中在創(chuàng)建sparksql數(shù)據(jù)源中的表時,通過using參數(shù)指定采用的memcached驅(qū)動。進一步地,步驟2)中在創(chuàng)建sparksql數(shù)據(jù)源中的表時,通過options參數(shù)指定memcached服務器的參數(shù);所述memcached服務器的參數(shù)包括服務器地址、主機列表和數(shù)據(jù)列存儲在memcached中key的前綴。本發(fā)明的有益效果在于:本發(fā)明提供一種基于memcached的大數(shù)據(jù)緩存交互式查詢方法,該方法利用緩存在內(nèi)存讀寫的高效性,提高了交互式查詢的效率;基于sparksql實現(xiàn)了針對memcached做交互式查詢和存儲的驅(qū)動程序。本發(fā)明根據(jù)sparksql的實現(xiàn)原理,將memcached驅(qū)動作為外部數(shù)據(jù)源,對外提供api的同時,還可以支持ddl(數(shù)據(jù)定義語言)方式進行的交互式查詢。本發(fā)明方法的優(yōu)點具體為:(1)使用memcached服務器來實現(xiàn)行數(shù)據(jù)的存儲和查詢。目前很多大數(shù)據(jù)管理系統(tǒng)如:hbase、impala等,由于采用磁盤存儲,為保證持久性和最終一致性,仍具有一定的延時,因此不適合處理在線緩存數(shù)據(jù)。另一方面,盡管很多應用采取memcached來存儲數(shù)據(jù),但一般用來存儲離散的數(shù)據(jù)(如某個統(tǒng)計結(jié)果等),還缺乏一種存儲查詢行數(shù)據(jù)的方案。本發(fā)明方法將分布式數(shù)據(jù)庫memcached作為數(shù)據(jù)存儲端,充分利用memcached基于內(nèi)存存儲優(yōu)勢和良好的讀寫性能,并實現(xiàn)了行數(shù)據(jù)的存儲、查詢。(2)提供了一種非api的方式實現(xiàn)對memcached系統(tǒng)的操作。目前基于memcached的應用,主要通過c++/java等api的方式實現(xiàn)對memcached的讀、寫操作,這種方式對開發(fā)人員要求較高,且很容易受到api客戶端版本的影響。采用本發(fā)明方法,則可以采用標準的sql語言實現(xiàn)對memcached緩存數(shù)據(jù)的操作,開發(fā)人員甚至不需要編寫程序,通過常用的sql語言,即可完成需求。(3)實現(xiàn)了與流行的大數(shù)據(jù)計算框架的完美結(jié)合:本發(fā)明方法完美實現(xiàn)了與sparksql框架的集成,并可實現(xiàn)與hive、impala的數(shù)據(jù)流集成。從目前的技術調(diào)研情況來看,大數(shù)據(jù)計算框架往往忽略了與memcached等緩存系統(tǒng)的集成,傳統(tǒng)的在線應用則很難遷移到大數(shù)據(jù)計算框架中來。附圖說明圖1為本發(fā)明方法實現(xiàn)memcached驅(qū)動作為sparksql外部數(shù)據(jù)源的內(nèi)部結(jié)構(gòu)示意圖;圖2為本發(fā)明一種基于memcached的大數(shù)據(jù)緩存交互式查詢方法的流程圖;圖3為本發(fā)明一實施例的創(chuàng)建數(shù)據(jù)表的操作流程圖。具體實施方式為使本發(fā)明的上述特征和優(yōu)點能更明顯易懂,下文特舉實施例,并配合所附圖作詳細說明如下。本發(fā)明提供一種基于memcached的大數(shù)據(jù)緩存交互式查詢方法,該方法基于sparksql提供的構(gòu)建外部數(shù)據(jù)源的方式,結(jié)合memcached緩存的內(nèi)存讀寫特點,對特定應用場景下的大數(shù)據(jù)存儲介質(zhì)作了重新的定義。同時實現(xiàn)了大數(shù)據(jù)處理過程中中間計算結(jié)果在memcached服務器中的緩存,通過memcached良好的讀寫性能,結(jié)合sparksql強大的交互式查詢分析能力,有效的提高了系統(tǒng)的性能。請參考圖1,該圖為本發(fā)明方法實現(xiàn)memcached驅(qū)動作為sparksql外部數(shù)據(jù)源的內(nèi)部結(jié)構(gòu)示意圖,其中baserelation、relationprovider和tablescan為spark中提供的接口抽象類。本發(fā)明方法主要實現(xiàn)了defaultsource、memcachedrelation和memcachedrdd三大類(對象),下面為各個類(對象)的具體描述:1、defaultsource:實現(xiàn)了spark中的relationprovider,用于創(chuàng)建sparksql數(shù)據(jù)源中的baserelation(本發(fā)明具體為memcachedrelation);2、relationprovider:一種抽象類,對某種特定的數(shù)據(jù)源生成對應的baserelation;3、baserelation:一種抽象類,表示一種已知模式的元組集合,是對外部數(shù)據(jù)源的抽象,繼承baserelation的類必須提供它們數(shù)據(jù)中基于structtype的模式;4、tablescan:一種抽象類接口,用于把baserelation中的元組生成row對象集合的rdd;5、memcachedrelation:繼承并實現(xiàn)了baserelation和tablescan,根據(jù)用戶需求實現(xiàn)sparksql與memcached服務器之間的交互;6、memcachedrdd:rdd是spark中的核心編程模型,為spark處理memcached中的數(shù)據(jù)提供了重要的接口。對于實現(xiàn)一個外部數(shù)據(jù)源,需要定義對應的relation(本發(fā)明為memcachedrelation)來繼承baserelation,作為外部數(shù)據(jù)源抽象的一種實現(xiàn),存放數(shù)據(jù)模式的映射和scan數(shù)據(jù)的規(guī)則(即buildscan)。而memcachedrelation的生成需要通過datasource的apply方法創(chuàng)建,本發(fā)明為defaultsource,它實現(xiàn)了sparksql提供的抽象接口relationprovider,提供createrelation方法生成對應的memcachedrelation。除此之外,本發(fā)明定義了對象memcachedrdd,它具體實現(xiàn)了sparksql與memcached服務器交互的一系列操作,比如將數(shù)據(jù)寫入memcached服務器,從memcached服務器中讀取數(shù)據(jù),還定義了數(shù)據(jù)在模式定義下類型的強制轉(zhuǎn)換等。本發(fā)明提供了一種memcached驅(qū)動作為sparksql外部數(shù)據(jù)源,該驅(qū)動基于sparksql提供對memcached服務器的操作,用戶可將數(shù)據(jù)分布式存儲在memcached服務器中,數(shù)據(jù)在經(jīng)過spark處理前需要提供數(shù)據(jù)模式;該驅(qū)動支持常規(guī)的數(shù)據(jù)操作(數(shù)據(jù)的增刪改查),基于高性能的spark和內(nèi)存數(shù)據(jù)庫memcached,為用戶提供更高效的服務。請參考圖2,該圖為本發(fā)明一種基于memcached的大數(shù)據(jù)緩存交互式查詢方法的流程圖,其步驟包括:(1)根據(jù)memcached服務器中緩存數(shù)據(jù)的結(jié)構(gòu)指定表的數(shù)據(jù)模式,調(diào)用sqlcontext的sql()方法,提交createtable語句創(chuàng)建sparksql數(shù)據(jù)源中的表。所述數(shù)據(jù)模式包括數(shù)據(jù)表的表名及所屬類型、列的列名,且每一列需要指定列名以及值類型。在創(chuàng)建sparksql數(shù)據(jù)源中的表時,通過using參數(shù)指定采用的memcached驅(qū)動;并通過options參數(shù)指定memcached服務器的參數(shù),所述memcached服務器的參數(shù)包括服務器地址、主機列表和數(shù)據(jù)列存儲在memcached中key的前綴等。(2)將數(shù)據(jù)寫入memcached服務器。調(diào)用sqlcontext的sql()方法,提交sqlinsert語句,在sparksql中根據(jù)上述創(chuàng)建的sparksql數(shù)據(jù)源中的表并調(diào)用memcachedapi進行寫入操作,即可將數(shù)據(jù)插入到memcached服務器中;sparksql客戶端通過調(diào)用sqlcontext的sql()方法來實現(xiàn)向sparksql提交sqlinsert語句,當sparksql客戶端提交sqlinsert語句后,該語句被分為sparksql創(chuàng)建defaultsource與memcachedrelation和調(diào)用insert方法以實現(xiàn)數(shù)據(jù)的寫入。除此之外,本發(fā)明在提供數(shù)據(jù)寫入memcached服務器的接口中給出了寫操作的模式,根據(jù)用戶需求來定義是否對memcached服務器中的數(shù)據(jù)進行覆蓋寫。(3)從memcached服務器中查詢數(shù)據(jù)。調(diào)用sqlcontext的sql()方法,提交sqlselect語句,在sparksql中根據(jù)上述創(chuàng)建的sparksql數(shù)據(jù)源中的表并調(diào)用memcachedapi進行查詢操作,即可讀取到memcached服務器中的緩存數(shù)據(jù)。sparksql客戶端通過調(diào)用sqlcontext的sql()方法來實現(xiàn)向sparksql提交sqlselect語句,當sparksql客戶端提交sqlselect語句后,該語句被分為sparksql創(chuàng)建defaultsource與memcachedrelation和調(diào)用buildscan方法以實現(xiàn)數(shù)據(jù)的讀取。下面為一具體實施例來解釋說明本發(fā)明。本發(fā)明支持常用的數(shù)據(jù)操作,通過sparksql對memcached服務器中的緩存數(shù)據(jù)進行查詢與修改,同時也支持常規(guī)的sql分析操作,這里以創(chuàng)建數(shù)據(jù)表為例,具體流程示意圖如圖3所示,通過給出該實施例進一步說明本發(fā)明提供實現(xiàn)memcached驅(qū)動作為外部數(shù)據(jù)源的過程。該實施例的步驟包括:step1:準備好memcached服務器以及sparksql環(huán)境;step2:將本發(fā)明完成的主要內(nèi)容,即memcached驅(qū)動程序,放在sparksql的類路徑中;step3:將上述memcached驅(qū)動程序引入到sparksql的sqlcontext中,使用ddl創(chuàng)建表,如本例中createtemporarytablepersons(namestring,agestring,heightstring,bornstring)usingcn.cnic.bigdatalab.spark.memcachedoptions(memcached_servers"10.0.20.47:11211",key_prefix"persons")step4:sparksql對上述sql進行解析,封裝成一個createtableusing類的對象,該類根據(jù)“cn.cnic.bigdatalab.spark.memcached”通過反射機制創(chuàng)建defaultsource,options中的內(nèi)容為memcached服務器地址和key前綴,作為參數(shù)傳入該類,然后通過createrelation()生成memcachedrelation;step5:得到memcachedrelation后,直接調(diào)用sqlcontext的baserelationtoschemardd轉(zhuǎn)化為schemardd,最后注冊registertemptable(tablename)生成表,可以基于用戶需求進行sql查詢。以上實施僅用以說明本發(fā)明的技術方案而非對其進行限制,本領域的普通技術人員可以對本發(fā)明的技術方案進行修改或者等同替換,而不脫離本發(fā)明的精神和范圍,本發(fā)明的保護范圍應以權利要求書所述為準。當前第1頁12當前第1頁12
當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
金秀| 古交市| 新郑市| 共和县| 尖扎县| 淄博市| 株洲县| 吉首市| 河池市| 孟州市| 息烽县| 屏南县| 呼玛县| 双江| 德保县| 营口市| 沙雅县| 长沙市| 靖江市| 观塘区| 双流县| 讷河市| 耒阳市| 阜康市| 太湖县| 晋州市| 沙洋县| 达日县| 烟台市| 内江市| 酒泉市| 平陆县| 万安县| 屏东县| 霍邱县| 泌阳县| 永平县| 浮山县| 闵行区| 濉溪县| 文成县|