本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)處理方法和系統(tǒng)。
背景技術(shù):
隨著移動(dòng)互聯(lián)網(wǎng)、云計(jì)算等信息技術(shù)的興起與迅猛發(fā)展,信息數(shù)據(jù)總量飛速膨脹,且數(shù)據(jù)類型也越來越豐富。
傳統(tǒng)的數(shù)據(jù)管理和分析技術(shù)是關(guān)系數(shù)據(jù)庫技術(shù),但是關(guān)系數(shù)據(jù)庫在數(shù)據(jù)更新、錯(cuò)誤恢復(fù)以及系統(tǒng)擴(kuò)展性等方面的工作效率低下,無法滿足對海量數(shù)據(jù)的處理需求。
而以海杜普(Hadoop)為代表的分布式計(jì)算框架雖然具有良好的可靠性、擴(kuò)展性和容錯(cuò)性等特點(diǎn),但HDFS(Hadoop Distributed File System,海杜普分布式文件系統(tǒng))在訪問很多辦公文件、GIS(Geography Information System,地理信息系統(tǒng))數(shù)據(jù)等小文件時(shí),其單一的Master架構(gòu)使得內(nèi)存中要保存大量小文件的元數(shù)據(jù)信息,而對于海量的小文件,HDFS的內(nèi)存無法支持,從而影響整個(gè)系統(tǒng)的存儲性能。同時(shí),在HDFS上每次打開一個(gè)文件都需要先在內(nèi)存中查詢文件的數(shù)據(jù)塊信息,在訪問海量小文件時(shí)需要處理大量的查詢,影響系統(tǒng)效率。
技術(shù)實(shí)現(xiàn)要素:
基于此,有必要針對海量數(shù)據(jù)處理性能及效率不佳的問題,提供一種高效、實(shí)時(shí)的數(shù)據(jù)處理方法和系統(tǒng)。
一種數(shù)據(jù)處理方法,包括步驟:
獲取待處理數(shù)據(jù)流;
通過流處理將待處理數(shù)據(jù)流以時(shí)間片為單位切分成數(shù)據(jù)塊;
獲取數(shù)據(jù)塊的數(shù)據(jù)塊分區(qū)標(biāo)識;
根據(jù)批量處理的時(shí)間將流處理分級為第一級流處理與第二級流處理,其中,第一級流處理對應(yīng)的批量處理時(shí)間小于第二級流處理對應(yīng)的批量處理時(shí)間;
將數(shù)據(jù)塊分區(qū)標(biāo)識通過第一級流處理進(jìn)行清洗后存儲至分布式存儲系統(tǒng);
將數(shù)據(jù)塊進(jìn)行所述第二級流處理,并將處理后的數(shù)據(jù)塊存儲至海杜普分布式文件系統(tǒng)。
一種數(shù)據(jù)處理系統(tǒng),包括:
數(shù)據(jù)流獲取模塊,用于獲取待處理數(shù)據(jù)流;
數(shù)據(jù)流分割模塊,用于通過流處理將待處理數(shù)據(jù)流以時(shí)間片為單位切分成數(shù)據(jù)塊;
數(shù)據(jù)塊分區(qū)標(biāo)識獲取模塊,用于獲取數(shù)據(jù)塊的數(shù)據(jù)塊分區(qū)標(biāo)識;
流處理分級模塊,用于根據(jù)批量處理的時(shí)間將流處理分級為第一級流處理與第二級流處理,其中,第一級流處理對應(yīng)的批量處理時(shí)間小于第二級流處理對應(yīng)的批量處理時(shí)間;
第一存儲模塊,用于將數(shù)據(jù)塊分區(qū)標(biāo)識通過第一級流處理進(jìn)行清洗后存儲至分布式存儲系統(tǒng);
第二存儲模塊,用于將數(shù)據(jù)塊進(jìn)行第二級流處理,并將處理后的數(shù)據(jù)塊存儲至海杜普分布式文件系統(tǒng)。
上述數(shù)據(jù)處理方法和系統(tǒng),首先獲取待處理數(shù)據(jù)流通過流處理將待處理數(shù)據(jù)流以時(shí)間片為單位切分成數(shù)據(jù)塊并獲取數(shù)據(jù)塊的數(shù)據(jù)塊分區(qū)標(biāo)識,之后根據(jù)批量處理的時(shí)間將流處理分級為第一級流處理與第二級流處理,其中,第一級流處理對應(yīng)的批量處理時(shí)間小于所述第二級流處理對應(yīng)的批量處理時(shí)間,將數(shù)據(jù)塊分區(qū)標(biāo)識通過第一級流處理進(jìn)行清洗后存儲至分布式存儲系統(tǒng),并提交數(shù)據(jù)塊進(jìn)入第二級流處理,數(shù)據(jù)塊經(jīng)第二級流處理的處理后存儲至海杜普分布式文件系統(tǒng)。這種數(shù)據(jù)處理方法和系統(tǒng)采用流處理分級機(jī)制,根據(jù)數(shù)據(jù)塊分區(qū)標(biāo)識和數(shù)據(jù)塊設(shè)定第一級流處理與第二級流處理,而流處理具有將流式計(jì)算分解成一系列短小的批處理作業(yè)的特性,因此通過小批量分級處理方式使得數(shù)據(jù)處理可以同時(shí)兼容批量和實(shí)時(shí)數(shù)據(jù)處理的邏輯和算法,低延遲地處理海量數(shù)據(jù),方便了一些需要?dú)v史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)聯(lián)合分析的特定應(yīng)用場合。通過上述處理,滿足了對海量數(shù)據(jù)的存儲及高效、實(shí)時(shí)處理性能的需求。
附圖說明
圖1為一實(shí)施例中數(shù)據(jù)處理方法的流程示意圖;
圖2為一實(shí)施例中數(shù)據(jù)處理方法中子步驟S100的流程示意圖;
圖3為二維分區(qū)存儲結(jié)構(gòu)示意圖;
圖4為基于海杜普海量數(shù)據(jù)分布式訪問系統(tǒng)的結(jié)構(gòu)示意圖;
圖5為一實(shí)施例中數(shù)據(jù)處理系統(tǒng)的結(jié)構(gòu)示意圖;
圖6為一實(shí)施例中數(shù)據(jù)處理系統(tǒng)中子模塊100的結(jié)構(gòu)示意圖。
具體實(shí)施方式
如圖1所示,在一個(gè)實(shí)施例中,一種數(shù)據(jù)處理方法,包括如下步驟:
步驟S100,獲取待處理數(shù)據(jù)流。
待處理數(shù)據(jù)流的來源包括爬蟲系統(tǒng)、日志系統(tǒng)和關(guān)系型數(shù)據(jù)庫MySQL或非關(guān)系型數(shù)據(jù)庫NoSQL等數(shù)據(jù),并對其進(jìn)行統(tǒng)一的調(diào)度和管理。原數(shù)據(jù)主要存儲于傳統(tǒng)的硬盤系統(tǒng)之上,主要存儲格式為文本日志文件以及數(shù)據(jù)庫文件。
步驟S200,通過流處理將待處理數(shù)據(jù)流以時(shí)間片為單位切分成數(shù)據(jù)塊。
Spark是一個(gè)基于內(nèi)存計(jì)算的開源的集群計(jì)算系統(tǒng),目的是讓數(shù)據(jù)分析更加快速,Spark是一種與Hadoop相似的開源集群計(jì)算環(huán)境,但是兩者之間還存在一些不同之處,這些有用的不同之處使Spark在某些工作負(fù)載方面表現(xiàn)得更加優(yōu)越,換句話說,Spark啟用了內(nèi)存分布數(shù)據(jù)集,除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負(fù)載。Spark是在Scala語言中實(shí)現(xiàn)的,它將Scala用作其應(yīng)用程序框架,與Hadoop不同,Spark和Scala能夠緊密集成,其中的Scala可以像操作本地集合對象一樣輕松地操作分布式數(shù)據(jù)集。盡管創(chuàng)建Spark是為了支持分布式數(shù)據(jù)集上的迭代作業(yè),但是實(shí)際上它是對Hadoop的補(bǔ)充,可以在Hadoop文件系統(tǒng)中并行運(yùn)行。雖然Spark與Hadoop有相似之處,但它提供了具有有用差異的一個(gè)新的集群計(jì)算框架,首先,Spark是為集群計(jì)算中的特定類型的工作負(fù)載而設(shè)計(jì),即那些在并行操作之間重用工作數(shù)據(jù)集的工作負(fù)載,為了優(yōu)化這些類型的工作負(fù)載,Spark引進(jìn)了內(nèi)存集群計(jì)算的概念,可在內(nèi)存集群計(jì)算中將數(shù)據(jù)集緩存在內(nèi)存中,以縮短訪問延遲。
Spark Streaming(流處理)是將流式計(jì)算分解成一系列短小的批處理作業(yè),這里的批處理引擎是Spark,也就是把Spark Streaming的輸入數(shù)據(jù)按照batch size(批處理大小),比如1秒,分成一段一段的數(shù)據(jù),每一段數(shù)據(jù)都轉(zhuǎn)換成Spark中的RDD(Resilient Distributed Dataset,彈性分布數(shù)據(jù)集),然后將Spark Streaming中對每段數(shù)據(jù)的操作變?yōu)獒槍park中對RDD的操作,將RDD經(jīng)過操作變成中間結(jié)果保存在內(nèi)存中,整個(gè)流式計(jì)算根據(jù)業(yè)務(wù)的需求可以對中間的結(jié)果進(jìn)行疊加,或者存儲到外部設(shè)備。
流處理把實(shí)時(shí)輸入數(shù)據(jù)流以時(shí)間片Δt,比如1秒為單位切分成一個(gè)個(gè)數(shù)據(jù)塊,流處理會(huì)把每個(gè)數(shù)據(jù)塊作為一個(gè)RDD,并使用RDD操作處理每一個(gè)數(shù)據(jù)塊。使用Spark Streaming編寫的程序與編寫Spark程序非常相似,在Spark程序中,主要通過操作RDD提供的接口實(shí)現(xiàn)數(shù)據(jù)的批處理,而在Spark Streaming中,則通過操作DStream(表示數(shù)據(jù)流的RDD序列)提供的接口,這些接口和RDD提供的接口類似。
步驟S300,獲取數(shù)據(jù)塊的數(shù)據(jù)塊分區(qū)標(biāo)識。
數(shù)據(jù)塊分區(qū)標(biāo)識是數(shù)據(jù)塊的標(biāo)識符,可以從數(shù)據(jù)塊的文件名中得到。早期的數(shù)據(jù)塊分區(qū)標(biāo)識是一個(gè)64位數(shù)隨機(jī)數(shù),當(dāng)時(shí)實(shí)現(xiàn)比較簡單,并沒有判重,所以如果兩個(gè)數(shù)據(jù)塊碰巧得到同樣的數(shù)據(jù)塊分區(qū)標(biāo)識,系統(tǒng)會(huì)誤認(rèn)為是多余的備份數(shù)據(jù)塊,而將其中一個(gè)刪除,這樣這個(gè)數(shù)據(jù)塊很有可能出錯(cuò),包含它的文件則損壞。解決的辦法有兩個(gè),一是記錄好所有使用過的數(shù)據(jù)塊分區(qū)標(biāo)識,以實(shí)現(xiàn)判重功能;二是以一種不會(huì)重復(fù)的方式生成數(shù)據(jù)塊分區(qū)標(biāo)識,比如順序生成。
步驟S400,根據(jù)批量處理的時(shí)間將流處理分級為第一級流處理與第二級流處理,其中,第一級流處理對應(yīng)的批量處理時(shí)間小于第二級流處理對應(yīng)的批量處理時(shí)間。
在對流處理分級設(shè)定過程中,考慮到數(shù)據(jù)塊分區(qū)標(biāo)識的數(shù)據(jù)小容量特性,以第一級流處理進(jìn)行拆分即可滿足實(shí)時(shí)性要求,即對應(yīng)的批量處理時(shí)間更快一些,而由于數(shù)據(jù)塊是具體的數(shù)據(jù)文件,在寫入海杜普分布式文件系統(tǒng)過程中需要較長延時(shí),否則會(huì)產(chǎn)生大量的碎文件,因此,在數(shù)據(jù)塊分區(qū)標(biāo)識確認(rèn)存在后,設(shè)置第二級流處理來處理數(shù)據(jù)塊,即對應(yīng)的批量處理時(shí)間更慢一些。具體的,第一級流處理為秒級流處理,第二級流處理為分鐘級流處理。
步驟S500,將數(shù)據(jù)塊分區(qū)標(biāo)識通過第一級流處理進(jìn)行清洗后存儲至分布式存儲系統(tǒng)。
具體來說,通過秒級流處理將數(shù)據(jù)塊分區(qū)標(biāo)識進(jìn)行初步清洗后存放至HBase(分布式存儲系統(tǒng))。
步驟S600,將數(shù)據(jù)塊進(jìn)行第二級流處理,并將處理后的數(shù)據(jù)塊存儲至海杜普分布式文件系統(tǒng)。
具體來說,經(jīng)過秒級流處理之后,提交數(shù)據(jù)塊進(jìn)入分鐘級流處理,數(shù)據(jù)塊經(jīng)分鐘級流處理的處理后存放至HDFS。
上述數(shù)據(jù)處理方法,首先獲取待處理數(shù)據(jù)流通過流處理將待處理數(shù)據(jù)流以時(shí)間片為單位切分成數(shù)據(jù)塊并獲取數(shù)據(jù)塊的數(shù)據(jù)塊分區(qū)標(biāo)識,之后根據(jù)批量處理的時(shí)間將流處理分級為第一級流處理與第二級流處理,其中,第一級流處理對應(yīng)的批量處理時(shí)間小于第二級流處理對應(yīng)的批量處理時(shí)間,將數(shù)據(jù)塊分區(qū)標(biāo)識通過第一級流處理進(jìn)行清洗后存儲至分布式存儲系統(tǒng),并提交數(shù)據(jù)塊進(jìn)入第二級流處理,數(shù)據(jù)塊經(jīng)第二級流處理的處理后存儲至海杜普分布式文件系統(tǒng)。這種數(shù)據(jù)處理方法采用流處理分級機(jī)制,根據(jù)數(shù)據(jù)塊分區(qū)標(biāo)識和數(shù)據(jù)塊設(shè)定第一級流處理與第二級流處理,而流處理具有將流式計(jì)算分解成一系列短小的批處理作業(yè)的特性,因此通過小批量分級處理方式使得數(shù)據(jù)處理可以同時(shí)兼容批量和實(shí)時(shí)數(shù)據(jù)處理的邏輯和算法,低延遲地處理海量數(shù)據(jù),方便了一些需要?dú)v史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)聯(lián)合分析的特定應(yīng)用場合。通過上述處理,滿足了對海量數(shù)據(jù)的存儲及高效、實(shí)時(shí)處理性能的需求。
在一個(gè)實(shí)施例中,如圖2所示,獲取待處理數(shù)據(jù)流的步驟S100具體可以包括:
步驟S120,接收數(shù)據(jù)讀取請求指令。
用戶可通過數(shù)據(jù)塊控件和網(wǎng)頁界面等形式的界面輸入數(shù)據(jù)讀取請求,數(shù)據(jù)請求包括用戶指定的數(shù)據(jù)文件所對應(yīng)的文件名稱、文件路徑等信息。
步驟S140,根據(jù)數(shù)據(jù)讀取請求指令,獲取待處理數(shù)據(jù)流。
在獲取數(shù)據(jù)讀取請求之后,解析數(shù)據(jù)讀取請求,獲取待處理數(shù)據(jù)流,包括數(shù)據(jù)流所在數(shù)據(jù)文件的名稱。
在一個(gè)實(shí)施例中,將數(shù)據(jù)塊分區(qū)標(biāo)識通過第一級流處理進(jìn)行清洗后存儲至分布式存儲系統(tǒng)的步驟具體包括:
根據(jù)數(shù)據(jù)塊的內(nèi)容進(jìn)行分區(qū),并獲取分區(qū)結(jié)果,根據(jù)分區(qū)結(jié)果將數(shù)據(jù)塊分區(qū)標(biāo)識存儲至分布式存儲系統(tǒng);
根據(jù)對數(shù)據(jù)塊訪問的頻數(shù)進(jìn)行等級劃分,將數(shù)據(jù)塊分區(qū)標(biāo)識存儲至分布式存儲系統(tǒng)。
以二維分區(qū)模式存儲數(shù)據(jù)塊分區(qū)標(biāo)識,二維分區(qū)存儲結(jié)構(gòu)示意圖如圖3所示,其中,第一維度為數(shù)據(jù)塊的內(nèi)容,第二維度為數(shù)據(jù)塊訪問的頻數(shù)。
在二維分區(qū)存儲結(jié)構(gòu)中,第一維度是根據(jù)數(shù)據(jù)塊的內(nèi)容進(jìn)行分區(qū)操作,將訪問的數(shù)據(jù)、日志、索引等不同文件類型存于不同的文件組,不同的文件組存儲于不同的磁盤分區(qū)。第二維度是根據(jù)訪問的頻數(shù)大小劃分磁盤分區(qū)的等級,訪問頻數(shù)越高,磁盤分區(qū)的等級越高,基于上述二維分區(qū)存儲模式進(jìn)行存儲,一方面能夠減少磁盤I/O(Input/Output,輸入/輸出)和系統(tǒng)負(fù)荷,同時(shí),基于二維的搜索能夠明顯降低高并發(fā)隨機(jī)訪問數(shù)據(jù)的場景下數(shù)據(jù)節(jié)點(diǎn)的壓力,提高系統(tǒng)的數(shù)據(jù)訪問效率。
在一個(gè)實(shí)施例中,針對高并發(fā)、小數(shù)據(jù)量、低延時(shí)要求的移動(dòng)應(yīng)用場景,提出了一種承載海量數(shù)據(jù)輕量級訪問的分布式處理系統(tǒng),整個(gè)系統(tǒng)包括數(shù)據(jù)采集、數(shù)據(jù)傳輸、數(shù)據(jù)處理及數(shù)據(jù)運(yùn)用四個(gè)部分,系統(tǒng)框架如圖4所示。
具體來說,首先由數(shù)據(jù)采集部分負(fù)責(zé)對來自爬蟲系統(tǒng)、日志系統(tǒng)和關(guān)系型數(shù)據(jù)庫MySQL或非關(guān)系型數(shù)據(jù)庫NOSQL等原始數(shù)據(jù)進(jìn)行統(tǒng)一的調(diào)度和管理。原始數(shù)據(jù)主要存在于傳統(tǒng)的硬盤系統(tǒng)之上,主要存儲格式為文本日志文件以及數(shù)據(jù)庫文件。然后由數(shù)據(jù)傳輸部分,將數(shù)據(jù)采集部分收集到的原始數(shù)據(jù),傳送給數(shù)據(jù)處理部分。傳送到數(shù)據(jù)處理部分的數(shù)據(jù)將存儲在HDFS文件系統(tǒng)之上,并統(tǒng)一經(jīng)過壓縮處理,以達(dá)到節(jié)省存儲空間和運(yùn)行時(shí)網(wǎng)絡(luò)帶寬、增加HDFS內(nèi)部的傳送效率的優(yōu)化目的。數(shù)據(jù)處理部分主要由MapReduce分布式計(jì)算框架、Hive數(shù)據(jù)倉庫工具組成的集群分布式數(shù)據(jù)分析應(yīng)用處理架構(gòu),對由數(shù)據(jù)采集部分傳送過來的原始數(shù)據(jù)進(jìn)行清洗和過濾,執(zhí)行計(jì)算作業(yè)、數(shù)據(jù)挖掘作業(yè)、數(shù)據(jù)分析作業(yè)、數(shù)據(jù)運(yùn)營等相關(guān)作業(yè)。經(jīng)過數(shù)據(jù)處理部分的處理之后,得到的結(jié)果數(shù)據(jù),統(tǒng)一存儲在HDFS系統(tǒng),主要以Hive表存儲為主,文件存儲格式主要有TEXTFILE、SEQUENCEFILE、RCFILE,形成結(jié)果集數(shù)據(jù)。在此基礎(chǔ)上,可以通過數(shù)據(jù)挖掘工具、OLAP(Online Analytical Processing,聯(lián)機(jī)分析處理)工具、DM報(bào)表等,對數(shù)據(jù)進(jìn)行進(jìn)一步業(yè)務(wù)邏輯計(jì)算、數(shù)據(jù)集成操作。針對移動(dòng)應(yīng)用場景在Hadoop架構(gòu)基礎(chǔ)上進(jìn)行了優(yōu)化,設(shè)計(jì)了一種新的隨機(jī)讀取模型,以提高實(shí)時(shí)響應(yīng)性能。該隨機(jī)讀取模型分為數(shù)據(jù)訪問前端和后端,其中,數(shù)據(jù)訪問前端采用進(jìn)程內(nèi)緩存機(jī)制,在數(shù)據(jù)節(jié)點(diǎn)上采用了針對小數(shù)據(jù)量隨機(jī)讀的數(shù)據(jù)訪問服務(wù),代替HDFS原生數(shù)據(jù)傳輸服務(wù),提高訪問性能。同時(shí),采用二維分區(qū)模式將數(shù)據(jù)分區(qū)存儲至緩存,平衡存儲性能和訪問性能,提高數(shù)據(jù)快速定位查詢能力。在內(nèi)存訪問中,隨機(jī)讀取后端結(jié)合Spark基于內(nèi)存計(jì)算的集群分布式算法,允許Hadoop集群中的應(yīng)用程序充分利用內(nèi)存進(jìn)行緩存,進(jìn)一步減少磁盤I/O達(dá)到性能提升。中間處理數(shù)據(jù)全部分區(qū)放入緩存中,Spark透明的在緩存中存儲數(shù)據(jù),只有在需要時(shí)才持久化寫入磁盤,從而大大減少數(shù)據(jù)處理過程中磁盤的讀寫,大幅度降低等待讀寫數(shù)據(jù)的時(shí)間。
海量數(shù)據(jù)隨機(jī)讀取框架由數(shù)據(jù)訪問前端和后端兩部分組成,在隨機(jī)讀取前端向用戶提供數(shù)據(jù)讀取功能的API(Application Programming Interface,應(yīng)用程序編程接口),隨機(jī)讀取后端運(yùn)行在HDFS集群的數(shù)據(jù)節(jié)點(diǎn)上,代替數(shù)據(jù)接收方處理前端發(fā)來的數(shù)據(jù)讀取請求。隨機(jī)讀取前端對已經(jīng)讀過的HDFS文件的元數(shù)據(jù)信息進(jìn)行緩存,包括文件所有的數(shù)據(jù)塊信息。如果用戶請求的數(shù)據(jù)文件在緩存中則直接從緩存中提取數(shù)據(jù)節(jié)點(diǎn)的地址,若用戶請求的數(shù)據(jù)文件不在緩存中,前端向名稱節(jié)點(diǎn)查詢該文件元數(shù)據(jù)信息。隨機(jī)讀取后端會(huì)定期掃描數(shù)據(jù)節(jié)點(diǎn)所在本地磁盤的數(shù)據(jù)存儲目錄,及時(shí)更新數(shù)據(jù)節(jié)點(diǎn)所在本地磁盤中的數(shù)據(jù)塊文件與分區(qū)ID之間的映射關(guān)系。
如圖5所示,在一個(gè)實(shí)施例中,一種數(shù)據(jù)處理系統(tǒng),包括:
數(shù)據(jù)流獲取模塊100,用于獲取待處理數(shù)據(jù)流。
待處理數(shù)據(jù)流的來源包括爬蟲系統(tǒng)、日志系統(tǒng)和關(guān)系型數(shù)據(jù)庫MySQL或非關(guān)系型數(shù)據(jù)庫NoSQL等數(shù)據(jù),并對其進(jìn)行統(tǒng)一的調(diào)度和管理。原數(shù)據(jù)主要存儲于傳統(tǒng)的硬盤系統(tǒng)之上,主要存儲格式為文本日志文件以及數(shù)據(jù)庫文件。
數(shù)據(jù)流分割模塊200,通過流處理將待處理數(shù)據(jù)流以時(shí)間片為單位切分成數(shù)據(jù)塊。
Spark是一個(gè)基于內(nèi)存計(jì)算的開源的集群計(jì)算系統(tǒng),目的是讓數(shù)據(jù)分析更加快速,Spark是一種與Hadoop相似的開源集群計(jì)算環(huán)境,但是兩者之間還存在一些不同之處,這些有用的不同之處使Spark在某些工作負(fù)載方面表現(xiàn)得更加優(yōu)越,換句話說,Spark啟用了內(nèi)存分布數(shù)據(jù)集,除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負(fù)載。Spark是在Scala語言中實(shí)現(xiàn)的,它將Scala用作其應(yīng)用程序框架,與Hadoop不同,Spark和Scala能夠緊密集成,其中的Scala可以像操作本地集合對象一樣輕松地操作分布式數(shù)據(jù)集。盡管創(chuàng)建Spark是為了支持分布式數(shù)據(jù)集上的迭代作業(yè),但是實(shí)際上它是對Hadoop的補(bǔ)充,可以在Hadoop文件系統(tǒng)中并行運(yùn)行。雖然Spark與Hadoop有相似之處,但它提供了具有有用差異的一個(gè)新的集群計(jì)算框架,首先,Spark是為集群計(jì)算中的特定類型的工作負(fù)載而設(shè)計(jì),即那些在并行操作之間重用工作數(shù)據(jù)集的工作負(fù)載,為了優(yōu)化這些類型的工作負(fù)載,Spark引進(jìn)了內(nèi)存集群計(jì)算的概念,可在內(nèi)存集群計(jì)算中將數(shù)據(jù)集緩存在內(nèi)存中,以縮短訪問延遲。
Spark Streaming(流處理)是將流式計(jì)算分解成一系列短小的批處理作業(yè),這里的批處理引擎是Spark,也就是把Spark Streaming的輸入數(shù)據(jù)按照batch size(批處理大小),比如1秒,分成一段一段的數(shù)據(jù),每一段數(shù)據(jù)都轉(zhuǎn)換成Spark中的RDD(Resilient Distributed Dataset,彈性分布數(shù)據(jù)集),然后將Spark Streaming中對每段數(shù)據(jù)的操作變?yōu)獒槍park中對RDD的操作,將RDD經(jīng)過操作變成中間結(jié)果保存在內(nèi)存中,整個(gè)流式計(jì)算根據(jù)業(yè)務(wù)的需求可以對中間的結(jié)果進(jìn)行疊加,或者存儲到外部設(shè)備。
Spark Streaming把實(shí)時(shí)輸入數(shù)據(jù)流以時(shí)間片Δt,比如1秒為單位切分成塊,Spark Streaming會(huì)把每塊數(shù)據(jù)作為一個(gè)RDD,并使用RDD操作處理每一塊數(shù)據(jù)。使用Spark Streaming編寫的程序與編寫Spark程序非常相似,在Spark程序中,主要通過操作RDD提供的接口實(shí)現(xiàn)數(shù)據(jù)的批處理,而在Spark Streaming中,則通過操作DStream(表示數(shù)據(jù)流的RDD序列)提供的接口,這些接口和RDD提供的接口類似。
數(shù)據(jù)塊分區(qū)標(biāo)識獲取模塊300,用于獲取數(shù)據(jù)塊的數(shù)據(jù)塊分區(qū)標(biāo)識。
流處理分級模塊400,用于根據(jù)批量處理的時(shí)間將流處理分級為第一級流處理與第二級流處理,其中,第一級流處理對應(yīng)的批量處理時(shí)間小于第二級流處理對應(yīng)的批量處理時(shí)間。
在對流處理分級設(shè)定過程中,考慮到數(shù)據(jù)塊分區(qū)標(biāo)識的數(shù)據(jù)小容量特性,以第一級流處理進(jìn)行拆分即可滿足實(shí)時(shí)性要求,即對應(yīng)的批量處理時(shí)間更快一些,而由于數(shù)據(jù)塊是具體的數(shù)據(jù)文件,在寫入海杜普分布式文件系統(tǒng)過程中需要較長延時(shí),否則會(huì)產(chǎn)生大量的碎文件,因此,在數(shù)據(jù)塊分區(qū)標(biāo)識確認(rèn)存在后,設(shè)置第二級流處理來處理數(shù)據(jù)塊,即對應(yīng)的批量處理時(shí)間更慢一些。具體的,第一級流處理為秒級流處理,第二級流處理為分鐘級流處理。
第一存儲模塊500,用于將數(shù)據(jù)塊分區(qū)標(biāo)識通過第一級流處理進(jìn)行清洗后存儲至分布式存儲系統(tǒng)。
具體來說,通過秒級流處理將數(shù)據(jù)塊分區(qū)標(biāo)識進(jìn)行初步清洗后存放至HBase(分布式存儲系統(tǒng))。
第二存儲模塊600,用于將所述數(shù)據(jù)塊進(jìn)行所述第二級流處理,并將處理后的數(shù)據(jù)塊存儲至海杜普分布式文件系統(tǒng)。
具體來說,經(jīng)過秒級流處理之后,提交數(shù)據(jù)塊進(jìn)入分鐘級流處理,數(shù)據(jù)塊經(jīng)分鐘級流處理的處理后存放至HDFS。
上述數(shù)據(jù)處理系統(tǒng),首先獲取待處理數(shù)據(jù)流通過流處理將待處理數(shù)據(jù)流以時(shí)間片為單位切分成數(shù)據(jù)塊并獲取數(shù)據(jù)塊的數(shù)據(jù)塊分區(qū)標(biāo)識,之后根據(jù)批量處理的時(shí)間將流處理分級為第一級流處理與第二級流處理,其中,第一級流處理對應(yīng)的批量處理時(shí)間小于第二級流處理對應(yīng)的批量處理時(shí)間,將數(shù)據(jù)塊分區(qū)標(biāo)識通過第一級流處理進(jìn)行清洗后存儲至分布式存儲系統(tǒng),并提交數(shù)據(jù)塊進(jìn)入第二級流處理,數(shù)據(jù)塊經(jīng)第二級流處理的處理后存儲至海杜普分布式文件系統(tǒng)。這種數(shù)據(jù)處理系統(tǒng)采用流處理分級機(jī)制,根據(jù)數(shù)據(jù)塊分區(qū)標(biāo)識和數(shù)據(jù)塊設(shè)定第一級流處理與第二級流處理,而流處理具有將流式計(jì)算分解成一系列短小的批處理作業(yè)的特性,因此通過小批量分級處理方式使得數(shù)據(jù)處理可以同時(shí)兼容批量和實(shí)時(shí)數(shù)據(jù)處理的邏輯和算法,低延遲地處理海量數(shù)據(jù),方便了一些需要?dú)v史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)聯(lián)合分析的特定應(yīng)用場合。通過上述處理,滿足了對海量數(shù)據(jù)的存儲及高效、實(shí)時(shí)處理性能的需求。
在一個(gè)實(shí)施例中,如圖6所示,數(shù)據(jù)流獲取模塊100包括:
指令接收單元120,用于接收數(shù)據(jù)讀取請求指令。
用戶可通過數(shù)據(jù)塊控件和網(wǎng)頁界面等形式的界面輸入數(shù)據(jù)讀取請求,數(shù)據(jù)請求包括用戶指定的數(shù)據(jù)文件所對應(yīng)的文件名稱、文件路徑等信息。
指令響應(yīng)單元140,用于根據(jù)數(shù)據(jù)讀取請求指令,獲取待處理數(shù)據(jù)流。
在獲取數(shù)據(jù)讀取請求之后,解析數(shù)據(jù)讀取請求,獲取待處理數(shù)據(jù)流,包括數(shù)據(jù)流所在數(shù)據(jù)文件的名稱,該文件名稱指示了數(shù)據(jù)文件中數(shù)據(jù)所在的分區(qū)等信息。
在一個(gè)實(shí)施例中,數(shù)據(jù)處理系統(tǒng)中的第一存儲模塊具體包括:
第一維度分區(qū)單元,用于根據(jù)所述數(shù)據(jù)塊的內(nèi)容進(jìn)行分區(qū),將所述數(shù)據(jù)塊分區(qū)標(biāo)識存儲至分布式存儲系統(tǒng);
第二維度分區(qū)單元,用于根據(jù)對所述數(shù)據(jù)塊訪問的頻數(shù)進(jìn)行等級劃分,將所述數(shù)據(jù)塊分區(qū)標(biāo)識存儲至分布式存儲系統(tǒng)。
以上所述實(shí)施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡潔,未對上述實(shí)施例中的各個(gè)技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說明書記載的范圍。
以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。