專利名稱:一種基于Cassandra的數(shù)據(jù)并行處理系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計算機領(lǐng)域的分布式計算和系統(tǒng)結(jié)構(gòu)領(lǐng)域,更具體地,涉及一種基于Cassandra的數(shù)據(jù)并行處理系統(tǒng)。
背景技術(shù):
Cassandra是一個開源的、分布式的、無中心、彈性可擴展、高可用、容錯、一致性可調(diào)、面向列的非關(guān)系型數(shù)據(jù)庫。它是基于亞馬遜Dynamo數(shù)據(jù)庫的分布式設(shè)計和谷歌BigTable的數(shù)據(jù)模型,由Facebook創(chuàng)建,已經(jīng)在一些最流行的網(wǎng)站中取得了應(yīng)用。當(dāng)前,隨著Web2.0的興起,數(shù)據(jù)量急劇增長,海量數(shù)據(jù)的存儲和處理需求對傳統(tǒng)的關(guān)系型數(shù)據(jù)庫提出了挑戰(zhàn),這是因為,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫無法滿足超大規(guī)模和高并發(fā)的數(shù)據(jù)處理需求。例如Web2.0網(wǎng)站要根據(jù)用戶個性化信息來實時生成動態(tài)頁面和提供動態(tài)信息,這樣一個較大的網(wǎng)站往往會達(dá)到每秒上萬次的讀寫請求,而上萬次的SQL寫請求,是硬盤IO無法承受的。再者,類似Facebook, twitter之類的網(wǎng)站,每天用戶產(chǎn)生海量的用戶動態(tài),一個月的用戶動態(tài)數(shù)據(jù)會達(dá)到上億條。在一張上億條記錄的大表里面做SQL查詢,其效率是極其低下的。而在這種場景之下,Cassandra卻能夠滿足數(shù)據(jù)處理的需求。由于Cassandra采用了MemTable機制實現(xiàn)讀寫優(yōu)化,顯著地提升了數(shù)據(jù)的吞吐率,可以很好地應(yīng)對高并發(fā)的數(shù)據(jù)讀寫請求。同時,Cassandra還具有靈活的模式,能夠很方便地增加或者刪除字段,它采用了P2P架構(gòu),使得單點故障不會影響整個集群的服務(wù),并且支持節(jié)點的線性擴展。然而,由于Cassandra獨特的架構(gòu)設(shè)計,使得其無法支持關(guān)系型數(shù)據(jù)庫的諸如連接、條件查詢等對數(shù)據(jù)的復(fù)雜處理。在大數(shù)據(jù)處理領(lǐng)域,谷歌公司提出了針對大規(guī)模數(shù)據(jù)集的并行計算編程模型MapReduce0 Hadoop是MapReduce的一個開源系統(tǒng),目前已經(jīng)廣泛地被運用于海量數(shù)據(jù)的存儲和處理。在數(shù)據(jù)處理方面,Hadoop的子項目Hive,Pig都擁有強大的數(shù)據(jù)處理能力。Hive直接將文本數(shù)據(jù)在邏輯上處理成一個大表,將傳統(tǒng)的SQL命令解釋成Hadoop程序?qū)ξ谋具M(jìn)行處理;Pig則可以更加靈活地指定數(shù)據(jù)的模式,使用面向數(shù)據(jù)流的Pig Latin語言直接進(jìn)行數(shù)據(jù)處理。然而,由于Hadoop是基于分布式文件系統(tǒng)的存儲方式,對數(shù)據(jù)的查詢必須遍歷整個文件,因此Hadoop不具有針對數(shù)據(jù)簡單查詢快速響應(yīng)的能力。
發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)的缺陷,本發(fā)明的目的在于提供一種基于Cassandra的數(shù)據(jù)并行處理系統(tǒng),旨在解決現(xiàn)有Cassandra系統(tǒng)對數(shù)據(jù)復(fù)雜處理功能的不足,該系統(tǒng)在數(shù)據(jù)存儲方面,具有可靠性高、擴展性好、吞吐率高的優(yōu)勢以及針對數(shù)據(jù)簡單查詢快速響應(yīng)的能力,同時又具備對海量數(shù)據(jù)的復(fù)雜處理能力。為實現(xiàn)上述目的,本發(fā)明提供了一種基于Cassandra的數(shù)據(jù)并行處理系統(tǒng),包括Hadoop主節(jié)點、多個Hadoop子節(jié)點以及位于Hadoop子節(jié)點上的Cassandra存儲端,主節(jié)點包括用戶接口模塊、Cassandra查詢模塊、作業(yè)調(diào)度模塊、作業(yè)隊列模塊、作業(yè)追蹤器,子節(jié)點包括任務(wù)追蹤器、輸入模塊、輸出模塊以及Mapreduce模塊,用戶接口模塊用于接收用戶請求,并判斷用戶請求的類型是數(shù)據(jù)查詢請求、提交數(shù)據(jù)處理作業(yè)請求還是作業(yè)信息查詢請求;如果是數(shù)據(jù)查詢請求,則將其發(fā)送到Cassandra查詢模塊,如果是提交數(shù)據(jù)處理作業(yè)請求或作業(yè)信息查詢請求,則將其發(fā)送到作業(yè)調(diào)度模塊,Cassandra查詢模塊用于根據(jù)接收來自于用戶接口模塊的數(shù)據(jù)查詢請求在Cassandra系統(tǒng)中進(jìn)行查詢,并將查詢的結(jié)果返回到用戶接口模塊,作業(yè)調(diào)度模塊用于將提交數(shù)據(jù)處理作業(yè)請求對應(yīng)的作業(yè)提交給作業(yè)隊列模塊,作業(yè)調(diào)度模塊還用于判斷該作業(yè)信息查詢請求對應(yīng)的作業(yè)信息是否為作業(yè)追蹤器正在處理中的作業(yè)信息,若是,則直接將該作業(yè)信息返回給用戶接口模塊,否則在作業(yè)隊列模塊中查詢是否存在有對應(yīng)的作業(yè)信息,如果有則將該作業(yè)信息返回給用戶接口模塊,否則查詢磁盤的日志文件中是否存在有該作業(yè)信息,如果有則將該作業(yè)信息返回給用戶接口模塊,否則返回作業(yè)不存在信息給用戶接口模塊,作業(yè)隊列模塊用于將來自于作業(yè)調(diào)度模塊的作業(yè)添加到其作業(yè)隊列中,并將作業(yè)隊列中隊首的作業(yè)傳送到作業(yè)追蹤器,作業(yè)追蹤器用于將來自于作業(yè)隊列模塊的作業(yè)拆分成多個子任務(wù),將每個子任務(wù)發(fā)送到各個子節(jié)點的任務(wù)追蹤器,將存儲端中存儲的與該作業(yè)對應(yīng)的待處理數(shù)據(jù)的存儲位置信息以及存儲端的網(wǎng)絡(luò)拓?fù)湫畔魉偷捷斎肽K,并將處理后數(shù)據(jù)的存儲位置信息傳送到輸出模塊,任務(wù)追蹤器還用于接收來自主節(jié)點的作業(yè)追蹤器的子任務(wù),并將該子任務(wù)發(fā)送到Mapreduce模塊,Mapreduce模塊用于根據(jù)子任務(wù)請求輸入模塊從存儲端獲取待處理數(shù)據(jù),輸入模塊用于根據(jù)來自作業(yè)追蹤器的、與該作業(yè)對應(yīng)的待處理數(shù)據(jù)的存儲位置信息以及存儲端的網(wǎng)絡(luò)拓?fù)湫畔拇鎯Χ双@取待處理數(shù)據(jù),并將待處理數(shù)據(jù)發(fā)送到Mapreduce模塊,Mapreduce模塊還用于對待處理數(shù)據(jù)進(jìn)行計算,并將計算結(jié)果傳送到輸出模塊,輸出模塊用于根據(jù)來自于作業(yè)追蹤器的、處理后數(shù)據(jù)的存儲位置信息將計算結(jié)果發(fā)送到存儲端中的對應(yīng)位置。Cassandra查詢模塊維護(hù)一個Cassandra連接池和一個超時連接,當(dāng)收到一個用戶查詢請求,首先檢查當(dāng)前超時連接是否超時,若沒有超時,則直接使用當(dāng)前連接向數(shù)據(jù)庫提交查詢請求,如果當(dāng)前連接已超時,則釋放當(dāng)前連接,并從其維護(hù)的連接池中請求一個連接作為當(dāng)前的連接,并使用當(dāng)前連接向數(shù)據(jù)庫提交查詢請求。當(dāng)向數(shù)據(jù)庫提交數(shù)據(jù)查詢請求之后,其等待數(shù)據(jù)庫返回查詢結(jié)果,并將查詢結(jié)果轉(zhuǎn)發(fā)給用戶接口模塊。作業(yè)追蹤器正在處理中的作業(yè)信息包括作業(yè)進(jìn)度和資源使用率信息。每個子任務(wù)都是由一個map或者reduce任務(wù)構(gòu)成,map和reduce任務(wù)執(zhí)行用戶上傳的作業(yè)包中的map函數(shù)和reduce函數(shù),每個map函數(shù)處理根據(jù)其對應(yīng)的輸入模塊的配置,讀取存儲在本地Cassandra節(jié)點的一段數(shù)據(jù)記錄并處理。主節(jié)點的信息流向為:用戶向用戶接口模塊提交數(shù)據(jù)查詢請求或數(shù)據(jù)處理作業(yè)請求,其中,數(shù)據(jù)查詢請求將被用戶接口模塊轉(zhuǎn)發(fā)至Cassandra數(shù)據(jù)查詢模塊,由Cassandra數(shù)據(jù)查詢模塊完成數(shù)據(jù)查詢,并將查詢結(jié)果返回給用戶接口模塊,用戶接口模塊再將查詢結(jié)果返回給用戶,而對于用戶提交的數(shù)據(jù)處理作業(yè)請求,用戶接口模塊將作業(yè)提交給作業(yè)調(diào)度模塊,作業(yè)調(diào)度模塊按照調(diào)度策略將作業(yè)加入到作業(yè)隊列模塊,待系統(tǒng)有空閑的任務(wù)槽時,作業(yè)調(diào)度模塊從作業(yè)隊列模塊中取出隊首作業(yè),提交給作業(yè)追蹤器,作業(yè)追蹤器根據(jù)個子節(jié)點任務(wù)追蹤器上報的狀態(tài),將作業(yè)分割為多個任務(wù),并分發(fā)給各個子節(jié)點上的任務(wù)追蹤器完成MapReduce任務(wù),在作業(yè)處理的過程中,作業(yè)追蹤器不斷向作業(yè)調(diào)度模塊匯報當(dāng)前作業(yè)進(jìn)度、作業(yè)狀態(tài)等信息,作業(yè)調(diào)度模塊將當(dāng)前作業(yè)信息返回給用戶接口模塊,用戶從用戶接口模塊獲得當(dāng)前的作業(yè)信息。輸入模塊維護(hù)一個面向本地Cassandra存儲端的連接池,從作業(yè)配置文件中獲取Cassandra數(shù)據(jù)庫的關(guān)鍵字空間和列簇名,調(diào)用Cassandra中的一致性哈希算法來確定存儲在本地節(jié)點的數(shù)據(jù)記錄,然后Cassandra存儲端中讀取存儲在本地節(jié)點中的數(shù)據(jù)記錄,并把數(shù)據(jù)記錄格式化為鍵值對形式,向map函數(shù)推送鍵值對數(shù)據(jù)。Mapreduce模塊采用Map函數(shù)對本地數(shù)據(jù)記錄進(jìn)行計算,將計算得到的中間結(jié)果鍵值對輸出到Hadoop的本地磁盤臨時文件中,Hadoop系統(tǒng)對這些中間結(jié)果鍵值對進(jìn)行排序和按鍵進(jìn)行合并,再由reduce函數(shù)對排序和合并后的中間結(jié)果鍵值對進(jìn)行計算,并將最終的計算結(jié)果輸出給輸出模塊。輸出模塊維護(hù)了 一個面向本地Cassandra存儲端的連接池,從作業(yè)配置文件中獲取數(shù)據(jù)輸出的關(guān)鍵字空間和列簇名,把每一個MapReduce輸出的鍵值對轉(zhuǎn)換為一個Cassandra列,存入到Cassandra本地存儲端之中。位于每個子節(jié)點上的Cassandra存儲端和子節(jié)點上的輸入模塊和輸出模塊進(jìn)行交互,用于存放原始數(shù)據(jù)和數(shù)據(jù)處理結(jié)果。通過本發(fā)明所構(gòu)思的以上技術(shù)方案,與現(xiàn)有技術(shù)相比,本發(fā)明具有以下的有益效果:(I)可靠性高由于本發(fā)明的系統(tǒng)采用了將Cassandra的數(shù)據(jù)重定向到Hadoop系統(tǒng)的輸入模塊,而Cassandra在存儲時已將鍵值對排序,Hadoop通過輸入模塊讀入的數(shù)據(jù)是被排序的,又由于Cassandra使用了具有分區(qū)容錯的特性的去中心化分布式架構(gòu),因此本發(fā)明在數(shù)據(jù)存儲方面,具有高可靠性和可用性。(2)可擴展性強由于本發(fā)明中,Cassandra系統(tǒng)的各節(jié)點是對等的,若要向集群中新加入存儲節(jié)點,只需要在新節(jié)點上配置其所屬的Cassandra集群命名即可,因此本發(fā)明具有很強的可擴展性。(3)可支持復(fù)雜數(shù)據(jù)處理由于本發(fā)明在Cassandra的基礎(chǔ)上集成了 MapReduce數(shù)據(jù)處理系統(tǒng),使得整套系統(tǒng)即擁有Cassandra良好的存儲性能,又使用MapReduce模塊對存儲在其中的數(shù)據(jù)進(jìn)行并行處理。因此本發(fā)明即能針對簡單的數(shù)據(jù)查詢和插入操作做出快速響應(yīng),也能對系統(tǒng)中的數(shù)據(jù)進(jìn)行復(fù)雜分析處理。
圖1為基于Cassandra的數(shù)據(jù)并行處理系統(tǒng)的互聯(lián)拓?fù)鋱D。圖2為基于Cassandra的數(shù)據(jù)并行處理系統(tǒng)的系統(tǒng)結(jié)構(gòu)示意圖。
具體實施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示,本發(fā)明基于Cassandra的數(shù)據(jù)并行處理系統(tǒng)包括Hadoop主節(jié)點1、多個Hadoop子節(jié)點2以及位于Hadoop子節(jié)點2上的Cassandra存儲端3。本發(fā)明使用Hadoop主節(jié)點I作為系統(tǒng)頭節(jié)點來響應(yīng)客戶端請求,管理作業(yè)隊列,調(diào)度各子節(jié)點2的計算任務(wù)。各個子節(jié)點2上的Cassandra存儲端3構(gòu)成Cassandra存儲集群,用于存放待處理的數(shù)據(jù)和處理結(jié)果。系統(tǒng)用戶通過客戶端上傳數(shù)據(jù)處理作業(yè)包(如jar包)形式的作業(yè)到主節(jié)點1,主節(jié)點I的作業(yè)追蹤器將作業(yè)分發(fā)到從節(jié)點2,從節(jié)點2的任務(wù)追蹤器根據(jù)作業(yè)進(jìn)行配置,并根據(jù)配置結(jié)果向其所在的Cassandra存儲端3請求數(shù)據(jù),并完成數(shù)據(jù)處理,再將處理結(jié)果回存到Cassandra存儲端3中。如圖2所示,主節(jié)點I包括用戶接口模塊IUCassandra查詢模塊12、作業(yè)調(diào)度模塊13、作業(yè)隊列模塊14、作業(yè)追蹤器15。上述模塊可以根據(jù)需要進(jìn)行分解,部署在一臺或者多臺服務(wù)器上。子節(jié)點2包括任務(wù)追蹤器21、輸入模塊22、輸出模塊23以及Mapreduce模塊24。子節(jié)點2中的各模塊參數(shù)由用戶提交的作業(yè)指定。用戶接口模塊11用于接收用戶請求,并判斷用戶請求的類型是數(shù)據(jù)查詢請求、提交數(shù)據(jù)處理作業(yè)請求還是作業(yè)信息查詢請求。如果是數(shù)據(jù)查詢請求,則將其發(fā)送到Cassandra查詢模塊12,如果是提交數(shù)據(jù)處理作業(yè)請求或作業(yè)信息查詢請求,則將其發(fā)送到作業(yè)調(diào)度模塊13。Cassandra查詢模塊12用于根據(jù)接收來自于用戶接口模塊11的數(shù)據(jù)查詢請求在Cassandra系統(tǒng)中進(jìn)行查詢,并將查詢的結(jié)果返回到用戶接口模塊11。具體而言,該模塊維護(hù)一個Cassandra連接池和一個超時連接,當(dāng)收到一個用戶查詢請求,該模塊首先檢查當(dāng)前超時連接是否超時,若沒有超時,則直接使用當(dāng)前連接向數(shù)據(jù)庫提交查詢請求;如果當(dāng)前連接已超時,則釋放當(dāng)前連接,并從該模塊維護(hù)的連接池中請求一個連接作為當(dāng)前的連接,并使用當(dāng)前連接向數(shù)據(jù)庫提交查詢請求。當(dāng)向數(shù)據(jù)庫提交數(shù)據(jù)查詢請求之后,該模塊等待數(shù)據(jù)庫返回查詢結(jié)果,并將查詢結(jié)果轉(zhuǎn)發(fā)給用戶接口模塊11。作業(yè)調(diào)度模塊13用于將提交數(shù)據(jù)處理作業(yè)請求對應(yīng)的作業(yè)提交給作業(yè)隊列模塊
14。具體而言,作業(yè)調(diào)度模塊13根據(jù)作業(yè)隊列模塊14的作業(yè)調(diào)度策略將不同優(yōu)先級的作業(yè)提交給作業(yè)隊列模塊14。作業(yè)調(diào)度模塊13還用于判斷該作業(yè)信息查詢請求對應(yīng)的作業(yè)信息是否為作業(yè)追蹤器15正在處理中的作業(yè)信息(包括作業(yè)進(jìn)度、資源使用率等信息),若是,則直接將該作業(yè)信息返回給用戶接口模塊11,否則在作業(yè)隊列模塊14中查詢是否存在有對應(yīng)的作業(yè)信息,如果有則將該作業(yè)信息返回給用戶接口模塊11,否則查詢磁盤的日志文件中是否存在有該作業(yè)信息,如果有則將該作業(yè)信息返回給用戶接口模塊11,否則返回作業(yè)不存在信息給用戶接口模塊U。用戶接口模塊11再將作業(yè)信息返回給客戶端。作業(yè)隊列模塊14用于將來自于作業(yè)調(diào)度模塊13的作業(yè)添加到其作業(yè)隊列中,并將作業(yè)隊列中隊首的作業(yè)傳送到作業(yè)追蹤器15。作業(yè)追蹤器15用于將來自于作業(yè)隊列模塊14的作業(yè)拆分成多個子任務(wù),將每個子任務(wù)發(fā)送到各個子節(jié)點2的任務(wù)追蹤器21,將存儲端3中存儲的與該作業(yè)對應(yīng)的待處理數(shù)據(jù)的存儲位置信息以及存儲端3的網(wǎng)絡(luò)拓?fù)湫畔魉偷捷斎肽K22,并將處理后數(shù)據(jù)的存儲位置信息傳送到輸出模塊23。待處理數(shù)據(jù)為存儲端3中的數(shù)據(jù)。具體而言,每個子任務(wù)都是由一個map或者reduce任務(wù)構(gòu)成,map和reduce任務(wù)執(zhí)行用戶上傳的作業(yè)包中的map函數(shù)和reduce函數(shù)。每個map函數(shù)處理根據(jù)其對應(yīng)的輸入模塊22的配置,讀取存儲在本地Cassandra節(jié)點的一段數(shù)據(jù)記錄并處理。主節(jié)點I的信息流向為:用戶向用戶接口模塊11提交數(shù)據(jù)查詢請求或數(shù)據(jù)處理作業(yè)請求。其中,數(shù)據(jù)查詢請求將被用戶接口模塊11轉(zhuǎn)發(fā)至Cassandra數(shù)據(jù)查詢模塊12,由Cassandra數(shù)據(jù)查詢模塊完成數(shù)據(jù)查詢,并將查詢結(jié)果返回給用戶接口模塊11,用戶接口模塊11再將查詢結(jié)果返回給用戶。而對于用戶提交的數(shù)據(jù)處理作業(yè)請求,用戶接口模塊11將作業(yè)提交給作業(yè)調(diào)度模塊13。作業(yè)調(diào)度模塊13按照調(diào)度策略將作業(yè)加入到作業(yè)隊列模塊14。待系統(tǒng)有空閑的任務(wù)槽時,作業(yè)調(diào)度模塊13從作業(yè)隊列模塊14中取出隊首作業(yè),提交給作業(yè)追蹤器15。作業(yè)追蹤器15根據(jù)個子節(jié)點任務(wù)追蹤器21上報的狀態(tài),將作業(yè)分割為多個任務(wù),并分發(fā)給各個子節(jié)點上的任務(wù)追蹤器21完成MapReduce任務(wù)。在作業(yè)處理的過程中,作業(yè)追蹤器15不斷向作業(yè)調(diào)度模塊13匯報當(dāng)前作業(yè)進(jìn)度、作業(yè)狀態(tài)等信息,作業(yè)調(diào)度模塊13將當(dāng)前作業(yè)信息返回給用戶接口模塊11,用戶從用戶接口模塊11獲得當(dāng)前的作業(yè)信息。任務(wù)追蹤器21用于接收來自主節(jié)點I的作業(yè)追蹤器15的子任務(wù),并將該子任務(wù)發(fā)送到Mapreduce模塊24。Mapreduce模塊24用于根據(jù)子任務(wù)請求輸入模塊22從存儲端3獲取待處理數(shù)據(jù)。輸入模塊22用于根據(jù)來自作業(yè)追蹤器15的、與該作業(yè)對應(yīng)的待處理數(shù)據(jù)的存儲位置信息以及存儲端3的網(wǎng)絡(luò)拓?fù)湫畔拇鎯Χ?獲取待處理數(shù)據(jù),并將待處理數(shù)據(jù)發(fā)送到Mapreduce模塊24。具體而言,輸入模塊22實現(xiàn)了將Cassandra中的數(shù)據(jù)重定向到map任務(wù)的功能。該模塊盡可能地利用調(diào)度計算到數(shù)據(jù)本地的方式來減少網(wǎng)絡(luò)開銷,提高效率。該模塊維護(hù)一個面向本地Cassandra存儲端的連接池,從作業(yè)配置文件中獲取Cassandra數(shù)據(jù)庫的關(guān)鍵字空間和列簇名,調(diào)用Cassandra中的一致性哈希算法來確定存儲在本地節(jié)點的數(shù)據(jù)記錄,然后Cassandra存儲端中讀取存儲在本地節(jié)點中的數(shù)據(jù)記錄,并把數(shù)據(jù)記錄格式化為鍵值對形式,向map函數(shù)推送鍵值對數(shù)據(jù)。Mapreduce模塊24用于對待處理數(shù)據(jù)進(jìn)行計算,并將計算結(jié)果傳送到輸出模塊23。具體而言,是采用Map函數(shù)對本地數(shù)據(jù)記錄進(jìn)行計算,將計算得到的中間結(jié)果鍵值對輸出到Hadoop的本地磁盤臨時文件中,Hadoop系統(tǒng)對這些中間結(jié)果鍵值對進(jìn)行排序和按鍵進(jìn)行合并,再由reduce函數(shù)對排序和合并后的中間結(jié)果鍵值對進(jìn)行計算,并將最終的計算結(jié)果輸出給輸出I旲塊23。輸出模塊23用于根據(jù)來自于作業(yè)追蹤器15的、處理后數(shù)據(jù)的存儲位置信息將計算結(jié)果發(fā)送到存儲端3中的對應(yīng)位置。具體而言,輸出模塊23實現(xiàn)了將Hadoop處理結(jié)果重定向到Cassandra的功能。該模塊維護(hù)了一個面向本地Cassandra存儲端的連接池,從作業(yè)配置文件中獲取數(shù)據(jù)輸出的關(guān)鍵字空間和列簇名,把每一個MapReduce輸出的鍵值對轉(zhuǎn)換為一個Cassandra列,存入到Cassandra本地存儲端之中。位于每個子節(jié)點2上的Cassandra存儲端3,和子節(jié)點2上的輸入模塊22和輸出模塊23進(jìn)行交互,用于存放原始數(shù)據(jù)和數(shù)據(jù)處理結(jié)果。實例:
本發(fā)明的主節(jié)點I的服務(wù)器基本硬件配置如表I所示。如果系統(tǒng)負(fù)載較大,可以將主節(jié)點I上的模塊分別安裝在多個服務(wù)器上。
權(quán)利要求
1.一種基于Cassandra的數(shù)據(jù)并行處理系統(tǒng),包括Hadoop主節(jié)點、多個Hadoop子節(jié)點以及位于Hadoop子節(jié)點上的Cassandra存儲端,其特征在于, 主節(jié)點包括用戶接口模塊、Cassandra查詢模塊、作業(yè)調(diào)度模塊、作業(yè)隊列模塊、作業(yè)追莊不益; 子節(jié)點包括任務(wù)追蹤器、輸入模塊、輸出模塊以及Mapreduce模塊; 用戶接口模塊用于接收用戶請求,并判斷用戶請求的類型是數(shù)據(jù)查詢請求、提交數(shù)據(jù)處理作業(yè)請求還是作業(yè)信息查詢請求;如果是數(shù)據(jù)查詢請求,則將其發(fā)送到Cassandra查詢模塊,如果是提交數(shù)據(jù)處理作業(yè)請求或作業(yè)信息查詢請求,則將其發(fā)送到作業(yè)調(diào)度模塊; Cassandra查詢模塊用于根據(jù)接收來自于用戶接口模塊的數(shù)據(jù)查詢請求在Cassandra系統(tǒng)中進(jìn)行查詢,并將查詢的結(jié)果返回到用戶接口模塊; 作業(yè)調(diào)度模塊用于將提交數(shù)據(jù)處理作業(yè)請求對應(yīng)的作業(yè)提交給作業(yè)隊列模塊; 作業(yè)調(diào)度模塊還用于判斷該作業(yè)信息查詢請求對應(yīng)的作業(yè)信息是否為作業(yè)追蹤器正在處理中的作業(yè)信息,若是,則直接將該作業(yè)信息返回給用戶接口模塊,否則在作業(yè)隊列模塊中查詢是否存在有對應(yīng)的作業(yè)信息,如果有則將該作業(yè)信息返回給用戶接口模塊,否則查詢磁盤的日志文件中是否存在有該作業(yè)信息,如果有則將該作業(yè)信息返回給用戶接口模塊,否則返回作業(yè)不存在信息給用戶接口模塊; 作業(yè)隊列模塊用于將來自于作業(yè)調(diào)度模塊的作業(yè)添加到其作業(yè)隊列中,并將作業(yè)隊列中隊首的作業(yè)傳送到作業(yè)追蹤器; 作業(yè)追蹤器用于將來自于作業(yè)隊列模塊的作業(yè)拆分成多個子任務(wù),將每個子任務(wù)發(fā)送到各個子節(jié)點的任務(wù) 追蹤器,將存儲端中存儲的與該作業(yè)對應(yīng)的待處理數(shù)據(jù)的存儲位置信息以及存儲端的網(wǎng)絡(luò)拓?fù)湫畔魉偷捷斎肽K,并將處理后數(shù)據(jù)的存儲位置信息傳送到輸出豐吳塊; 任務(wù)追蹤器還用于接收來自主節(jié)點的作業(yè)追蹤器的子任務(wù),并將該子任務(wù)發(fā)送到Mapreduce 模塊; Mapreduce模塊用于根據(jù)子任務(wù)請求輸入模塊從存儲端獲取待處理數(shù)據(jù); 輸入模塊用于根據(jù)來自作業(yè)追蹤器的、與該作業(yè)對應(yīng)的待處理數(shù)據(jù)的存儲位置信息以及存儲端的網(wǎng)絡(luò)拓?fù)湫畔拇鎯Χ双@取待處理數(shù)據(jù),并將待處理數(shù)據(jù)發(fā)送到Mapreduce模塊; Mapreduce模塊還用于對待處理數(shù)據(jù)進(jìn)行計算,并將計算結(jié)果傳送到輸出模塊; 輸出模塊用于根據(jù)來自于作業(yè)追蹤器的、處理后數(shù)據(jù)的存儲位置信息將計算結(jié)果發(fā)送到存儲端中的對應(yīng)位置。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)并行處理系統(tǒng),其特征在于,Cassandra查詢模塊維護(hù)一個Cassandra連接池和一個超時連接,當(dāng)收到一個用戶查詢請求,首先檢查當(dāng)前超時連接是否超時,若沒有超時,則直接使用當(dāng)前連接向數(shù)據(jù)庫提交查詢請求,如果當(dāng)前連接已超時,則釋放當(dāng)前連接,并從其維護(hù)的連接池中請求一個連接作為當(dāng)前的連接,并使用當(dāng)前連接向數(shù)據(jù)庫提交查詢請求。當(dāng)向數(shù)據(jù)庫提交數(shù)據(jù)查詢請求之后,其等待數(shù)據(jù)庫返回查詢結(jié)果,并將查詢結(jié)果轉(zhuǎn)發(fā)給用戶接口模塊。
3.根據(jù)權(quán)利要求1所述的數(shù)據(jù)并行處理系統(tǒng),其特征在于,作業(yè)追蹤器正在處理中的作業(yè)信息包括作業(yè)進(jìn)度和資源使用率信息。
4.根據(jù)權(quán)利要求1所述的數(shù)據(jù)并行處理系統(tǒng),其特征在于,每個子任務(wù)都是由一個map或者reduce任務(wù)構(gòu)成,map和reduce任務(wù)執(zhí)行用戶上傳的作業(yè)包中的map函數(shù)和reduce函數(shù),每個map函數(shù)處理根據(jù)其對應(yīng)的輸入模塊的配置,讀取存儲在本地Cassandra節(jié)點的一段數(shù)據(jù)記錄并處理。
5.根據(jù)權(quán)利要求1所述的數(shù)據(jù)并行處理系統(tǒng),其特征在于,主節(jié)點的信息流向為:用戶向用戶接口模塊提交數(shù)據(jù)查詢請求或數(shù)據(jù)處理作業(yè)請求,其中,數(shù)據(jù)查詢請求將被用戶接口模塊轉(zhuǎn)發(fā)至Cassandra數(shù)據(jù)查詢模塊,由Cassandra數(shù)據(jù)查詢模塊完成數(shù)據(jù)查詢,并將查詢結(jié)果返回給用戶接口模塊,用戶接口模塊再將查詢結(jié)果返回給用戶,而對于用戶提交的數(shù)據(jù)處理作業(yè)請求,用戶接口模塊將作業(yè)提交給作業(yè)調(diào)度模塊,作業(yè)調(diào)度模塊按照調(diào)度策略將作業(yè)加入到作業(yè)隊列模塊,待系統(tǒng)有空閑的任務(wù)槽時,作業(yè)調(diào)度模塊從作業(yè)隊列模塊中取出隊首作業(yè),提交給作業(yè)追蹤器,作業(yè)追蹤器根據(jù)個子節(jié)點任務(wù)追蹤器上報的狀態(tài),將作業(yè)分割為多個任務(wù),并分發(fā)給各個子節(jié)點上的任務(wù)追蹤器完成MapReduce任務(wù),在作業(yè)處理的過程中,作業(yè)追蹤器不斷向作業(yè)調(diào)度模塊匯報當(dāng)前作業(yè)進(jìn)度、作業(yè)狀態(tài)等信息,作業(yè)調(diào)度模塊將當(dāng)前作業(yè)信息返回給用戶接口模塊,用戶從用戶接口模塊獲得當(dāng)前的作業(yè)信
6.根據(jù)權(quán)利要求1所述的數(shù)據(jù)并行處理系統(tǒng),其特征在于,輸入模塊維護(hù)一個面向本地Cassandra存儲端的連接池,從作業(yè)配置文件中獲取Cassandra數(shù)據(jù)庫的關(guān)鍵字空間和列簇名,調(diào)用Cassandra中的一致性哈希算法來確定存儲在本地節(jié)點的數(shù)據(jù)記錄,然后Cassandra存儲端中讀取 存儲在本地節(jié)點中的數(shù)據(jù)記錄,并把數(shù)據(jù)記錄格式化為鍵值對形式,向map函數(shù)推送鍵值對數(shù)據(jù)。
7.根據(jù)權(quán)利要求1所述的數(shù)據(jù)并行處理系統(tǒng),其特征在于,Mapreduce模塊采用Map函數(shù)對本地數(shù)據(jù)記錄進(jìn)行計算,將計算得到的中間結(jié)果鍵值對輸出到Hadoop的本地磁盤臨時文件中,Hadoop系統(tǒng)對這些中間結(jié)果鍵值對進(jìn)行排序和按鍵進(jìn)行合并,再由reduce函數(shù)對排序和合并后的中間結(jié)果鍵值對進(jìn)行計算,并將最終的計算結(jié)果輸出給輸出模塊。
8.根據(jù)權(quán)利要求1所述的數(shù)據(jù)并行處理系統(tǒng),其特征在于,輸出模塊維護(hù)了一個面向本地Cassandra存儲端的連接池,從作業(yè)配置文件中獲取數(shù)據(jù)輸出的關(guān)鍵字空間和列簇名,把每一個MapReduce輸出的鍵值對轉(zhuǎn)換為一個Cassandra列,存入到Cassandra本地存儲端之中。
9.根據(jù)權(quán)利要求1所述的數(shù)據(jù)并行處理系統(tǒng),其特征在于,位于每個子節(jié)點上的Cassandra存儲端和子節(jié)點上的輸入模塊和輸出模塊進(jìn)行交互,用于存放原始數(shù)據(jù)和數(shù)據(jù)處理結(jié)果。
全文摘要
本發(fā)明公開了一種基于Cassandra的數(shù)據(jù)并行處理系統(tǒng),包括Hadoop主節(jié)點、多個Hadoop子節(jié)點以及位于Hadoop子節(jié)點上的Cassandra存儲端,主節(jié)點包括用戶接口模塊、Cassandra查詢模塊、作業(yè)調(diào)度模塊、作業(yè)隊列模塊、作業(yè)追蹤器,子節(jié)點包括任務(wù)追蹤器、輸入模塊、輸出模塊以及Mapreduce模塊,用戶接口模塊用于接收用戶請求,并判斷用戶請求的類型是數(shù)據(jù)查詢請求、提交數(shù)據(jù)處理作業(yè)請求還是作業(yè)信息查詢請求;如果是數(shù)據(jù)查詢請求,則將其發(fā)送到Cassandra查詢模塊,如果是提交數(shù)據(jù)處理作業(yè)請求或作業(yè)信息查詢請求,則將其發(fā)送到作業(yè)調(diào)度模塊。本發(fā)明具有可靠性高、擴展性好、吞吐率高的優(yōu)勢以及針對數(shù)據(jù)簡單查詢快速響應(yīng)的能力,同時又具備對海量數(shù)據(jù)的復(fù)雜處理能力。
文檔編號G06F17/30GK103106249SQ201310006128
公開日2013年5月15日 申請日期2013年1月8日 優(yōu)先權(quán)日2013年1月8日
發(fā)明者石宣化, 金海 , 吳松, 劉煒 申請人:華中科技大學(xué)