本發(fā)明涉及信息技術(shù)領(lǐng)域,特別涉及一種云計(jì)算平臺(tái)技術(shù)領(lǐng)域中基于flume與alluxio的數(shù)據(jù)快速收集的方法與裝置。
背景技術(shù):
在云計(jì)算時(shí)代,面對(duì)海量數(shù)據(jù),傳統(tǒng)的etl(extraction-transformation-loading)工具顯然力不從心,主要是數(shù)據(jù)轉(zhuǎn)換開銷太大,在性能上無法滿足海量數(shù)據(jù)的采集需求。為了提高海量數(shù)據(jù)收集的性能,目前已經(jīng)產(chǎn)生了各種成熟并且效果非常好的海量數(shù)據(jù)收集組件,比如常用的apache基金會(huì)的開源flume組件。flume是一個(gè)分布式、可靠和高可用的海量數(shù)據(jù)聚合系統(tǒng),其支持在系統(tǒng)中收集不同類型的數(shù)據(jù)源的數(shù)據(jù),同時(shí),提供對(duì)數(shù)據(jù)進(jìn)行簡單處理,并下沉到不同數(shù)據(jù)接收方的能力。
如圖1中所示,agent是一個(gè)獨(dú)立的flume數(shù)據(jù)收集進(jìn)程,它主要包括以下幾個(gè)子組件:
source子組件:負(fù)責(zé)接收數(shù)據(jù)單元,并將數(shù)據(jù)單元批量的放置到一個(gè)或多個(gè)channel子組件。
sink子組件:負(fù)責(zé)將數(shù)據(jù)單元傳輸?shù)较乱惶蜃罱K的目標(biāo)存儲(chǔ),成功后將數(shù)據(jù)單元從channel子組件中刪除。
channel子組件:位于source子組件與sink子組件之間,用于緩存?zhèn)鬟f進(jìn)來的數(shù)據(jù)單元。
sink子組件也稱作數(shù)據(jù)下沉組件,現(xiàn)有的數(shù)據(jù)下沉組件主要有hdfs-sink、kafka-sink、hbase-sink等組件,并且數(shù)據(jù)都是下沉到基于hdd(harddiskdrive)硬盤驅(qū)動(dòng)器的文件系統(tǒng),因此flume數(shù)據(jù)收集的數(shù)據(jù)下沉過程的性能瓶頸就在hdd的i/o操作上。即使將數(shù)據(jù)下沉到基于ssd(solidstatedrive)固態(tài)硬盤的文件系統(tǒng),不僅大大增加了硬件的投入成本,而且數(shù)據(jù)下沉組件的性能提升也有限。為此,迫切需要一種能夠提升數(shù)據(jù)收集性能的收集方法。
本發(fā)明中部分術(shù)語與解釋如下:
etl(extraction-transformation-loading)數(shù)據(jù)提取轉(zhuǎn)換和加載
hdfs(hadoopdistributedfilesystem)hadoop分布式文件系統(tǒng)
mem(memory)內(nèi)存
ssd(solidstatedrive)固態(tài)硬盤
hdd(harddiskdrive)硬盤驅(qū)動(dòng)器
lrfu(leastrecently/frequentlyused)最近最久/頻繁未使用
技術(shù)實(shí)現(xiàn)要素:
針對(duì)上述問題,本發(fā)明提出了一種基于flume與alluxio的數(shù)據(jù)快速收集裝置與收集方法。引入了alluxio(原名為tachyon)分布式內(nèi)存文件系統(tǒng),它是以內(nèi)存為中心的虛擬的分布式存儲(chǔ)系統(tǒng),它統(tǒng)一了數(shù)據(jù)訪問的方式,為上層的計(jì)算框架和底層存儲(chǔ)系統(tǒng)提供了溝通的橋梁。
利用alluxio組件的異步持久化與層次化存儲(chǔ)等特性降低硬件的投入成本,并且提升了flume的數(shù)據(jù)下沉組件的性能。層次化存儲(chǔ)是指alluxio根據(jù)i/o性能的高低從上向下配置存儲(chǔ)層,它支持mem、ssd、hdd這三種存儲(chǔ)類型。異步持久化是指數(shù)據(jù)塊寫入內(nèi)存中即可完成數(shù)據(jù)寫入的i/o操作,持久化操作由alluxio組件異步完成,因此節(jié)省了針對(duì)hdd或ssd的i/o操作時(shí)間,提升了數(shù)據(jù)下沉的效率。
更具體而言,本發(fā)明提出了一種基于flume與alluxio的數(shù)據(jù)收集裝置與數(shù)據(jù)收集方法。其中,該數(shù)據(jù)收集裝置包括:數(shù)據(jù)提取端、代理端、alluxio端以及數(shù)據(jù)保存端;
其中,數(shù)據(jù)提取端用于采集獲取海量的原始數(shù)據(jù)單元;
其中,代理端用于將數(shù)據(jù)提取端所提取的原始數(shù)據(jù)單元進(jìn)行數(shù)據(jù)轉(zhuǎn)換,得到統(tǒng)一格式的數(shù)據(jù);其具體包括:source子組件、channel子組件以及flume-alluxio-sink數(shù)據(jù)下沉組件;
其中,alluxio端用于接收來自代理端的經(jīng)過轉(zhuǎn)換處理過的數(shù)據(jù)單元,并將數(shù)據(jù)單元傳輸?shù)綌?shù)據(jù)保存端執(zhí)行數(shù)據(jù)異步持久化操作;
其中,數(shù)據(jù)保存端用于將數(shù)據(jù)單元持久化保存起來。
較佳地,source子組件負(fù)責(zé)接收數(shù)據(jù)單元,并將數(shù)據(jù)單元批量的放置到一個(gè)或多個(gè)channel子組件;
較佳地,channel子組件位于source與flume-alluxio-sink數(shù)據(jù)下沉組件之間,用于緩存進(jìn)來的數(shù)據(jù)單元。
較佳地,flume-alluxio-sink數(shù)據(jù)下沉組件負(fù)責(zé)將數(shù)據(jù)單元傳輸?shù)较乱惶蜃罱K的目標(biāo)存儲(chǔ),成功后將數(shù)據(jù)單元從channel中刪除。
較佳地,flume-alluxio-sink數(shù)據(jù)下沉組件具有alluxio系統(tǒng)的異步持久化特性,flume-alluxio-sink數(shù)據(jù)下沉組件的異步持久化使得channel組件中的數(shù)據(jù)寫入到內(nèi)存中就可以結(jié)束數(shù)據(jù)單元批量下沉的事務(wù),而數(shù)據(jù)的持久化則由alluxio的異步操作完成;
較佳地,flume-alluxio-sink數(shù)據(jù)下沉組件還具有alluxio系統(tǒng)的層次存儲(chǔ)特性,由于alluxio管理的數(shù)據(jù)塊不只在內(nèi)存中,它通過分配策略和回收策略管理數(shù)據(jù)塊的存放和移動(dòng),使得flume-alluxio-sink數(shù)據(jù)下沉組件增加了可利用的內(nèi)存容量。
本發(fā)明采用alluxio分布式內(nèi)存文件系統(tǒng)作為flumesink子組件的目標(biāo)存儲(chǔ),設(shè)計(jì)了flume-alluxio-sink數(shù)據(jù)下沉組件。通過利用alluxio系統(tǒng)的異步持久化特性提高了數(shù)據(jù)下沉的效率,通過利用alluxio系統(tǒng)的層次存儲(chǔ)特性后,使得flume-alluxio-sink數(shù)據(jù)下沉組件大大增加了可利用的內(nèi)存容量。
此外,本發(fā)明還提出一種基于flume與alluxio的數(shù)據(jù)收集方法,方案如下:
首先,安裝部署啟用層次存儲(chǔ)的alluxio集群;
第二步,設(shè)計(jì)實(shí)現(xiàn)flume-alluxio-sink數(shù)據(jù)下沉組件,并將設(shè)計(jì)的flume-alluxio-sink數(shù)據(jù)下沉組件的jar包分發(fā)到flume的每個(gè)節(jié)點(diǎn)機(jī)器的類加載路徑;
第三步,最后配置數(shù)據(jù)收集的flume-alluxio-sink數(shù)據(jù)下沉組件的type為alluxio。
完成以上三個(gè)步驟之后,第四步,啟動(dòng)所有flume組件的agent進(jìn)程,即可使用基于flume與alluxio的數(shù)據(jù)快速收集方法。
其中,第二步中,flume-alluxio-sink組件的實(shí)現(xiàn)主要包括以下幾部分內(nèi)容:
alluxio啟用分層存儲(chǔ)后配置分配策略、回收策略和預(yù)留空間;
設(shè)計(jì)實(shí)現(xiàn)繼承自abstractsink抽象類并實(shí)現(xiàn)了configurable接口的alluxioeventsink類;
定義flume-alluxio-sink組件sink類型參數(shù)的值為alluxio。
alluxioeventsink類實(shí)現(xiàn)configurable接口的configure(contextcontext)方法讀取有關(guān)alluxio的相關(guān)配置參數(shù);
alluxioeventsink類實(shí)現(xiàn)抽象類abstractsink的process()方法,通過循環(huán)處理接收到的數(shù)據(jù)單元,即將它們按照hdfs中對(duì)應(yīng)的文件格式寫入alluxio分布式內(nèi)存文件系統(tǒng);
針對(duì)hdfs中的不同文件類型,設(shè)計(jì)hdfs中多種格式數(shù)據(jù)文件與byte[]數(shù)組或bytebuffer二進(jìn)制緩沖區(qū)數(shù)據(jù)轉(zhuǎn)換類;
alluxio在將數(shù)據(jù)單元寫入alluxio之前會(huì)依賴所述的數(shù)據(jù)轉(zhuǎn)換類轉(zhuǎn)化數(shù)據(jù)類型。
本發(fā)明采用alluxio作為flume收集數(shù)據(jù)下沉的目標(biāo)存儲(chǔ)文件系統(tǒng),設(shè)計(jì)實(shí)現(xiàn)了數(shù)據(jù)下沉組件flume-alluxio-sink。flume-alluxio-sink組件通過利用alluxio的異步寫入和層次存儲(chǔ)特性降低了硬件的投入成本,并且提高了數(shù)據(jù)下沉的效率,提升了flume數(shù)據(jù)收集的性能。通過配置的分配策略將數(shù)據(jù)盡量平均地分配到集群中的每個(gè)節(jié)點(diǎn)上,避免了一定程度的數(shù)據(jù)傾斜問題。
附圖說明
圖1是現(xiàn)有技術(shù)中數(shù)據(jù)收集裝置的體系架構(gòu)圖;
圖2是本發(fā)明實(shí)施例中數(shù)據(jù)收集裝置的體系架構(gòu)圖;
圖3是本發(fā)明實(shí)施例中類繼承圖;
圖4是本發(fā)明實(shí)施例中數(shù)據(jù)收集方法的工作流程示意圖;
具體實(shí)施例
為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
參見圖2,本發(fā)明提供一種基于flume與alluxio的數(shù)據(jù)收集裝置1,其中,該數(shù)據(jù)收集裝置1包括:數(shù)據(jù)提取端2、代理端3、alluxio端4以及數(shù)據(jù)保存端5;
其中,數(shù)據(jù)提取端2用于采集獲取海量的原始數(shù)據(jù)單元;
其中,代理端3用于將數(shù)據(jù)提取端所提取的原始數(shù)據(jù)單元進(jìn)行數(shù)據(jù)轉(zhuǎn)換,得到統(tǒng)一格式的數(shù)據(jù);其具體包括:source子組件31、channel子組件32以及flume-alluxio-sink數(shù)據(jù)下沉組件33;
其中,alluxio端4用于接收來自代理端的經(jīng)過轉(zhuǎn)換處理過的數(shù)據(jù)單元,并將數(shù)據(jù)單元傳輸?shù)綌?shù)據(jù)保存端執(zhí)行數(shù)據(jù)異步持久化操作;
其中,數(shù)據(jù)保存端5用于將數(shù)據(jù)單元持久化保存起來。
較佳地,source子組件31負(fù)責(zé)接收數(shù)據(jù)單元,并將數(shù)據(jù)單元批量的放置到一個(gè)或多個(gè)channel子組件32;
較佳地,channel子組件32位于source子組件31與flume-alluxio-sink數(shù)據(jù)下沉組件33之間,用于緩存進(jìn)來的數(shù)據(jù)單元。
較佳地,flume-alluxio-sink數(shù)據(jù)下沉組件33負(fù)責(zé)將數(shù)據(jù)單元傳輸?shù)较乱惶蜃罱K的目標(biāo)存儲(chǔ),成功后將數(shù)據(jù)單元從channel子組件32中刪除。
較佳地,flume-alluxio-sink數(shù)據(jù)下沉組件33具有alluxio系統(tǒng)的異步持久化特性,flume-alluxio-sink數(shù)據(jù)下沉組件33的異步持久化使得channel組件中的數(shù)據(jù)寫入到內(nèi)存中就可以結(jié)束數(shù)據(jù)單元批量下沉的事務(wù),而數(shù)據(jù)的持久化則由alluxio的異步操作完成;
較佳地,flume-alluxio-sink數(shù)據(jù)下沉組件33還具有alluxio系統(tǒng)的層次存儲(chǔ)特性,由于alluxio管理的數(shù)據(jù)塊不只在內(nèi)存中,它通過分配策略和回收策略管理數(shù)據(jù)塊的存放和移動(dòng),使得flume-alluxio-sink數(shù)據(jù)下沉組件增加了可利用的內(nèi)存容量。
本實(shí)施例所提出的數(shù)據(jù)采集裝置采用alluxio分布式內(nèi)存文件系統(tǒng)作為flumesink子組件的目標(biāo)存儲(chǔ),設(shè)計(jì)了flume-alluxio-sink數(shù)據(jù)下沉組件。
本實(shí)施例中通過利用alluxio系統(tǒng)的異步持久化特性提高了數(shù)據(jù)下沉的效率,異步持久化使得flume-alluxio-sink數(shù)據(jù)下沉組件將channel組件中的數(shù)據(jù)寫入到內(nèi)存中就可以結(jié)束數(shù)據(jù)單元批量下沉的事務(wù),而數(shù)據(jù)的持久化則由alluxio的異步操作中完成。
本實(shí)施例中通過利用alluxio系統(tǒng)的層次存儲(chǔ)特性后,使得flume-alluxio-sink數(shù)據(jù)下沉組件大大增加了可利用的內(nèi)存容量(基本上不會(huì)用盡),這是由于alluxio管理的數(shù)據(jù)塊不只在內(nèi)存中,它通過分配策略和回收策略管理數(shù)據(jù)塊的存放和移動(dòng)。
另一方面,本發(fā)明的實(shí)施例提供一種基于flume與alluxio的數(shù)據(jù)收集方法,參見圖4,包括如下步驟:
步驟101,安裝部署并啟用層次存儲(chǔ)的alluxio集群;
步驟102,設(shè)計(jì)實(shí)現(xiàn)flume-alluxio-sink數(shù)據(jù)下沉組件,并將設(shè)計(jì)實(shí)現(xiàn)的flume-alluxio-sink數(shù)據(jù)下沉組件的jar包分發(fā)到flume的每個(gè)節(jié)點(diǎn)機(jī)器的類加載路徑;
步驟103,配置數(shù)據(jù)收集的flume-alluxio-sink數(shù)據(jù)下沉組件的type為alluxio;
完成以上三個(gè)步驟之后,執(zhí)行步驟104,啟動(dòng)所有flume組件的agent進(jìn)程,即可使用基于flume與alluxio的數(shù)據(jù)快速收集方法。
較佳地,所述步驟102中,flume-alluxio-sink組件的實(shí)現(xiàn)主要包括以下步驟:
步驟1021,alluxio啟用分層存儲(chǔ)后需要配置分配、回收策略和預(yù)留空間。
采用輪詢調(diào)度分配策略,即分配數(shù)據(jù)塊到有空間的最高存儲(chǔ)層,存儲(chǔ)目錄通過輪詢調(diào)度選出;采用lrfu回收策略,即基于權(quán)重分配的最近最少使用和最不經(jīng)常使用策略移除數(shù)據(jù)塊。每層存儲(chǔ)預(yù)留空間比例,一般mem預(yù)留0.4,ssd預(yù)留0.2,hdd不啟用預(yù)留。
步驟1022,設(shè)計(jì)實(shí)現(xiàn)繼承自abstractsink抽象類并實(shí)現(xiàn)了configurable接口的alluxioeventsink類,如圖3所示。
步驟1023,定義flume-alluxio-sink組件sink類型參數(shù)的值為alluxio。
步驟1024,alluxioeventsink類實(shí)現(xiàn)configurable接口的configure(contextcontext)方法讀取有關(guān)alluxio的相關(guān)配置參數(shù),如:alluxio的uri地址,文件路徑,文件類型,文件名稱生成策略,以及文件滾動(dòng)策略等。
步驟1025,alluxioeventsink類實(shí)現(xiàn)抽象類abstractsink的process()方法,通過循環(huán)處理接收到的數(shù)據(jù)單元,即將它們按照hdfs中對(duì)應(yīng)的文件格式(如文本、順序文件、avro文件等)寫入alluxio分布式內(nèi)存文件系統(tǒng)。
需要注意的是:寫入數(shù)據(jù)到文件的事務(wù)處理以及寫類型(writetype.async_through)等。
步驟1026,針對(duì)hdfs中的不同文件類型,設(shè)計(jì)研發(fā)了hdfs中text、sequence、avro等格式數(shù)據(jù)文件與byte[]數(shù)組或bytebuffer二進(jìn)制緩沖區(qū)數(shù)據(jù)轉(zhuǎn)換類。如textbytearrayconverter、textbytebufferconverter等類。
步驟1027,alluxio在將數(shù)據(jù)單元寫入alluxio之前會(huì)依賴上一條所述的轉(zhuǎn)換類轉(zhuǎn)化數(shù)據(jù)類型。
本發(fā)明采用alluxio作為flume收集數(shù)據(jù)下沉的目標(biāo)存儲(chǔ)文件系統(tǒng),設(shè)計(jì)實(shí)現(xiàn)了數(shù)據(jù)下沉組件flume-alluxio-sink。flume-alluxio-sink組件通過利用alluxio的異步寫入和層次存儲(chǔ)特性降低了硬件的投入成本,并且提高了數(shù)據(jù)下沉的效率,提升了flume數(shù)據(jù)收集的性能。通過配置的分配策略將數(shù)據(jù)盡量平均地分配到集群中的每個(gè)節(jié)點(diǎn)上,避免了一定程度的數(shù)據(jù)傾斜問題。
對(duì)所公開的實(shí)施例的上述說明,使本領(lǐng)域技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其他實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。