文/王玉(河源職業(yè)技術(shù)學(xué)院)
作為專(zhuān)門(mén)負(fù)責(zé)大數(shù)據(jù)處理的Hadoop平臺(tái)與Spark 平臺(tái),為加快大數(shù)據(jù)計(jì)算與處理效率,確保大數(shù)據(jù)資源實(shí)現(xiàn)充分利用發(fā)揮了重要作用。而明確Hadoop 技術(shù)與Spark技術(shù)當(dāng)中的核心技術(shù),了解其生態(tài)系統(tǒng)等也是實(shí)現(xiàn)兩種技術(shù)深入應(yīng)用的根本前提。
因此本研究不僅可為人們深化對(duì)大數(shù)據(jù)時(shí)代下Hadoop技術(shù)與Spark 技術(shù)提供相應(yīng)的理論參考,同時(shí)也能為兩種技術(shù)的實(shí)踐應(yīng)用給予一定指導(dǎo)幫助。
1.計(jì)算模型
在基于大數(shù)據(jù)的Hadoop 技術(shù)中,其核心技術(shù)之一便是MapReduce 計(jì) 算 模 型。其 作 為Hadoop大數(shù)據(jù)處理平臺(tái)中的關(guān)鍵核心,本質(zhì)上屬于一個(gè)并行計(jì)算框架,使得Hadoop 平臺(tái)能夠有效完成大數(shù)據(jù)計(jì)算工作。
在該計(jì)算模型中,其需要先封裝諸多底層問(wèn)題,包括分割數(shù)據(jù)與數(shù)據(jù)并行處理等,令用戶能夠根據(jù)自身實(shí)際需要,確定實(shí)現(xiàn)相應(yīng)并行計(jì)算任務(wù)的邏輯,進(jìn)而有效實(shí)現(xiàn)分布式程序設(shè)計(jì)優(yōu)化。在計(jì)算時(shí),數(shù)據(jù)的存在形式固定為<key,value>鍵值對(duì),并在使用map 函數(shù)的基礎(chǔ)上配合使用reduce函數(shù)。其中前者通過(guò)采用key-value格式,在物理存儲(chǔ)設(shè)備上進(jìn)行源文件的讀取,而后運(yùn)用相同格式輸出。后者也選擇使用該格式在map 函數(shù)中進(jìn)行數(shù)據(jù)讀取,經(jīng)過(guò)計(jì)算模型處理后的數(shù)據(jù)將保持key-value 格式,被直接寫(xiě)入物理存儲(chǔ)設(shè)備中。
2.存儲(chǔ)系統(tǒng)
在Hadoop平臺(tái)中的另一大核心技術(shù)即HDFS 分布式存儲(chǔ)系統(tǒng),其作為Hadoop平臺(tái)中的存儲(chǔ)核心,可直接在各種廉價(jià)服務(wù)器上進(jìn)行部署與運(yùn)行,從而有效完成各類(lèi)文件尤其是超大文件的處理工作。在采用一次寫(xiě)入多次讀取的設(shè)計(jì)理念下,平臺(tái)中的分布式存儲(chǔ)系統(tǒng)將會(huì)分塊保存上傳至HDFS 內(nèi)的數(shù)據(jù)。在初代Jadoop 平臺(tái)中,HDFS系統(tǒng)的主要組成部分除客戶端節(jié)點(diǎn)外,同時(shí)還包括NameNode、DataNode與SecondaryNameNode 節(jié)點(diǎn)。其中,NameNode節(jié)點(diǎn)作為該分布式存儲(chǔ)系統(tǒng)當(dāng)中的重要管理節(jié)點(diǎn),用以對(duì)DataNode節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)的元數(shù)據(jù)信息進(jìn)行妥善存儲(chǔ),并對(duì)用戶請(qǐng)求進(jìn)行及時(shí)接收,而后將其接收得到的請(qǐng)求直接發(fā)送至DataNode節(jié)點(diǎn)中完成相應(yīng)操作。而在該分布式存儲(chǔ)系統(tǒng)當(dāng)中的SecondaryNameNode節(jié)點(diǎn),能夠?yàn)橄到y(tǒng)中的管理節(jié)點(diǎn)存儲(chǔ)用戶修改內(nèi)容提供相應(yīng)輔助作用,使得修改內(nèi)容能夠在磁盤(pán)中得到安全存儲(chǔ)。
隨著大數(shù)據(jù)技術(shù)的持續(xù)發(fā)展,用于大數(shù)據(jù)處理的Hadoop 平臺(tái)也從初代1.0 版本更新升級(jí)至2.0版本。初代版本中的Hadoop 平臺(tái)采用分布式設(shè)計(jì)理念,其主要構(gòu)成部分包括HDFS即分布式存儲(chǔ)系統(tǒng)以及MapReduce計(jì)算模型。在HDFS 中,有且僅有一個(gè)管理節(jié)點(diǎn)即NameNode節(jié)點(diǎn),但有若干物理存儲(chǔ)節(jié)點(diǎn)DataNode。升級(jí)至2.0 版本的Hadoop 平臺(tái),其組成部分除了原有的分布式存儲(chǔ)系統(tǒng)與計(jì)算模型外,還新增YARN即資源管理器。YARN的出現(xiàn)使得以往存在于Hadoop 平 臺(tái) 中 的jobTracker 單點(diǎn)瓶頸以及編程框架缺乏較高靈活性等問(wèn)題,在一定程度上得到有效改善。其通過(guò)令集群資源管理、作業(yè)管理各自保持較高獨(dú)立性,并分別交由resourceManager 與applicationMaster 負(fù)責(zé)進(jìn)行管理,這也使得jobTracker 負(fù)載可以得到相應(yīng)控制。集群當(dāng)中各節(jié)點(diǎn)的資源調(diào)度則統(tǒng)一交由container 負(fù)責(zé),在聯(lián)合平臺(tái)內(nèi)的各nodeManager 計(jì)算節(jié)點(diǎn)下,使得最新版本的Hadoop 平臺(tái)的數(shù)據(jù)計(jì)算框架更加完善。
Hadoop 在持續(xù)完善的過(guò)程中,出現(xiàn)了諸多新技術(shù),其圍繞Hadoop 核心技術(shù)共同構(gòu)成這一大數(shù)據(jù)處理平臺(tái)的生態(tài)系統(tǒng)。具體來(lái)說(shuō),各個(gè)客戶端根據(jù)自身實(shí)際需要,將其資源請(qǐng)求發(fā)送至Hadoop中的resourceManager 中,計(jì)算節(jié)點(diǎn)nodeManager 的節(jié)點(diǎn)狀態(tài)與其中Application Master 的資源請(qǐng)求也一并發(fā)送至resourceManager。同樣,各計(jì)算階段中的container 與Application Master 之間也相互保持MapReduce狀態(tài)連接。在Hadoop平臺(tái)的生態(tài)系統(tǒng)中,包含眾多子項(xiàng)目,其對(duì)應(yīng)的項(xiàng)目功能也不盡相同。例如其中的Hive與Hbase生態(tài)系統(tǒng)子項(xiàng)目,其對(duì)應(yīng)的項(xiàng)目功能分別為Hadoop 基礎(chǔ)上的文件系統(tǒng)數(shù)據(jù)倉(cāng)庫(kù)與面向列存儲(chǔ)的數(shù)據(jù)庫(kù)。Pig 作為Hadoop 生態(tài)系統(tǒng)當(dāng)中的一個(gè)子項(xiàng)目,主要用于完成大規(guī)模的數(shù)據(jù)分析與處理工作。
1.DAG
在大數(shù)據(jù)時(shí)代下,Spark 技術(shù)中的核心技術(shù)之一是DAG。數(shù)據(jù)執(zhí)行流程的存在形式始終為有向無(wú)環(huán)圖,其核心組成部分為RDD。在Spark技術(shù)中,用戶根據(jù)自身實(shí)際需要完成應(yīng)用邏輯提交操作后,Spark計(jì)算平臺(tái)將以此為依據(jù)進(jìn)行DAG 的繪制。而后結(jié)合各RDD相互間的依賴性與內(nèi)在關(guān)聯(lián),對(duì)DAG進(jìn)行stage劃分,即將其劃分成若干階段。但在完成DAG 全部繪制工作后并不立即進(jìn)入到執(zhí)行環(huán)節(jié),由此可見(jiàn)在Spark 計(jì)算平臺(tái)中,DAG 的主要作用在于對(duì)數(shù)據(jù)集進(jìn)行明確標(biāo)記。
根據(jù)商保公司經(jīng)辦城鄉(xiāng)居民基本醫(yī)保模式主要要素,總結(jié)分析商保機(jī)構(gòu)經(jīng)辦城鄉(xiāng)居民基本醫(yī)保的試點(diǎn)情況。依據(jù)理論研究和實(shí)踐結(jié)果,目前安徽省商保公司經(jīng)辦城鄉(xiāng)居民基本醫(yī)保試點(diǎn)初步形成的模式主要是委托經(jīng)辦模式,即:政府將業(yè)務(wù)委托商保公司,按照協(xié)議由后者獲取適當(dāng)?shù)慕?jīng)辦費(fèi)用,提供經(jīng)辦服務(wù)。在委托經(jīng)辦模式中,按照經(jīng)辦費(fèi)用來(lái)源已初步形成委托經(jīng)辦支付費(fèi)用模式、委托經(jīng)辦不支付費(fèi)用模式兩種。每一大類(lèi)中,按照經(jīng)辦服務(wù)內(nèi)容、經(jīng)辦費(fèi)用獲取方式、基金風(fēng)險(xiǎn)承擔(dān)實(shí)際運(yùn)行情況又可分不同的模式。見(jiàn)表2
2.RDD
在Spark 計(jì)算平臺(tái)當(dāng)中,RDD通過(guò)對(duì)平臺(tái)中的分布式內(nèi)存數(shù)據(jù)進(jìn)行抽象,轉(zhuǎn)換數(shù)據(jù)各項(xiàng)操作,使之成為RDD操作,因此Spark 技術(shù)中的數(shù)據(jù)操作以RDD作為其最為基礎(chǔ)性的一個(gè)單位。Transformation轉(zhuǎn)換以及action執(zhí)行共同組成RDD操作,其中前者中含有諸如map 與flatmap 以及nuion等在內(nèi)的諸多基本操作,而以count 與collect 等為代表的操作則歸屬于執(zhí)行操作范疇。針對(duì)轉(zhuǎn)換與執(zhí)行操作,Spark技術(shù)采用的機(jī)制也存在一定差異性。在Spark計(jì)算平臺(tái)中任何一項(xiàng)轉(zhuǎn)換操作均屬于惰性操作,也就是說(shuō)在轉(zhuǎn)換操作下,任意一個(gè)RDD雖然可以有效生成一個(gè)全新RDD,但在RDD新生成之后其并不會(huì)立即在Spark 計(jì)算平臺(tái)上進(jìn)行執(zhí)行。只有當(dāng)觸發(fā)執(zhí)行操作即action 時(shí)才會(huì)正式執(zhí)行轉(zhuǎn)換操作。
3.結(jié)構(gòu)部署
Spark 計(jì)算平臺(tái)內(nèi)的部署模式多種多樣,常見(jiàn)的部署模式主要包括以Mesos或Yarn 為基礎(chǔ)的部署模式。
在現(xiàn)階段的Spark當(dāng)中,最常使用的部署模式為建立在Yarn基礎(chǔ)上的部署模式,該部署模式通過(guò)對(duì)Hadoop中的Yarn 即資源管理器進(jìn)行充分利用,用以達(dá)到集群化管理Hadoop平臺(tái)內(nèi)各項(xiàng)資源的目的。值得注意的是,雖然Spark 平臺(tái)中的部署模式具有明顯的多樣化特征,但其基本組成部分基本一致。主 要 包 括mater 與driver、worker與clusterManager 等等,即控制節(jié)點(diǎn)與作業(yè)控制進(jìn)程、執(zhí)行節(jié)點(diǎn)與資源管理器等。而作業(yè)控制進(jìn)程在主控節(jié)點(diǎn)maters上,執(zhí)行節(jié)點(diǎn)和執(zhí)行單元一一對(duì)應(yīng),即一個(gè)執(zhí)行節(jié)點(diǎn)在Spark 計(jì)算平臺(tái)中通常只對(duì)與之相對(duì)應(yīng)的執(zhí)行單元進(jìn)程進(jìn)行有效維護(hù)。
為順應(yīng)大數(shù)據(jù)時(shí)代發(fā)展潮流,同時(shí)盡可能滿足多樣化的大數(shù)據(jù)計(jì)算需求,Spark技術(shù)也在不斷進(jìn)行更新升級(jí)。最新的Spark技術(shù)中使用的計(jì)算模型以內(nèi)存為基礎(chǔ),即內(nèi)存當(dāng)中統(tǒng)一緩存作業(yè)執(zhí)行過(guò)程中產(chǎn)生的各種中間數(shù)據(jù),并且Spark平臺(tái)抽象處理各作業(yè)使其成為各個(gè)DAG 圖,進(jìn)而有效優(yōu)化整體作業(yè)計(jì)算流程。相比于初代Spark計(jì)算平臺(tái),升級(jí)后的Spark平臺(tái)在無(wú)需計(jì)算shuffle的情況下便可以合并多項(xiàng)操作。與此同時(shí),shuffle操作中DAG 內(nèi)劃分出若干不同階段,對(duì)提高資源利用率,縮減資源等待時(shí)間等均發(fā)揮了重要作用。
Spark 的生態(tài)系統(tǒng)指的就是專(zhuān)門(mén)對(duì)應(yīng)該計(jì)算平臺(tái)的數(shù)據(jù)分析軟件棧,其組成部分包括Spark計(jì)算平臺(tái)專(zhuān)用的數(shù)據(jù)庫(kù)、機(jī)器學(xué)習(xí)算法庫(kù)等等。例如在該計(jì)算平臺(tái)生態(tài)系統(tǒng)的SQL 數(shù)據(jù)庫(kù)子項(xiàng)目中,對(duì)應(yīng)的項(xiàng)目功能為集成各種復(fù)雜數(shù)據(jù)分析算法,簡(jiǎn)化SQL 查詢,用戶訪問(wèn)的數(shù)據(jù)源也可以得到有機(jī)統(tǒng)一。而在Spark streaming 這一生態(tài)系統(tǒng)子項(xiàng)目中,其作為一種專(zhuān)門(mén)應(yīng)用在Spark 計(jì)算平臺(tái)中的流式數(shù)據(jù)計(jì)算工具,其內(nèi)部特殊的API 可以高效、精準(zhǔn)地開(kāi)發(fā)相關(guān)數(shù)據(jù)處理程序,加快數(shù)據(jù)分析計(jì)算與處理速度。MLib和GraphX 分別作為Spark 平臺(tái)上使用的分布式機(jī)器學(xué)習(xí)算法庫(kù)以及并行圖計(jì)算框架,同樣用于集中解決Spark 平臺(tái)上的各種數(shù)據(jù)計(jì)算與處理工作。
在大數(shù)據(jù)時(shí)代下,Hadoop 被廣泛應(yīng)用在各種場(chǎng)景中,包括日志處理、數(shù)據(jù)采集、挖掘與分析處理等。例如在離線日志處理中,Hadoop平 臺(tái) 中 的MapReduce可 有效分析各項(xiàng)用戶交易數(shù)據(jù),并以此為基礎(chǔ)進(jìn)行用戶類(lèi)型劃分,使之均有各自對(duì)應(yīng)的客戶群。對(duì)于電商企業(yè)而言,運(yùn)用Hadoop 平臺(tái)可使其能夠在充分了解各類(lèi)客戶群體及其實(shí)際需要下,有針對(duì)性地開(kāi)展?fàn)I銷(xiāo)活動(dòng),進(jìn)而擴(kuò)大企業(yè)自身經(jīng)濟(jì)效益規(guī)模。譬如阿里巴巴集團(tuán)通過(guò)利用Hadoop 大數(shù)據(jù)處理平臺(tái),在積極引入云計(jì)算等各項(xiàng)先進(jìn)信息技術(shù)下,建立起云梯系統(tǒng),在對(duì)涉及用戶交易的各類(lèi)信息數(shù)據(jù)進(jìn)行集中整合與統(tǒng)計(jì)分析下,確定不同的用戶類(lèi)型,并為電商企業(yè)推送與之相符合的客戶群,以便其能夠針對(duì)具體客戶開(kāi)展相應(yīng)的營(yíng)銷(xiāo)活動(dòng),實(shí)現(xiàn)企業(yè)精準(zhǔn)營(yíng)銷(xiāo)。再比如有部分企業(yè)通過(guò)依托Nutch 采集音樂(lè)頁(yè)面,借助Hadoop平臺(tái)中的MapReduce框架計(jì)算網(wǎng)頁(yè)評(píng)分,以此為依據(jù)有針對(duì)性地為用戶推送其感興趣的音樂(lè)。
2.應(yīng)用評(píng)價(jià)
根據(jù)Hadoop技術(shù)的應(yīng)用情況可知,在運(yùn)用MapReduce 作為大數(shù)據(jù)編程框架下,各種新計(jì)算節(jié)點(diǎn)加入至Hadoop 集群后,該節(jié)點(diǎn)具備的各種計(jì)算能力也會(huì)隨之加入其中,因此使得該計(jì)算框架在面向大數(shù)據(jù)的同時(shí)可以保持良好的伸縮性。
其編程模型相對(duì)簡(jiǎn)易,用戶在編程中僅僅只需要對(duì)應(yīng)用問(wèn)題中的應(yīng)用邏輯進(jìn)行考慮即可,無(wú)需關(guān)注其它底層細(xì)節(jié)問(wèn)題如負(fù)載均衡等。加之該大數(shù)據(jù)編程框架能夠同時(shí)處理海量數(shù)據(jù),對(duì)于提高數(shù)據(jù)處理效率也具有一定積極效用。
但其同樣也存在一定技術(shù)不足,例如面向磁盤(pán)存儲(chǔ)的MapReduce,其在運(yùn)行應(yīng)用程序時(shí)需要向磁盤(pán)輸入各種中間數(shù)據(jù),只有在有需要的情況下,才從磁盤(pán)內(nèi)調(diào)出數(shù)據(jù)將其輸出至內(nèi)存中,但由于磁盤(pán)速度并不與內(nèi)存速度保持一致,因此在數(shù)據(jù)計(jì)算時(shí)經(jīng)常容易出現(xiàn)高延遲的情況。此外,雖然利用map 函數(shù)與reduce函數(shù)能夠有效簡(jiǎn)化編程接口,實(shí)現(xiàn)MapReduce的編程作用。但也由于算子數(shù)量有限,因此隨著應(yīng)用問(wèn)題類(lèi)型的逐漸多樣,在實(shí)現(xiàn)各種應(yīng)用邏輯時(shí),MapReduce中有限的算子也會(huì)出現(xiàn)不適用的情況。
1.應(yīng)用場(chǎng)景
Spark技術(shù)目前也在處理流數(shù)據(jù)、解決多倫迭代問(wèn)題等領(lǐng)域中得到了充分運(yùn)用,并且獲得了一定的應(yīng)用成效。例如眼下已有研究人員在分析移動(dòng)Web 流量中運(yùn)用Spark流處理技術(shù),以流數(shù)據(jù)為基礎(chǔ)建立起相應(yīng)的Web 分析模型,在對(duì)用戶流量及其使用行為等各方面的信息數(shù)據(jù)進(jìn)行匯總整理后,運(yùn)用Spark技術(shù)對(duì)其進(jìn)行快速分析處理,從而使得網(wǎng)絡(luò)運(yùn)營(yíng)商可以更加真實(shí)、全面地掌握用戶行為,以便可以更有針對(duì)性地為用戶提供相關(guān)服務(wù)。在開(kāi)發(fā)推薦系統(tǒng)時(shí),同樣也可以運(yùn)用Spark技 術(shù),相 較 于Hadoop 平 臺(tái)中的MapReduce,使用Spark技術(shù)能夠有效訓(xùn)練推薦系統(tǒng)模型成為分鐘級(jí)推薦系統(tǒng)模型,避免出現(xiàn)高延遲情況,進(jìn)而達(dá)到實(shí)時(shí)、精準(zhǔn)推薦的效果。譬如京東與阿里巴巴等企業(yè),立足公司現(xiàn)下的主營(yíng)業(yè)務(wù)運(yùn)用Spark計(jì)算平臺(tái)自主研發(fā)實(shí)時(shí)推薦系統(tǒng),即便用戶行為偏好隨時(shí)發(fā)生變化,該系統(tǒng)也能夠幫助企業(yè)實(shí)時(shí)分析計(jì)算用戶行為偏好。
2.應(yīng)用評(píng)價(jià)
Spark技術(shù)中可在內(nèi)存中統(tǒng)一完成所有數(shù)據(jù)計(jì)算工作,且內(nèi)存負(fù)責(zé)集中存儲(chǔ)各種中間數(shù)據(jù),因此相較于MapReduce,Spark 的計(jì)算速度更快。另外,針對(duì)MapReduce 中算子數(shù)量與類(lèi)型有限的不足,Spark技術(shù)中有轉(zhuǎn)換型算子與執(zhí)行型算子,可高效完成復(fù)雜度較高的數(shù)據(jù)查詢與分析任務(wù)。除此之外,利用RDD這一核心技術(shù),以分布式抽象的形式劃分調(diào)入至內(nèi)存的各類(lèi)數(shù)據(jù),使得Spark 可以快速、準(zhǔn)確地完成海量數(shù)據(jù)的計(jì)算工作。
但其同樣也存在一定技術(shù)不足,例如其容量?jī)?nèi)存相對(duì)較小,并且在兩個(gè)以上的Spark 應(yīng)用數(shù)據(jù)相同的情況下,同一份數(shù)據(jù)需要緩存兩次,從而使得Spark 計(jì)算平臺(tái)面臨較大內(nèi)存壓力,并且也會(huì)影響垃圾回收速度,導(dǎo)致該技術(shù)在實(shí)際使用過(guò)程中出現(xiàn)不穩(wěn)定的情況。
綜上所述,在大數(shù)據(jù)時(shí)代下Hadoop 技術(shù)與Spark技術(shù)均為大數(shù)據(jù)的分析計(jì)算與快速處理,提供了重要的技術(shù)支持。兩者具有一定的技術(shù)優(yōu)勢(shì)與不足之處,因此我國(guó)未來(lái)在繼續(xù)加大對(duì)Hadoop 技術(shù)與Spark 技術(shù)的開(kāi)發(fā)力度下,還需要主動(dòng)立足實(shí)際,合理選用相應(yīng)的大數(shù)據(jù)處理技術(shù),從而使得大數(shù)據(jù)資源能夠真正得到深入、充分利用。