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