亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于Spark算子的序列化存儲優(yōu)化方法與流程

文檔序號:12719457閱讀:1020來源:國知局
一種基于Spark算子的序列化存儲優(yōu)化方法與流程

本發(fā)明涉及大數(shù)據(jù)、內存計算領域,更為具體地講,涉及一種自定義的序列化存儲策略。



背景技術:

大數(shù)據(jù)時代的到來,也引領了大數(shù)據(jù)處理平臺生態(tài)圈的不斷更新。由于MapReduce框架僅支持Map和Reduce兩種操作,迭代計算效率低下,在交互式處理及流式計算環(huán)境下具有局限性,于是,一種可同時進行批處理、流式計算、交互式計算的高效分布式計算框架Spark應運而生。該框架采用彈性分布式數(shù)據(jù)集(RDD)基于緩存進行迭代計算,以提高計算效率。

大部分Spark程序都具有“內存計算”的天性,所以集群中的所有資源:CPU、網(wǎng)絡帶寬或者是內存都有可能成為Spark程序的瓶頸。由于在迭代計算中,要提高計算效率,最好是將數(shù)據(jù)全部加載進內存,但在大數(shù)據(jù)計算環(huán)境下,必然會有大的數(shù)據(jù)集存在,且緩存資源有限匱乏的問題,因此,數(shù)據(jù)集序列化存儲成為關鍵。

為了提升緩存利用率,需要在RDD序列化過程中保證選出的RDD對象是后面較少會參與計算的RDD,而讓后面需要迭代計算或者多次使用的RDD盡量保留在緩存中,然而,由于在任務調度的過程中,需要根據(jù)不同的業(yè)務邏輯使用不同的算子去處理所得到的RDD集合,而由于不同算子的內部實現(xiàn)不同,導致的在RDD數(shù)據(jù)集轉換的過程中執(zhí)行效率不同,而數(shù)據(jù)集本身的大小也不同,另外,RDD的生命周期即某一RDD數(shù)據(jù)集的使用次數(shù),也對序列化存儲策略的選擇起到關鍵性的作用。因此,RDD序列化的選擇會受到算子運行代價、RDD執(zhí)行時間及RDD跨過的Action數(shù)量等因素的影響。

在當今大數(shù)據(jù)時代,大型公司、企事業(yè)單位、政府等機構業(yè)務系統(tǒng)復雜,數(shù)據(jù)形式多樣化,急需引入新的大數(shù)據(jù)處理平臺處理海量數(shù)據(jù),而Spark則是基于內存計算的高效分布式框架,因此其內存稱為處理數(shù)據(jù)速度提升的關鍵因素,但是由于緩存資源有限,在處理大數(shù)據(jù)集時仍然需要將部分數(shù)據(jù)序列化存儲到磁盤,影響計算性能,因此合理高效的序列化存儲策略,會成為提高基于緩存迭代計算效率亟待解決的問題。



技術實現(xiàn)要素:

有鑒于此,本發(fā)明的目的是提供一種基于Spark算子的序列化存儲優(yōu)化方法。該方法應用于現(xiàn)有的Spark大數(shù)據(jù)平臺上,能夠在內存資源有限時使整個應用保持較高的執(zhí)行效率。

本發(fā)明的目的是通過以下技術方案來實現(xiàn)的,一種基于Spark算子的序列化存儲優(yōu)化方法,包括以下步驟:

S1)使用ganglia檢測應用執(zhí)行過程中機器的內存使用量,如果檢測到當前內存值正常,則繼續(xù)監(jiān)測,若檢測到已達到指定閾值,則執(zhí)行步驟S2);

S2)計算RDD的執(zhí)行時間RDD的執(zhí)行效率和算子權值Wi;

S3)根據(jù)RDD的執(zhí)行時間RDD的執(zhí)行效率和算子權值Wi得到已排序的RDD序列即序列化候選集合;

S4)從序列化候選集合中選擇值最小的進行序列化存儲;

S5)繼續(xù)步驟1),直到應用執(zhí)行完畢。

進一步,在步驟S2)中,所述執(zhí)行時間通過公式(1)獲得:

其中,m表示第i個RDD總共有m個分區(qū),Sij表示第i個RDD的第j個分區(qū)的大小,Pmem表示機器的處理能力。

進一步,在步驟S2)中,RDD的執(zhí)行效率通過公式(2)獲得:

FTij表示分區(qū)完成時間,STij表示分區(qū)開始時間,Nij表示表示某個RDD的分區(qū)數(shù)量;EPij表示第i個RDD上所有分區(qū)的執(zhí)行能力。

進一步,在步驟S2)中,定義Wi(i=1,2,…,M)表示算子權值,每個算子均有一個權值,根據(jù)層次分析法得到算子的時間復雜度和空間復雜度之間的度量關系Cv=f(Ot,Os),算子權重Wi通過以下公式獲得:

代表算子的時間復雜度,表示算子的空間復雜度,Cv表示時間復雜度和空間復雜度的度量關系。

進一步,在步驟S3)中,RDD權值通過公式(5)獲得:

其中,Size(RDD)表示RDD的大小,Wi表示第i個算子的權值,AN表示算子經(jīng)過的Action個數(shù),表示第i個RDD的處理時間,k表示校正參數(shù),取值為{10,100,1000,…}。

由于采用了上述技術方案,本發(fā)明具有如下的優(yōu)點:

本發(fā)明實現(xiàn)在應用執(zhí)行過程中高效存儲有價值的RDD緩存,從而提高內存的使用率。

相比與現(xiàn)有的緩存使用方案,本方法應用于現(xiàn)有的Spark大數(shù)據(jù)平臺上,能夠在內存資源有限時使整個應用保持較高的執(zhí)行效率。

附圖說明

為了使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面將結合附圖對本發(fā)明作進一步的詳細描述,其中:

圖1為本發(fā)明的方法流程圖;

圖2為本發(fā)明的一個使用平臺示意圖;

圖3為迭代計算的重復過程;

圖4為內存占用率對比圖。

具體實施方式

以下將結合附圖,對本發(fā)明的優(yōu)選實施例進行詳細的描述;應當理解,優(yōu)選實施例僅為了說明本發(fā)明,而不是為了限制本發(fā)明的保護范圍。

如圖1所示,它是本發(fā)明的一個使用平臺示意圖。在集群調度過程中,每個task執(zhí)行RDD轉換的過程中,添加以上序列化存儲策略,實時偵測出要處理的RDD是否需要緩存。

一種基于Spark算子的序列化存儲優(yōu)化方法,包括以下步驟:

S1)使用ganglia檢測應用執(zhí)行過程中機器的內存使用量,如果檢測到當前內存值正常,則繼續(xù)監(jiān)測,若檢測到已達到指定閾值,則執(zhí)行步驟S2);

S2)計算RDD的執(zhí)行時間RDD的執(zhí)行效率和算子權值Wi;

執(zhí)行時間和RDD的執(zhí)行效率的具體計算方法為:

用R={RDD1,RDD2,...,RDDn}表示應用所使用的RDD集合,本文中的集群內存分配為1G,2G,4G,因此本發(fā)明使用表示機器的處理能力(其中k=1,2,3),此處使用Sij表示第i個RDD的第j個分區(qū)的大小(S1+S2+......+Sn=Size(RDDi))。

可以近似得出每個分區(qū)的執(zhí)行時間:

由于每個RDD中的所有分區(qū)都是并行執(zhí)行的,所以RDD的執(zhí)行時間即為最長的分區(qū)所執(zhí)行的時間,即

其中,m表示第i個RDD總共有m個分區(qū)。

由于在集群中應用執(zhí)行的過程中,有些分區(qū)需要從其他節(jié)點上拉去數(shù)據(jù),所以需要考慮節(jié)點間的通信時間,這里本發(fā)明使用分區(qū)的完成時間與開始時間之差表示,即:FTij-STij,用Nij表示某個RDD的分區(qū)數(shù)量,至此本發(fā)明可以得到整個RDD的執(zhí)行效率為:

算子權重的具體計算方法為:

定義Wi(i=1,2,…,M)表示算子權值,其中M表示算子個數(shù)。每個算子均有一個權值,根據(jù)上述層次分析法可以得到算子的時間復雜度和空間復雜度之間的度量關系Cv=f(Ot,Os)。

其中,Ot代表算子的時間復雜度,Os表示算子的空間復雜度,Cv表示時間復雜度和空間復雜度的度量關系。

S3)根據(jù)RDD的執(zhí)行時間RDD的執(zhí)行效率和算子權值Wi得到已排序的RDD序列即序列化候選集合;

定義表示a算子后面的第i個RDD數(shù)據(jù)集權值,根據(jù)上述參數(shù)定義及計算規(guī)則,RDD權值可按照公式(6)表示:

其中,Size(RDD)表示RDD的大小,Wi表示第i個算子的權值,AN表示算子經(jīng)過的Action個數(shù),表示第i個RDD的處理時間,k表示校正參數(shù),取值為{10,100,1000,…}。

S4)從序列化候選集合中選擇值最小的進行序列化存儲;

S5)繼續(xù)步驟1),直到應用執(zhí)行完畢。

S5)繼續(xù)步驟1),直到應用執(zhí)行完畢。

本發(fā)明的基本思想是建立一個優(yōu)化的序列化存儲策略,實現(xiàn)在應用執(zhí)行過程中高效存儲有價值的RDD緩存,從而提高內存使用率的目的。

相比與現(xiàn)有的緩存使用方案,本方法應用于現(xiàn)有的Spark大數(shù)據(jù)平臺上,能夠在內存資源有限時使整個應用保持較高的執(zhí)行效率。

下面以圖2為例,說明本方法的具體實施過程:

1、加入策略過程。

(1)用戶通過下載Spark源碼,編譯運行成功后將上述自定義序列化存儲策略加入task調度RDD的位置,并設置內存閾值Q。

(2)重新編譯,打包,運行。

2、PageRank算法執(zhí)行過程。

(1)使用采樣法獲取算法中所用到的算子類型及調度的DAG圖。

(2)該算法通過多輪迭代計算來不斷修正初始值w,直到w的值在某輪計算后的改變小于設定閾值或迭代計算次數(shù)達到設定次數(shù)上限。

(3)圖2中展示了迭代計算的一個重復過程,迭代類型為join->flatMap->reduceByKey->mapValue。所以這其中就涉及了四個算子,因此就需要計算這四個算子對應的算子權值,而從該應用的執(zhí)行過程來看,RDD跨過的Action個數(shù)也即迭代次數(shù),而執(zhí)行時間也可以根據(jù)公式(4)通過加入到源碼中的參數(shù)偵測到,由此,可以根據(jù)公式(5)在Action觸發(fā)之前計算出一個RDD序列,該序列按照RDD權值從小到大排列,也即是RDD序列化存儲到磁盤的順序(本發(fā)明考慮的是內存資源不足的情況,當內存資源充足時,當然是盡可能將所有中間數(shù)據(jù)都加載到內存)。

3、結果驗證過程

(1)由圖2可以看出join之后的操作即為重復迭代過程,因此就需要將所有的數(shù)據(jù)緩存,這樣,在下一輪計算過程中,可以直接使用上一輪的計算結果,而在內存資源匱乏時,就需要有所選擇,選擇算子運行代價大,本身又小的數(shù)據(jù)緩存,圖中的reduceByKey算子即為一個復雜算子,因此reduceByKey之后的RDD需要緩存,而本發(fā)明通過序列化存儲策略得出的序列化存儲策略,reduceByKey算子后面的RDD排在最后,這就說明,該RDD最不能序列化到磁盤。

(2)通過一個開源集群監(jiān)控項目ganglia可以實時監(jiān)控出整個集群中每個機器的內存使用情況。圖3中,本發(fā)明可以看到使用序列化存儲策略的應用系統(tǒng)內存占用率明顯高于未使用序列化存儲策略的應用。根據(jù)本發(fā)明上面提出的序列化存儲策略,能夠選擇重復使用的RDD緩存,而當該RDD再次出現(xiàn)時,不需要重算他們,這就減少了系統(tǒng)計算開銷,加速了整個迭代計算的運行時間。當增加數(shù)據(jù)集中的邊和節(jié)點時,內存占用率會更高,這是因為Spark是基于內存計算的,增加邊和節(jié)點,沒有充足的內存存放中間數(shù)據(jù),直到最后一次迭代結束才會釋放掉內存。因此,默認的Spark序列化存儲策略帶有很大的隨機性,不能夠使內存的優(yōu)勢充分體現(xiàn)出來,而改進的算法則能夠提高應用的內存占用率,進而提高應用的執(zhí)行效率。

以上所述僅為本發(fā)明的優(yōu)選實施例,并不用于限制本發(fā)明,顯然,本領域的技術人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權利要求及其等同技術的范圍之內,則本發(fā)明也意圖包含這些改動和變型在內。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1