吳金壇 章超 李樹楠
摘要:隨著大數(shù)據(jù)的發(fā)展,傳統(tǒng)的集群混合部署模式逐漸暴露出管理難、資源競(jìng)爭(zhēng)、性能相互制約等問題。計(jì)算與存儲(chǔ)分離部署方案不斷發(fā)展,開始呈現(xiàn)其優(yōu)勢(shì),但是在解決計(jì)算與存儲(chǔ)資源彈性擴(kuò)展、高容錯(cuò)和高可靠問題上,且具備兼顧虛擬機(jī)和容器兩種部署方式的能力要求上,目前的方案都相形見絀。基于此,提出并實(shí)現(xiàn)了一種基于Ceph的大數(shù)據(jù)平臺(tái)分離存儲(chǔ)方案,解耦了計(jì)算與存儲(chǔ)之間的綁定關(guān)系,同時(shí)實(shí)現(xiàn)了資源的彈性利用,并兼容了虛擬機(jī)和容器的兩種大數(shù)據(jù)部署方式。最后我們搭建了試驗(yàn)環(huán)境對(duì)方案的功能及性能進(jìn)行了測(cè)試,對(duì)上述能力進(jìn)行了驗(yàn)證。
關(guān)鍵詞:大數(shù)據(jù);計(jì)算與存儲(chǔ)分離;Ceph
中圖分類號(hào):TP31文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)27-0024-04
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
1 引言
隨著大數(shù)據(jù)的發(fā)展,傳統(tǒng)的集群混合部署模式逐漸暴露出管理難、資源競(jìng)爭(zhēng)、性能相互制約等問題[1]。由于網(wǎng)絡(luò)已不再成為計(jì)算機(jī)的瓶頸,在這種情況下,計(jì)算與存儲(chǔ)分離部署方式開始顯現(xiàn)出它的優(yōu)勢(shì),不僅能解決上述問題,而且能實(shí)現(xiàn)計(jì)算與存儲(chǔ)資源的彈性擴(kuò)展,為企業(yè)大幅度降低成本[2][3]。HDFS( Ha-doop Distributed File System)作為主流的分布式系統(tǒng)基礎(chǔ)架構(gòu)Hadoop的默認(rèn)后端存儲(chǔ),具有高容錯(cuò)、高可靠性、高可擴(kuò)展性等優(yōu)點(diǎn),但也存在一些不足之處,不能復(fù)用給虛擬機(jī)和容器,同時(shí)采用主從模式[4],存在單點(diǎn)故障以及內(nèi)存受限等問題。針對(duì)上述這些問題,本文設(shè)計(jì)并實(shí)現(xiàn)了一種Hadoop對(duì)接Ceph對(duì)象存儲(chǔ)方案,采用Ceph對(duì)象存儲(chǔ)作為Hadoop的后端存儲(chǔ),避免了HDFS的不足之處,在實(shí)現(xiàn)了計(jì)算與存儲(chǔ)分離的情況下同時(shí)兼顧了虛擬機(jī)大數(shù)據(jù)與容器大數(shù)據(jù)的統(tǒng)一存儲(chǔ)。
2 Hadoop計(jì)算與存儲(chǔ)分離
2.1 Hadoop計(jì)算與存儲(chǔ)分離概述
Hadoop大數(shù)據(jù)集群的計(jì)算存儲(chǔ)分離指的是將Hadoop大數(shù)據(jù)處理系統(tǒng)中的計(jì)算組件和存儲(chǔ)組件分別部署到不同的物理服務(wù)器中,通過高速網(wǎng)絡(luò)實(shí)現(xiàn)計(jì)算組件和存儲(chǔ)組件的消息通信與數(shù)據(jù)傳輸。計(jì)算與存儲(chǔ)分離的優(yōu)點(diǎn):一、系統(tǒng)更健壯,計(jì)算存儲(chǔ)可以各自進(jìn)行檢錯(cuò),系統(tǒng)出錯(cuò)排查速度快,恢復(fù)效率高;二、系統(tǒng)調(diào)度更靈活,各自均衡負(fù)載實(shí)現(xiàn)簡(jiǎn)單;三、擴(kuò)展性好,根據(jù)需求動(dòng)態(tài)調(diào)整計(jì)算或存儲(chǔ)的資源。計(jì)算與存儲(chǔ)分離的缺點(diǎn):計(jì)算與存儲(chǔ)分離,使得中間數(shù)據(jù)傳輸更依賴于外部網(wǎng)絡(luò),數(shù)據(jù)的傳輸性能下降。
2.2 現(xiàn)有技術(shù)方案
Hadoop計(jì)算存儲(chǔ)分離方案目前有三種:第一種是Hadoop與HDFS分離部署方案,通過Yarn進(jìn)程遠(yuǎn)程調(diào)用;第二種是Ha-doop與S3A分離部署方案,通過S3A網(wǎng)關(guān)的形式把Hadoop的10請(qǐng)求以HTTP的方式訪問遠(yuǎn)程存儲(chǔ);第三種是Hadoop3.x提出的Provided Storage存儲(chǔ)方案,通過HDFS來遠(yuǎn)程訪問其他異構(gòu)存儲(chǔ)。
2.2.1 Hadoop與HDFS分離部署方案
圖1展示了Hadoop HDFS計(jì)算存儲(chǔ)分離方案。Hadoop2.x版本的主要進(jìn)程分為兩部分:一部分進(jìn)程運(yùn)行的是資源調(diào)度模塊Yarn,包括資源調(diào)度ResourceManager以及節(jié)點(diǎn)代理Nodma-nager;另一部分是分布式文件存儲(chǔ)(HDFS)的進(jìn)程,包括元數(shù)據(jù)處理NameNode以及數(shù)據(jù)管理DataNode。這兩個(gè)模塊可以獨(dú)立運(yùn)行,可以將NameNode和DataNode部署在一部分物理機(jī)上,而Yarn進(jìn)程部署在其他虛擬機(jī)、容器或者物理機(jī)上。二者的網(wǎng)絡(luò)能夠通信,則計(jì)算與存儲(chǔ)就可以分割開。
這種方案的優(yōu)點(diǎn)是配置簡(jiǎn)單,兼容性好,因?yàn)楠?dú)立使用Ha-doop與HDFS進(jìn)程,在網(wǎng)絡(luò)互適時(shí),通過對(duì)配置文件修改即可完成大數(shù)據(jù)集群配置的更改。相應(yīng)的缺點(diǎn)也很明顯,首先是HDFS屬于文件系統(tǒng),文件過多數(shù)據(jù)量過大會(huì)導(dǎo)致NameNode出現(xiàn)瓶頸;其次,服務(wù)器重啟后,NameNode和DataNode進(jìn)程需要手動(dòng)重啟;最后,多個(gè)大數(shù)據(jù)集群無法做到文件權(quán)限隔離。
2.2.2 Hadoop與S3A分離部署方案
圖2是以S3A網(wǎng)關(guān)的形式對(duì)提供了對(duì)象存儲(chǔ)服務(wù)的存儲(chǔ)進(jìn)行訪問的方案。Hadoop提供了aws相關(guān)的jar包來訪問帶有S3A網(wǎng)關(guān)形式的對(duì)象存儲(chǔ),這種訪問方式需要數(shù)據(jù)先經(jīng)過RGW網(wǎng)關(guān),再到物理磁盤設(shè)備上,很明顯會(huì)出現(xiàn)網(wǎng)絡(luò)帶寬瓶頸的問題,并且S3A網(wǎng)關(guān)是通過HTTP短連接的形式來進(jìn)行數(shù)據(jù)傳輸,對(duì)于大文件非常不友好,性能很差。
2.2.3 Hadoop Provided Storage分離部署方案
圖3展示了Hadoop Provided Storage的存儲(chǔ)方案[5],這種方案允許底層的HDFS調(diào)用其他存儲(chǔ),以達(dá)到計(jì)算與存儲(chǔ)分離的效果,但是這種方案的不足之處也比較明顯,首先是這種特性只支持文件的讀操作,不支持文件的寫操作,無法做到文件的更新。同時(shí)這種數(shù)據(jù)訪問路徑變長(zhǎng)理論上性能會(huì)有影響。另外這種特性較新,工業(yè)界還沒有確切的使用案例,因此在實(shí)驗(yàn)與分析章節(jié)沒有做相關(guān)實(shí)驗(yàn)。
3 基于Ceph的Hadoop分離存儲(chǔ)方案
Ceph因其高性能、高可用性、高可擴(kuò)展性、特性豐富等已經(jīng)成為私有云平臺(tái)OpenStack的默認(rèn)后端存儲(chǔ)[6][7]。Ceph提供三種存儲(chǔ)方式:對(duì)象存儲(chǔ)、塊存儲(chǔ)和文件存儲(chǔ)。相對(duì)于塊存儲(chǔ)和文件存儲(chǔ),對(duì)象存儲(chǔ)采用鍵值存儲(chǔ)機(jī)制,性能更好。
Hadoop的MapReduce框架底層使用的是HDFS分布式文件存儲(chǔ)系統(tǒng),然而Hadoop本身提供了文件系統(tǒng)的擴(kuò)展機(jī)制,使用者可以根據(jù)自己的需求來擴(kuò)展底層的存儲(chǔ)方式,達(dá)到替代HDFS的效果?;诖宋覀兲岢隽嘶贑eph的對(duì)象存儲(chǔ)實(shí)現(xiàn)Hadoop的分離存儲(chǔ)方案:系統(tǒng)底層使用Ceph對(duì)象存儲(chǔ),通過JNA的方式調(diào)用封裝了Ceph對(duì)象存儲(chǔ)接口的so文件,并在上層擴(kuò)展了Hadoop的文件系統(tǒng)接口,完成MapReduce、Spark等使用FileSystem接口作為文件系統(tǒng)交互層的大數(shù)據(jù)集群的遠(yuǎn)程文件調(diào)用。
如圖4,在Hadoop與Ceph對(duì)象存儲(chǔ)架構(gòu)中,Hadoop與Ceph對(duì)象存儲(chǔ)對(duì)接器包括Hadoop文件系統(tǒng)兼容接口模塊、Hadoop文件系統(tǒng)操作實(shí)現(xiàn)模塊、分布式存儲(chǔ)對(duì)象數(shù)據(jù)訪問模塊三部分組成,其功能如下:
Hadoop文件系統(tǒng)兼容接口模塊:兼容實(shí)現(xiàn)Hadoop計(jì)算組件所需的FileSystem抽象接口,以屏蔽Hadoop計(jì)算應(yīng)用對(duì)文件10的調(diào)用差異;實(shí)現(xiàn)Yarn資源調(diào)用所需要的文件系統(tǒng)接口,以實(shí)現(xiàn)對(duì)Ceph集群的讀寫。
Hadoop文件系統(tǒng)操作實(shí)現(xiàn)模塊:在HDFS接口下實(shí)現(xiàn)了文件系統(tǒng)中目錄、文件等的增、刪、改、查能力。
分布式存儲(chǔ)對(duì)象數(shù)據(jù)訪問模塊:對(duì)Hadoop文件系統(tǒng)操作實(shí)現(xiàn)模塊中所涉及的操作轉(zhuǎn)化為對(duì)Ceph集群中RADOS(包括OSD以及Moniter)集群的訪問。具體的調(diào)用流程如圖5所示:
1)首先通過Hadoop Common包中的Configuration配置類讀取core-site.xml配置文件內(nèi)容,獲取xml文件中fs.defaultFS配置項(xiàng)與fs.cephRgw.impl配置項(xiàng)的值,接著通過Java反射機(jī)制加載實(shí)現(xiàn)了Hadoop抽象文件接口FileSystem的具體實(shí)現(xiàn)類CephRg-wFileSystem。
2)Hadoop的計(jì)算應(yīng)用數(shù)據(jù)訪問請(qǐng)求調(diào)用Hadoop文件系統(tǒng)兼容接口模塊。上層的Yam資源管理器讀取fs.AbstractFile-System.cephRgw.impl的值,找到Y(jié)arn的DelegateToFileSystem抽象類的具體實(shí)現(xiàn)類CephRgw,發(fā)送數(shù)據(jù)傳遞的請(qǐng)求。
3)對(duì)于上層傳遞過來的1/0請(qǐng)求。Hadoop文件系統(tǒng)兼容接口模塊將做判斷對(duì)于符合要求的1/0請(qǐng)求傳遞給下層文件系統(tǒng)操作實(shí)現(xiàn)模塊,否則返回相應(yīng)的錯(cuò)誤。
4)文件系統(tǒng)操作實(shí)現(xiàn)模塊先對(duì)要操作的文件或者文件夾加上讀鎖或者寫鎖,然后將Java請(qǐng)求通過JNA框架轉(zhuǎn)換成對(duì)so動(dòng)態(tài)鏈接庫(kù)的C++請(qǐng)求,進(jìn)行數(shù)據(jù)訪問的操作。
5)接下來進(jìn)入到Ceph的具體實(shí)現(xiàn)中,文件系統(tǒng)操作實(shí)現(xiàn)模塊通過調(diào)用Ceph的LIBRADOS以及LIBRGW接口,先與遠(yuǎn)程集群上的Mon節(jié)點(diǎn)進(jìn)行通信,獲取到整個(gè)集群的Crush Map,再在本地通過Crush計(jì)算模塊計(jì)算出操作文件的具體位置,把對(duì)文件夾的操作轉(zhuǎn)換成對(duì)Bucket的操作,對(duì)文件的操作轉(zhuǎn)換成對(duì)Object的操作。此時(shí)還需要根據(jù)Crush算法計(jì)算出數(shù)據(jù)寫入的具體OSD并返回給文件讀寫模塊。
6)最后文件讀寫模塊跳過Mon節(jié)點(diǎn),直接和集群的OSD建立通信,并將讀寫請(qǐng)求封裝成Socket請(qǐng)求發(fā)送給具體Bucket或者Object所在的主OSD,由主OSD進(jìn)行讀寫,讀寫完成后將結(jié)果信息返回給文件讀寫模塊,文件讀寫模塊再把結(jié)果向上層傳遞,最終完成整個(gè)1/0數(shù)據(jù)流的操作。
從整個(gè)數(shù)據(jù)訪問流程中可以看出,Hadoop的1/0數(shù)據(jù)流到Ceph層面的數(shù)據(jù)流讀寫,不需要和Mon節(jié)點(diǎn)建立長(zhǎng)時(shí)間的連接。另外,Ceph集群搭建好之后,Crush Map短時(shí)間內(nèi)不太會(huì)出現(xiàn)比較大的變動(dòng),比較穩(wěn)定。直接和OSD進(jìn)行數(shù)據(jù)傳輸,不存在文件系統(tǒng)的元數(shù)據(jù)瓶頸以及S3A網(wǎng)關(guān)的單點(diǎn)瓶頸問題。
此外,Ceph分布式存儲(chǔ)可以通過其他服務(wù)接口向云計(jì)算等其他平臺(tái)提供存儲(chǔ)服務(wù),提供多種存儲(chǔ)方式。
4 實(shí)驗(yàn)與分析
本章將建立實(shí)驗(yàn)環(huán)境,首先對(duì)Hadoop計(jì)算存儲(chǔ)分離模塊的功能進(jìn)行驗(yàn)證,主要為HDFS的文件操作嘲。接著測(cè)試三種不同部署方案的性能,即Hadoop與HDFS分離部署方案、Ha-doop與S3A分離部署方案以及本文提出的基于Ceph對(duì)象存儲(chǔ)的Hadoop分離存儲(chǔ)方案。
實(shí)驗(yàn)環(huán)境總共分為兩部分,一部分是功能測(cè)試環(huán)境,另一部分是性能測(cè)試環(huán)境。
4.1 功能測(cè)試
功能測(cè)試實(shí)驗(yàn)環(huán)境有三部分:第一部分是Kubernetes集群,用來啟動(dòng)容器大數(shù)據(jù)集群;第二部分是OpenStack集群,用來啟動(dòng)虛擬機(jī)大數(shù)據(jù)集群;最后一部分是Ceph存儲(chǔ)環(huán)境,用來存儲(chǔ)容器集群與虛擬機(jī)集群的數(shù)據(jù),并供大數(shù)據(jù)集群調(diào)用。
如表1所示:Kubemetes集群有3臺(tái)服務(wù)器,以Kubernetesl為Master節(jié)點(diǎn),以Kubernetes2和Kubemetes3為Node節(jié)點(diǎn),提供容器編排服務(wù);OpenStack集群共有19臺(tái)服務(wù)器,以3臺(tái)服務(wù)器為控制節(jié)點(diǎn),以16臺(tái)服務(wù)器為計(jì)算節(jié)點(diǎn),使用Kolla自動(dòng)化部署工具搭建了基于容器的OpenStack平臺(tái),提供虛擬機(jī)服務(wù);Ceph集群共有10臺(tái)大存儲(chǔ)機(jī)器,其中Cephl-3為Mon節(jié)點(diǎn),10臺(tái)服務(wù)器上均部署OSD,對(duì)外提供Ceph對(duì)象存儲(chǔ)服務(wù)。
實(shí)驗(yàn)用到的軟件及版本信息如表2所示:
Hadoop提供了HDFS的Shell命令,可以直接操作Hadoop配置的文件系統(tǒng)。HDFS命令有多個(gè),包括文件以及文件夾的創(chuàng)建、查看、移動(dòng)、重命名、本地文件的上傳與下載功能、文件復(fù)制、文件權(quán)限修改等等。
Hadoop對(duì)文件系統(tǒng)的操作有很多,表3給出了使用Hadoop與Ceph存儲(chǔ)對(duì)接器的大數(shù)據(jù)集群支持的命令。從表中可以看出,相比于使用HDFS分布式文件系統(tǒng),使用對(duì)接器的Hadoop集群僅僅不能支持文件的追加。這是因?yàn)镃eph對(duì)象存儲(chǔ)暫時(shí)還不支持文件的追加操作。
從測(cè)試結(jié)果可以看出,Hadoop與Ceph對(duì)象存儲(chǔ)對(duì)接器實(shí)現(xiàn)了從文件到對(duì)象轉(zhuǎn)化的功能,提供了直接操作Ceph對(duì)象存儲(chǔ)的Java接口。通過這些接口,HBase、Spark等大數(shù)據(jù)處理框架都能良好的運(yùn)行。
4.2 性能測(cè)試
和功能性驗(yàn)證的實(shí)驗(yàn)環(huán)境相比,性能實(shí)驗(yàn)對(duì)硬件的要求要高,特別是大數(shù)據(jù)計(jì)算任務(wù),要求Ceph中存儲(chǔ)大量的數(shù)據(jù)。表
4 列出了本次性能測(cè)試使用的硬件環(huán)境。
為減少Hadoop計(jì)算任務(wù)所需時(shí)間,Hadoop集群使用十臺(tái)大存儲(chǔ)以及大內(nèi)存的服務(wù)器搭建。Ceph集群使用十臺(tái)大存儲(chǔ)服務(wù)器部署。另外,為了與HDFS的情況做對(duì)比,在測(cè)試完Ceph相關(guān)的性能之后,又在Ceph集群所在的服務(wù)器重新搭建了HDFS分布式文件系統(tǒng),Hadoop集群通過遠(yuǎn)程調(diào)用的方式進(jìn)行測(cè)試。
圖6給出了性能測(cè)試的網(wǎng)絡(luò)拓?fù)鋱D,Hadoop集群和Ceph集群之間的交換機(jī)帶寬在40Gb*3量級(jí)上,因此,網(wǎng)絡(luò)不會(huì)成為Hadoop計(jì)算任務(wù)的瓶頸。
表5給出了性能測(cè)試的相關(guān)命令。性能測(cè)試主要分成四個(gè)任務(wù):100G文件Put(上傳)、100G文件Get(下載)、TeraGen生成IT數(shù)據(jù)、TeraSort對(duì)IT數(shù)據(jù)進(jìn)行排序。分別對(duì)以下三種情況做性能測(cè)試:使用HDFS作為底層的文件存儲(chǔ);以S3A的方式對(duì)接Ceph對(duì)象存儲(chǔ);使用本論文實(shí)現(xiàn)的Hadoop與Ceph存儲(chǔ)對(duì)接器對(duì)接Ceph對(duì)象存儲(chǔ)。
圖7為100G文件Put、100G文件Get、TeraGen生成IT數(shù)據(jù)、TeraSort對(duì)1T數(shù)據(jù)排序的結(jié)果對(duì)比圖。從圖中可以看出,CephRGW存儲(chǔ)對(duì)接器與HDFS相比,100G文件Put、Get性能相差在10%以下,TeraGen、TeraSort性能在10%-20%之間,而S3A相比于HDFS,IOOG文件Put、Get性能相差30%-50%.TeraGen以及TeraSort性能相差一倍以上。實(shí)驗(yàn)結(jié)果表明CephRGW存儲(chǔ)對(duì)接器相比較HDFS性能差距不大,較S3A有較大性能提升。
5 結(jié)束語
本文提出了一種基于Ceph的大數(shù)據(jù)分離存儲(chǔ)方案,并對(duì)該方案的功能及性能進(jìn)行了測(cè)試。經(jīng)驗(yàn)證,該方案功能上已能達(dá)到要求,性能上也接近了原生的HDFS方案,可以應(yīng)用于實(shí)際的生產(chǎn)部署。
但方案仍有待完善之處,后續(xù)將從以下幾個(gè)方面開展工作:
第一,對(duì)于網(wǎng)絡(luò)I/O的問題,可以在此計(jì)算與存儲(chǔ)分離架構(gòu)下進(jìn)行緩存模塊設(shè)計(jì),進(jìn)一步提升系統(tǒng)性能。
第二,Ceph對(duì)象存儲(chǔ)由于采用CRUSH算法,沒有元數(shù)據(jù)服務(wù)器來存儲(chǔ)相關(guān)的目錄結(jié)構(gòu),故在做涉及rename命令操作的時(shí)候會(huì)影響到系統(tǒng)的性能,之后的工作可以重設(shè)rename機(jī)制,設(shè)計(jì)一個(gè)元數(shù)據(jù)管理模塊來對(duì)rename的源文件與目標(biāo)文件進(jìn)行管理。
第三,我們也對(duì)業(yè)界的商業(yè)存儲(chǔ)方案進(jìn)行了調(diào)研,發(fā)現(xiàn)華為的大數(shù)據(jù)分離存儲(chǔ)方案能夠較好地解決上述問題,后續(xù)將會(huì)對(duì)華為存儲(chǔ)開展相關(guān)功能與性能測(cè)試。
參考文獻(xiàn):
[1]馬一力,傅湘林,韓曉明,等,存儲(chǔ)與計(jì)算的分離[J].計(jì)算機(jī)研究與發(fā)展,2005,42(3):520-530.
[2]Bernstein P A,Reid C W,Das S,et al.Hyder—A Transac—tional Record Manager for Shared Flash[C]//Conference on Ci—dr.2011.
[3]Aguilem M K,MerchantA,Shah M A,etal.Sinfonia:anew para—digm for building scalable distributed systems[J].ACM Transac—tions on Computer Systems,2009,27(3):5.
[4]GhemawatS,GobioffH,Leung S T.The Goode file system[J].ACM SIGOPS 0perating Systems Review,2003,37(5):29—43.
[5]李大江.HDFS糾刪碼機(jī)制的優(yōu)化研究[D],哈爾濱:哈爾濱工業(yè)大學(xué),2018.
[6]0'DriscollA,DaugelaiteJ,Sleator R D.‘Big data,Hadoop andcloud computing in genomics[J].Joumal of Biomedical Infor—matics,2013,46(5):774—781.
[7]Jain P,GoelA,Gupta S C.Monitoringchecklist for cephobjectstorage infrastmcture[J]. CompmerScienceandItsApplicatioⅡs,2015:456:61 1—623..
[8]翟永東.Hadop分布式文件系統(tǒng)(HDFS)可靠性的研究與優(yōu)化[D].武漢:華中科技大學(xué),2011.
【通聯(lián)編輯:梁書】
作者簡(jiǎn)介:吳金壇(1968-),男,天津人,高級(jí)工程師,學(xué)士,研究方向?yàn)榻鹑谥Ц?章超(1994-),男,湖北荊州人,碩士在讀,研究方向:大數(shù)據(jù)與云計(jì)算;李樹楠(1993-),男,安徽阜陽人,碩士,研究方向:大數(shù)據(jù)與云計(jì)算。