內(nèi)存計算的緩存優(yōu)化方法
【專利摘要】本發(fā)明提供一種內(nèi)存計算的緩存優(yōu)化方法,該方法包括:在Spark源程序中插入監(jiān)聽代碼,對應(yīng)用程序進行動態(tài)語義分析以構(gòu)造DAG圖;計算DAG中各頂點出度并篩選出出度大于1的頂點對應(yīng)的RDD,篩選出的RDD為需要緩存至內(nèi)存的RDD;根據(jù)貪心算法調(diào)整Action的執(zhí)行順序以優(yōu)化RDD數(shù)據(jù)計算的訪問順序;計算RDD的權(quán)重,根據(jù)內(nèi)存替換算法決定內(nèi)存中被替換出的RDD;及根據(jù)多級緩存算法決定如何處理被替換出的RDD。應(yīng)用本發(fā)明所述內(nèi)存計算的緩存優(yōu)化方法,無需程序員在編程時考量內(nèi)存使用以及顯示指定加載內(nèi)存的RDD,降低程序員的編程負擔(dān),同時提高了內(nèi)存的利用率進而提升大數(shù)據(jù)處理的速度。
【專利說明】內(nèi)存計算的緩存優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及分布式大數(shù)據(jù)處理的領(lǐng)域,尤其涉及內(nèi)存計算的緩存優(yōu)化方法。
【背景技術(shù)】
[0002]Spark與Hadoop相似,是一個基于內(nèi)存計算的開源集群計算系統(tǒng),能夠并行處理大數(shù)據(jù)集的計算,可以實現(xiàn)大數(shù)據(jù)的交互式查詢以及優(yōu)化迭代工作負載。Spark將數(shù)據(jù)集緩存在內(nèi)存中,縮短了 I/O訪問延遲。但是隨著數(shù)據(jù)量的激增以及人們對任務(wù)執(zhí)行速度的要求越來越高,提高Spark的性能成為一個迫切的需求。通過對內(nèi)存加速提高內(nèi)存使用效率以提高運行速度,是提高Spark系統(tǒng)性能的一種方式。
[0003]目前,程序員需要在Spark中利用cache O方法將RDD顯示載入內(nèi)存,此種方式要求程序員對內(nèi)存使用有一定的基礎(chǔ),而該方式使得內(nèi)存利用率的高低很大程度依賴于程序員編寫的代碼質(zhì)量的優(yōu)劣,在有些情況下,僅通過優(yōu)化代碼本身無法提高內(nèi)存使用率。
【發(fā)明內(nèi)容】
[0004]鑒于上述內(nèi)容,有必要提供一種內(nèi)存計算的緩存優(yōu)化方法,能夠充分利用內(nèi)存資源,提高內(nèi)存使用率,降低程序員編程負擔(dān)。
[0005]所述的內(nèi)存計算的緩存優(yōu)化方法,該方法包括:在Spark的源程序代碼中插入監(jiān)聽代碼,以樣本數(shù)據(jù)作為輸入預(yù)先執(zhí)行應(yīng)用程序,對應(yīng)用程序進行動態(tài)語義分析,獲取所有RDD函數(shù)操作的輸入RDD ID、操作類型、輸出RDD ID,根據(jù)獲取的信息構(gòu)造DAG ;遍歷上述DAG,計算各頂點的出度,篩選出出度大于I的頂點對應(yīng)的RDD并建立RDD集合S,該集合S中的RDD為需要緩存至內(nèi)存中的RDD ;調(diào)整上述RDD集合S中所有RDD的Action執(zhí)行順序,以優(yōu)化需要緩存至內(nèi)存的RDD數(shù)據(jù)計算的訪問順序;計算所述RDD集合S中所有RDD的權(quán)重;當輸入真正的作業(yè)數(shù)據(jù)執(zhí)行應(yīng)用程序時,根據(jù)優(yōu)化的RDD數(shù)據(jù)計算的訪問順序,依次將RDD緩存至內(nèi)存,若內(nèi)存已滿,根據(jù)內(nèi)存替換算法決定從內(nèi)存中被替換出的RDD ;根據(jù)多級緩存算法確定被替換出的RDD是直接丟棄還是存儲至磁盤。
[0006]相比于現(xiàn)有技術(shù),本發(fā)明所述內(nèi)存計算的緩存優(yōu)化方法能夠?qū)park應(yīng)用程序進行動態(tài)語義分析得出DAG圖,調(diào)整Action執(zhí)行順序以優(yōu)化RDD數(shù)據(jù)計算的訪問順序,計算RDD的權(quán)重,根據(jù)內(nèi)存替換算法決定內(nèi)存中被替換出的RDD以及根據(jù)多級緩存算法決定被替換出的RDD的處理方式。應(yīng)用本發(fā)明所述內(nèi)存計算的緩存優(yōu)化方法,程序員無需在編程時顯示指定加載內(nèi)存的RDD以及考量內(nèi)存使用情況,降低程序員的編程負擔(dān),同時提高了內(nèi)存的利用率進而提升大數(shù)據(jù)處理的速度。
【專利附圖】
【附圖說明】
[0007]圖1是本發(fā)明所述內(nèi)存計算的緩存優(yōu)化方法的較佳實施例的方法流程圖。
[0008]圖2是本較佳實施例中進行動態(tài)語義分析的樣例PageRank算法的偽代碼。
[0009]圖3是本較佳實施例中對PageRank算法進行動態(tài)語義分析后,構(gòu)造的DAG的示意圖。
[0010]圖4是本較佳實施例中用于說明調(diào)整Action執(zhí)行順序可優(yōu)化RDD訪問順序的Spark拉取模型樣例的偽代碼。
[0011]圖5是本較佳實施例中分析Spark拉取模型樣例代碼得出的RDD訪問順序的示意圖。
[0012]圖6是本較佳實施例中調(diào)整Spark拉取模型代碼的Action執(zhí)行順序后的RDD訪問順序的示意圖。
[0013]圖7是本較佳實施例中根據(jù)貪心算法調(diào)整Action執(zhí)行順序的偽代碼。
[0014]圖8是本較佳實施例中說明RDD權(quán)重影響的示意圖。
[0015]圖9是本較佳實施例中多級緩存算法的偽代碼。
[0016]圖10是不同操作類型對RDD的數(shù)據(jù)量大小影響的示意圖。
【具體實施方式】
[0017]本發(fā)明所述內(nèi)存計算的緩存優(yōu)化方法(以下簡稱“內(nèi)存優(yōu)化方法”)是對現(xiàn)有開源項目Spark的優(yōu)化,應(yīng)用該內(nèi)存優(yōu)化方法,可以提高內(nèi)存的利用率,進一步提升并行處理大數(shù)據(jù)的運行速度。
[0018]Spark利用Scala語言實現(xiàn),是一個允許集群上對數(shù)據(jù)集進行交互式分析的有效、通用的編程語言框架。Scala語言是一種基于JVM (Java Virtual Machine, Java虛擬機)的靜態(tài)類型、函數(shù)式、面向?qū)ο蟮恼Z言。其中,RDD (Resilient Distributed Dataset,彈性分布式數(shù)據(jù)集)是Spark的一個重要的抽象概念,是分布在集群節(jié)點上的具有容錯機制且進行并行操作的只讀記錄分區(qū)集合,可以將所有數(shù)據(jù)加載至內(nèi)存,允許在大型集群上執(zhí)行基于內(nèi)存的計算。
[0019]本發(fā)明所述的內(nèi)存優(yōu)化方法,對Spark應(yīng)用程序進行動態(tài)語義分析以構(gòu)造DAG(Directed Acyclic Graph,有向無環(huán)圖),根據(jù)該DAG選取需要緩存至內(nèi)存的RDD,利用貪心算法調(diào)整Action的執(zhí)行順序以優(yōu)化RDD數(shù)據(jù)計算的訪問順序,根據(jù)內(nèi)存替換算法決定被替換出內(nèi)存的RDD以及根據(jù)多級緩存算法決定從內(nèi)存中被替換出的RDD的處理方式。以下將具體結(jié)合附圖,詳細說明所述內(nèi)存優(yōu)化方法中各步驟的具體實現(xiàn)。
[0020]參閱圖1所示,是本發(fā)明所述內(nèi)存優(yōu)化方法的流程圖。
[0021]步驟S01,在Spark源代碼中插入監(jiān)聽代碼,以樣本數(shù)據(jù)作為輸入預(yù)先執(zhí)行應(yīng)用程序,對應(yīng)用程序進行動態(tài)語義分析,獲取所有RDD函數(shù)操作的輸入RDD ID、操作類型、輸出RDD ID,根據(jù)獲取的信息構(gòu)造DAG (Directed Acyclic Graph,有向無環(huán)圖)。
[0022]軟件工程中,性能分析(Performance Analysis或Profiling)是以收集程序運行時的信息為手段研究程序行為的分析方法,旨在根據(jù)運行時信息決定如何對程序優(yōu)化從而提高程序運行速度或者內(nèi)存使用率。本發(fā)明所述內(nèi)存優(yōu)化方法基于Profiling的思想,預(yù)先執(zhí)行應(yīng)用程序進行動態(tài)語義分析,獲取所有RDD的函數(shù)操作的信息以構(gòu)造DAG,根據(jù)該DAG進一步分析出在應(yīng)用程序執(zhí)行過程中需要加載內(nèi)存的RDD并優(yōu)化RDD數(shù)據(jù)計算的訪問順序(具體參見步驟S02、S03)。
[0023]需要說明的是,預(yù)先執(zhí)行應(yīng)用程序主要目的是為了獲取程序運行時信息以優(yōu)化內(nèi)存使用,而大數(shù)據(jù)處理的數(shù)據(jù)集是TB級別的大規(guī)模數(shù)據(jù)量,故預(yù)先執(zhí)行應(yīng)用程序時輸入的數(shù)據(jù)為數(shù)據(jù)量不大的模擬數(shù)據(jù),本較佳實施例中,取作業(yè)數(shù)據(jù)(待處理的數(shù)據(jù)集)中一定大小的數(shù)據(jù)(例如256M的數(shù)據(jù)量)作為樣本,以樣本數(shù)據(jù)作為預(yù)先執(zhí)行應(yīng)用程序的輸入數(shù)據(jù)。
[0024]RDD支持兩種操作:轉(zhuǎn)換(Transformation)和動作(Action,動作或行為)。其中,轉(zhuǎn)換操作是根據(jù)現(xiàn)有數(shù)據(jù)集創(chuàng)建一個新的數(shù)據(jù)集,例如,屬于轉(zhuǎn)換操作類型的函數(shù)操作:map、filter> flatmap、ReduceByKey和join等;動作是在數(shù)據(jù)集運行計算后返回一個值給應(yīng)用程序或向外部存儲寫入數(shù)據(jù),例如,屬于動作或行為操作類型的函數(shù)操作:saVe、count、collect 等。
[0025]本較佳實施例中,在Spark源代碼的類庫中于RDD的各種函數(shù)操作的實現(xiàn)代碼中插入監(jiān)聽代碼,使得Spark的應(yīng)用程序執(zhí)行過程中(Spark的應(yīng)用程序也稱作驅(qū)動程序),當執(zhí)行RDD的函數(shù)操作代碼的同時,執(zhí)行RDD函數(shù)操作的實現(xiàn)代碼中插入的監(jiān)聽代碼,實時獲取RDD函數(shù)操作的輸入RDD ID、操作類型和輸出RDD ID,以輸入RDD ID和輸出RDD ID為頂點,輸入和輸出的RDD之間所進行函數(shù)操作的操作類型為邊,構(gòu)造DAG。
[0026]圖2為本較佳實施例中進行動態(tài)語義分析的PageRank算法的偽代碼,圖3為對PageRank算法進行動態(tài)語義分析后構(gòu)造的DAG,為了方便表示,以方框代替DAG的點,每個方框為一個RDD。以下結(jié)合圖2、圖3,詳細說明DAG的構(gòu)造過程。
[0027]圖2所不代碼的循環(huán)體中,contribs是links和ranks進行join和flatmap操作返回的數(shù)據(jù)集,如圖3中頂點ranksO至頂點contribsO的邊和頂點links至contribsO的邊表不 join 和 flatmap 的操作;ranks 是 contribs 進行 reduceByKey 和 mapValue 操作返回的數(shù)據(jù)集,如圖3中頂點contribsO至頂點ranksl的邊表示reduceByKey和mapValues操作。因為RDD是只讀的,在進行RDD操作時,會產(chǎn)生新的數(shù)據(jù)集或是返回值,但不改變輸入RDD的數(shù)據(jù)內(nèi)容,如圖2所示代碼在每次循環(huán)時,contribs和ranks都會是新的數(shù)據(jù)集,對應(yīng)圖3中所不,ranksO至ranksN和contribsO至contribsN為每次循環(huán)過程中產(chǎn)生的新數(shù)據(jù)集,其中,ranksN和contribsN為循環(huán)結(jié)束時RDD變量ranks和contribs的最終數(shù)據(jù)集。
[0028]步驟S02,遍歷步驟SOl所構(gòu)造的DAG,計算每個頂點的出度,篩選出所有出度大于I的頂點對應(yīng)的RDD并建立RDD集合S,該RDD集合S中的RDD即為需要緩存至內(nèi)存的所有RDD。
[0029]在內(nèi)存命中的概念中,CPU對某變量或數(shù)據(jù)第一次讀或?qū)憰r,首次將該變量加載至內(nèi)存,此次對該變量的讀寫操作為未命中,當后續(xù)若對該變量再次讀或?qū)憰r,該變量已加載至內(nèi)存,則為命中。故,將多次訪問或頻繁讀寫的變量或數(shù)據(jù)緩存至內(nèi)存可以提高內(nèi)存命中率,無需多次進行I/o訪問,提高程序的運行速度。
[0030]鑒于此,本較佳實施例中,遍歷構(gòu)造的DAG,計算每個頂點出度即該頂點對應(yīng)的RDD的訪問次數(shù),篩選出出度大于I的所有RDD并建立RDD集合S,即該RDD集合S包含了訪問次數(shù)大于I的所有RDD,且該集合S中的RDD緩存至內(nèi)存可以提高程序的運行速度。
[0031]以圖2、圖3為例,圖3中頂點links的出度大于1,其他RDD頂點的出度為1,則將該RDD links緩存至內(nèi)存可以提高內(nèi)存命中率。參考圖2代碼,程序員并未將RDD links加載至內(nèi)存。而應(yīng)用本發(fā)明所述內(nèi)存優(yōu)化方法,當輸入作業(yè)數(shù)據(jù)執(zhí)行應(yīng)用程序時,會根據(jù)預(yù)先執(zhí)行應(yīng)用程序的分析結(jié)果,將RDD links緩存至內(nèi)存。
[0032]如圖4是本較佳實施例中用于說明調(diào)整Action執(zhí)行順序可優(yōu)化RDD訪問順序的Spark拉取模型樣例的偽代碼,相比于圖2的PageRank算法的偽代碼,圖4的代碼是PageRank算法偽代碼的一個修改版,所不同的是,圖4代碼的循環(huán)體中是計算兩組RDD(contribs 和 ranks ;contribsl 和 ranksl),圖 2 僅計算了一組 RDD (contribs 和 ranks)。結(jié)合圖3可得出RDD links的頂點出度大于1,具有緩存價值,類比圖2代碼的DAG構(gòu)造過程,分析圖4代碼可知,RDD links和RDD Iinksl為出度大于I的頂點,具有緩存價值。
[0033]結(jié)合步驟SO1、S02看,所述的內(nèi)存優(yōu)化方法預(yù)先執(zhí)行應(yīng)用程序,根據(jù)執(zhí)行過程中RDD的訪問次數(shù)決定RDD是否需要加載至內(nèi)存,相比于現(xiàn)有做法中,由程序員通過.cache O方法指定應(yīng)用程序中需要加載至內(nèi)存的RDD,本發(fā)明更加合理及靈活,同時降低程序員負擔(dān)。
[0034]步驟S03,根據(jù)貪心算法,調(diào)整步驟S02的集合S中所有RDD的動作(Action)執(zhí)行順序以優(yōu)化RDD數(shù)據(jù)計算的訪問順序。
[0035]Spark中,應(yīng)用程序的代碼執(zhí)行過程中,RDD的轉(zhuǎn)換操作(是一種懶計算,lazilyevaluated)并沒有對輸入數(shù)據(jù)進行計算,只是計算了 RDD的元數(shù)據(jù),只有當執(zhí)行Action操作時,才真正觸發(fā)數(shù)據(jù)計算,回溯所需要的RDD計算操作或直接在內(nèi)存中查詢需要參與計算的 RDD 或從 HDFS (Hadoop Distributed File System,Hadoop 分布式文件系統(tǒng))中獲取。由上可知,RDD數(shù)據(jù)計算的訪問順序是由Action的執(zhí)行順序決定的。所述的RDD的元數(shù)據(jù)包括:RDD與其父RDD的依賴關(guān)系(即RDD從其他RDD衍生所需的相關(guān)信息)、RDD的分區(qū)信息和數(shù)據(jù)存放位置等信息。
[0036]需要說明的是,本發(fā)明所述內(nèi)存優(yōu)化方法為了提高內(nèi)存利用率,需要考量的是被緩存至內(nèi)存的RDD的訪問順序,即步驟S03中優(yōu)化的是步驟S02創(chuàng)建的RDD集合S中所有RDD數(shù)據(jù)計算的訪問順序。
[0037]由步驟S02分析可知圖4代碼中需要緩存至內(nèi)存的RDD為links和linksl,以下具體分析這兩個RDD在圖4代碼執(zhí)行過程中的訪問順序。圖5左側(cè)所示為計算元數(shù)據(jù)時links和linksl的訪問順序,其中,實線方框和虛線方框分別用于區(qū)分表示links和linksl,圖5右側(cè)所示為真正數(shù)據(jù)計算時links和linksl的訪問順序。圖4代碼中僅最后的ranks,save (dfs:...)和ranksl.save (dfs:...)為Action操作,會觸發(fā)數(shù)據(jù)的真正計算,當執(zhí)行ranks的Action操作時,回溯ranks的數(shù)據(jù)操作即真正執(zhí)行循環(huán)體中ranks的數(shù)據(jù)計算,如圖5右側(cè)所示的反復(fù)訪問links,當ranks存儲后執(zhí)行ranksl的Action操作時,同理,如圖5右側(cè)所示反復(fù)訪問linksl。由上看出,圖5右側(cè)所示的RDD數(shù)據(jù)計算時RDD的訪問順序真正影響程序執(zhí)行速度以及內(nèi)存使用情況。
[0038]假如,調(diào)整圖4所示代碼中最后兩行代碼(Action)的順序為:ranksl.save (dfs:…);ranks.save (dfs:…);則調(diào)整Action執(zhí)行順序后的RDD訪問順序參考圖6所示,圖6左側(cè)為RDD在元數(shù)據(jù)計算時的訪問順序,右側(cè)為RDD在數(shù)據(jù)計算時的訪問順序。通過比對圖5、圖6可知,調(diào)整Action的執(zhí)行順序會改變RDD數(shù)據(jù)計算的訪問順序。
[0039]圖8所示為RDD權(quán)重影響的示意圖,圖8是一個權(quán)值化的DAG,圖8中實線方框表示RDD,虛線方框表示Action的計算結(jié)果,除指向虛線方框表示的箭頭為Action操作外,其他箭頭表示為轉(zhuǎn)換操作。由圖8明顯可知,RDD A、B、C的出度大于1,需緩存至內(nèi)存。
[0040]假設(shè)圖8中Action的執(zhí)行順序為:A1、A4、A2、A5、A3,根據(jù)Action操作中對計算數(shù)據(jù)的回溯,RDD的訪問順序為:A、B、A、C、B、C、B,假設(shè)當前內(nèi)存僅為一個區(qū)塊,則根據(jù)以上訪問順序,RDD在內(nèi)存中替換順序:A、B、A、C、B、C、B ;若Action的執(zhí)行順序為Al、A2、A3、A4、A5,RDD的訪問順序為:A、B、B、B、A、C、C,在相同內(nèi)存情況下,RDD在內(nèi)存中替換順序為:A、B、A、C。由上述分析可知,不同的Action執(zhí)行順序會導(dǎo)致數(shù)據(jù)計算時不同的RDD訪問順序,進而導(dǎo)致RDD在內(nèi)存中不同程度的替換頻率,則有必要調(diào)整Action執(zhí)行順序以優(yōu)化RDD訪問順序。
[0041]Action執(zhí)行順序的調(diào)整需要遵照兩個原則:保持Spark應(yīng)用程序的原有語義不變;優(yōu)化后的Action執(zhí)行順序提高了應(yīng)用程序執(zhí)行效率。若要保證Spark應(yīng)用程序的原語義不變,需要保持應(yīng)用程序中有依賴關(guān)系的Action原有執(zhí)行順序,調(diào)整無依賴的Action執(zhí)行順序。所述有依賴關(guān)系的Action是某個Action操作的輸出是另外一個或多個Action的輸入,則表明這些Action之間存在依賴關(guān)系。
[0042]本較佳實施例中利用貪心算法,調(diào)整Spark應(yīng)用程序中RDD的Action執(zhí)行順序。調(diào)整后的Action執(zhí)行順序0=[Ai, Aj,…,An]使得
【權(quán)利要求】
1.一種內(nèi)存計算的緩存優(yōu)化方法,其特征在于,該方法包括: 構(gòu)造DAG步驟:在Spark的源程序代碼中插入監(jiān)聽代碼,以樣本數(shù)據(jù)作為輸入預(yù)先執(zhí)行應(yīng)用程序,對應(yīng)用程序進行動態(tài)語義分析,獲取所有RDD函數(shù)操作的輸入RDD ID、操作類型、輸出RDD ID,根據(jù)獲取的信息構(gòu)造DAG ; 篩選RDD步驟:遍歷上述DAG,計算各頂點的出度,篩選出出度大于I的頂點對應(yīng)的RDD并建立RDD集合S,該集合S中的RDD為需要緩存至內(nèi)存中的RDD ; Action執(zhí)行順序調(diào)整步驟:調(diào)整上述RDD集合S中所有RDD的Action執(zhí)行順序,以優(yōu)化需要緩存至內(nèi)存的RDD數(shù)據(jù)計算的訪問順序; RDD權(quán)重計算步驟:計算所述RDD集合S中所有RDD的權(quán)重; RDD替換步驟:當輸入真正的作業(yè)數(shù)據(jù)執(zhí)行應(yīng)用程序時,根據(jù)優(yōu)化的RDD數(shù)據(jù)計算的訪問順序,依次將RDD緩存至內(nèi)存,若內(nèi)存已滿,根據(jù)內(nèi)存替換算法決定從內(nèi)存中被替換出的RDD ; RDD處理步驟:根據(jù)多級緩存算法確定被替換出的RDD是直接丟棄還是存儲至磁盤。
2.如權(quán)利要求1所述的內(nèi)存計算的緩存優(yōu)化方法,其特征在于,在所述構(gòu)造DAG步驟中,將輸入RDD ID和輸出RDD ID作為頂點,輸入RDD和輸出RDD進行的函數(shù)操作的操作類型為邊,構(gòu)造DAG。
3.如權(quán)利要求1所述的內(nèi)存計算的緩存優(yōu)化方法,其特征在于,在所述Action執(zhí)行順序調(diào)整步驟中,是根據(jù)貪心算法調(diào)整集合S中所有RDD的Action執(zhí)行順序,包括以下步驟: a)查找所述RDD集合S中的所有RDD的Action,合并有依賴關(guān)系的Action為一個新Action,合并后的多個新Action與無依賴關(guān)系的Action共同形成一個Action集合A ; b)創(chuàng)建空集合R和空序列S’; c)從Action集合A中任意選取一個ActionAi,將AiW入序列S的末尾,將Ai對應(yīng)的RDD加入到集合R ; d)迭代執(zhí)行步驟C,直至集合A中的元素為空,則序列S’即為調(diào)整的Action執(zhí)行順序,其中,迭代執(zhí)行從集合A中選取Action Ai時,選取的依據(jù)是所選取的Ai對應(yīng)的RDD與集合R的交集最大。
4.如權(quán)利要求1所述的內(nèi)存計算的緩存優(yōu)化方法,其特征在于,在所述權(quán)重計算步驟中,RDD權(quán)重的計算公式為:
5.如權(quán)利要求4所述的內(nèi)存計算的緩存優(yōu)化方法,其特征在于,所述RDD的大小根據(jù)動態(tài)采樣法進行計算: 采樣:取作業(yè)數(shù)據(jù)中的一定大小的數(shù)據(jù)作為樣本數(shù)據(jù); 計算對象大小:將樣本數(shù)據(jù)作為輸入,執(zhí)行應(yīng)用程序,計算執(zhí)行過程中的對象大小,所述對象包括各類型變量; 匯總:匯總RDD的所有對象的大小即為RDD的大小。
6.如權(quán)利要求5所述的內(nèi)存計算的緩存優(yōu)化方法,其特征在于,通過以下步驟計算對象大小: a)定義所有基礎(chǔ)類型變量的大小,制作一張記錄各基礎(chǔ)類型變量大小的查詢表; b)對象類型變量的大小等于其所有成員變量大小的累加值,對象類型變量一般包括三種類型的成員變量:基礎(chǔ)類型變量、數(shù)組類型變量和對象類型變量,其中: 若成員變量為基礎(chǔ)類型變量,則根據(jù)步驟a中定義的各種基礎(chǔ)類型變量的大小,累加各基礎(chǔ)類型變量的大小; 若成員變量為數(shù)組類型變量,則根據(jù)下述的步驟c進行計算; 若成員變量為對象類型變量,則迭代執(zhí)行步驟b計算對象類型的成員變量的大小; c)數(shù)組類型變量的大小等于數(shù)組長度乘以數(shù)組元素的大小,若數(shù)組元素為基礎(chǔ)類型變量,根據(jù)步驟a計算數(shù)組元素為基礎(chǔ)類型變量的大小,若數(shù)組元素為對象類型變量,根據(jù)步驟b計算數(shù)組元素為對象類型變量的大??; d)匯總對象包括的所有各類型變量的大小。
7.如權(quán)利要求1所述的內(nèi)存計算的緩存優(yōu)化方法,其特征在于,所述RDD替換步驟中根據(jù)內(nèi)存替換算法決定內(nèi)存已滿時需要被替換出內(nèi)存的RDD包括:` 根據(jù)RDD數(shù)據(jù)計算的訪問順序以及RDD的權(quán)重,分別計算Min替換算法和寄存器分配的圖著色算法進行內(nèi)存替換時內(nèi)存未命中的總代價即訪問順序中各RDD的未命中次數(shù)乘以該RDD權(quán)重的累加值; 選取總代價較小的替換算法對內(nèi)存中的RDD進行替換。
8.如權(quán)利要求7所述的內(nèi)存計算的緩存優(yōu)化方法,其特征在于,根據(jù)Min替換算法決定內(nèi)存已滿時被替換出的RDD包括: 當內(nèi)存已滿且需要緩存某個RDD至內(nèi)存時,倒序遍歷RDD數(shù)據(jù)計算的訪問順序; 若在該訪問順序中遍歷到一個已經(jīng)緩存至內(nèi)存的RDD,則停止遍歷,將該RDD替換出內(nèi)存; 預(yù)先確定在訪問順序中當前要緩存的RDD最早被訪問的位次,當遍歷到該位次之前都未遍歷到已緩存至內(nèi)存的RDD,則停止遍歷,任意選取內(nèi)存中的RDD替換出內(nèi)存。
9.如權(quán)利要求7所述的內(nèi)存計算的緩存優(yōu)化方法,其特征在于,根據(jù)Min替換算法決定內(nèi)存已滿時被替換出的RDD包括: 當內(nèi)存已滿且需要緩存某個RDD至內(nèi)存時,確認當前已緩存至內(nèi)存的RDD ; 從已緩存的RDD中選取出在當前需緩存的RDD后的訪問順序中最晚被訪問的RDD ; 替換出該最晚被訪問的RDD。
10.如權(quán)利要求4所述的內(nèi)存計算的緩存優(yōu)化方法,其特征在于,根據(jù)多級緩存算法決定被替換出的RDD是直接丟棄還是存儲至磁盤包括: 獲取從內(nèi)存中被替換出的RDD的大?。? 根據(jù)RDD的大小和磁盤I/O的訪問速度,計算將替換出的RDD存儲至磁盤的代價iocost即RDD的大小除以I/O的訪問速度; 獲取RDD的計算代價CC ;判定CC < 2 X iocost,若滿足該判定條件則將替換出的RDD丟棄; 若不滿足該判定條件,則根據(jù)RDD數(shù)據(jù)計算的訪問順序,查找被替換出的RDD后續(xù)是否會使用,若是,則將該替換出的RD D存入磁盤,否則直接丟棄。
【文檔編號】G06F12/12GK103631730SQ201310531246
【公開日】2014年3月12日 申請日期:2013年11月1日 優(yōu)先權(quán)日:2013年11月1日
【發(fā)明者】陳康, 艾智遠, 馮琳, 周佳祥 申請人:深圳清華大學(xué)研究院