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