邱麗娟
(廈門南洋職業(yè)學(xué)院,福建 廈門 361102)
大數(shù)據(jù)處理平臺Spark基礎(chǔ)實踐研究
邱麗娟
(廈門南洋職業(yè)學(xué)院,福建 廈門 361102)
Spark是主流的大數(shù)據(jù)并行計算框架。文章將通過幾段Scala腳本,演示在Spark環(huán)境下通過Map-Reduce框架處理大數(shù)據(jù)。
大數(shù)據(jù);Spark;Map-Reduce 框架
Spark基于內(nèi)存計算,提高了在大數(shù)據(jù)環(huán)境下數(shù)據(jù)處理的實時性。與很多分布式軟件系統(tǒng)相同,用戶可以將Spark部署在大量廉價的Linux硬件之上,形成性價比很高的計算集群。Spark提供了一個更快、更通用的數(shù)據(jù)處理平臺。和Hadoop相比,Spark可以讓程序在內(nèi)存中運行時速度提升100倍,或者在磁盤上運行時速度提升10倍。在100 TB Daytona GraySort比賽中,Spark戰(zhàn)勝了Hadoop,它只使用了十分之一的內(nèi)在,但運行速度提升了3倍。Spark也已經(jīng)成為針對PB級別數(shù)據(jù)排序的最快的開源引擎。
理解Spark大數(shù)據(jù)處理,一個關(guān)鍵概念便是RDD。由于Map-Reduce Schema on Read處理方式會引起較大的處理開銷。Spark抽象出分布式內(nèi)存存儲結(jié)構(gòu)彈性分布式數(shù)據(jù)集RDD進行數(shù)據(jù)的存儲。RDD模型很適合粗粒度的全局數(shù)據(jù)并行計算,但不適合細粒度的、需要異步更新的計算。RDD是Spark的基本計算單元,一組RDD可形成執(zhí)行的有向無環(huán)圖RDD Graph。
Spark的整體工作流程為:客戶端提交應(yīng)用,主節(jié)點找到一個工作節(jié)點啟動Driver,Driver向主節(jié)點或者資源管理器申請資源,之后將應(yīng)用轉(zhuǎn)化為RDD Graph,再由DAGScheduler將RDD Graph轉(zhuǎn)化為Stage的有向無環(huán)圖提交給TaskScheduler,由TaskScheduler提交任務(wù)給Executor執(zhí)行。
單詞計數(shù)是最常見的大數(shù)據(jù)處理場景,也是理解Map-Reduce的最佳范例。
所謂Map-Reduce,就是指把任意復(fù)雜的計算任務(wù),分解為兩個函數(shù):(1)map函數(shù):接受一個鍵值對,值是一行數(shù)據(jù),鍵是根據(jù)值計算獲得的哈希。map函數(shù)產(chǎn)生一組中間鍵值對,Map-Reduce框架會將map函數(shù)產(chǎn)生的中間鍵值對當中的鍵相同的值傳遞給reduce函數(shù)。(2)reduce函數(shù):接受一個中間鍵值對,鍵是唯一的,值是一個數(shù)組。reduce對值進行歸并。
正是借助Map-Reduce框架,才解決了把計算任務(wù)“切片”交給大規(guī)模集群的問題,任務(wù)得以并行計算,最后匯總結(jié)果。這里為簡化起見,不考慮標點符號對計算結(jié)果的影響,并假設(shè)所有的單詞之間以空格間隔。
倒排索引(inverted index)源于實際應(yīng)用中需要根據(jù)屬性的值來查找記錄。在索引表中,每一項均包含一個屬性值和一個具有該屬性值的各記錄的地址。由于記錄的位置由屬性值確定,而不是由記錄確定,因而稱為倒排索引。
搜索引擎的關(guān)鍵步驟便是建立倒排索引。相當于為海量的網(wǎng)頁做了一個索引,用戶想看與哪一個主題相關(guān)的內(nèi)容,直接根據(jù)索引即可找到相關(guān)的頁面。
假設(shè)存在6篇文章,每篇文章的ID已知,文章ID與文章內(nèi)容之間以Tab建間隔:
對以上文章創(chuàng)建倒排索引的Scala程序如下:
/*讀取數(shù)據(jù),數(shù)據(jù)格式為一個大的HDFS文件中用 分隔不同的文件,用 分隔文件ID和文件內(nèi)容,用" "分隔文件內(nèi)的詞匯*/
/*將(詞,文檔ID)的數(shù)據(jù)進行聚集,相同詞對應(yīng)的文檔ID統(tǒng)計到一起,形成(詞,"文檔ID1,文檔ID2,文檔ID3……”),形成簡單的倒排索引*/
統(tǒng)計海量數(shù)據(jù)時,經(jīng)常需要預(yù)估中位數(shù),由中位數(shù)大致了解某列數(shù)據(jù),做機器學(xué)習(xí)和數(shù)據(jù)挖掘的很多公式中也需要用到中位數(shù)。
假設(shè)數(shù)據(jù)按照下面的格式存儲:1 2 3 4 5 6 8 9 11 12 13 15 18 20 22 23 25 27 29
計算中位數(shù)的思路是:將整體的數(shù)據(jù)分為K個桶,統(tǒng)計每個桶內(nèi)的數(shù)據(jù)量,然后統(tǒng)計整個數(shù)據(jù)量;根據(jù)桶的數(shù)量和總的數(shù)據(jù)量,可以判斷數(shù)據(jù)落在哪個桶里以及中位數(shù)的偏移量;取出這個中位數(shù)。Scala腳本如下:
Research on Spark basis practice of big data processing platform
Qiu Lijuan
(Xiamen Nanyang University, Xiamen 361102, China)
Spark is the major framework of parallel computing of big data. This article will illustrate how to process big data through Map-Reduce framework under the background of Spark by several Scala scripts.
big data; Spark; Map-Reduce framework
邱麗娟(1978— ),女,江西南昌,本科,講師;研究方向:程序設(shè)計。