在Presto計算節(jié)點混合使用內(nèi)存和臨時表空間的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[000?]本發(fā)明涉及計算機(jī)技術(shù),具體涉及大數(shù)據(jù)應(yīng)用中在Presto計算節(jié)點混合使用內(nèi)存 和臨時表空間的方法和裝置。
【背景技術(shù)】
[0002] Presto是一種應(yīng)用于大數(shù)據(jù)方面的分布式SQL查詢引擎,所有數(shù)據(jù)處理和傳輸都 是基于內(nèi)存和網(wǎng)絡(luò),計算過程一氣呵成,不分階段,沒有中間temp階段,避免了不必要的I/O 和延遲開銷,因此總體查詢效率比Hive高出近10倍。
[0003] Presto在計算過程中,需要把所有參與計算的元數(shù)據(jù)拆分并加載到各個計算節(jié)點 的內(nèi)存中完成計算,例如:查詢、排序、存放中間結(jié)果集等。Presto支持多個作業(yè)并行執(zhí)行, 因此需要設(shè)定單個計算任務(wù)在每個計算節(jié)點服務(wù)器上可以使用的內(nèi)存最大值,這個值由參 數(shù)task.max-memory來控制,通常情況下該參數(shù)最大值不超過服務(wù)器總內(nèi)存大小的80 %,其 執(zhí)行過程如圖1所示。
[0004] Pre s to使用過程中常遇到如下的問題:
[0005] 1、單臺服務(wù)器的內(nèi)存較少,標(biāo)準(zhǔn)的大數(shù)據(jù)服務(wù)器通常配置64GB或128GB的內(nèi)存,而 存儲的數(shù)據(jù)量通常在10TB左右,數(shù)據(jù)量遠(yuǎn)遠(yuǎn)大于內(nèi)存的大小,
[0006] 2、在有并發(fā)操作的情況下,參與計算的數(shù)據(jù)量遠(yuǎn)大于服務(wù)器的內(nèi)存大小,
[0007] 3、直接擴(kuò)容服務(wù)器內(nèi)存的成本較高,且受到服務(wù)器內(nèi)存插槽的個數(shù)限制。
[0008] 上述問題現(xiàn)有技術(shù)方案無好的解決辦法,因此需要新的技術(shù)方案以滿足大數(shù)據(jù)量 的要求。
【發(fā)明內(nèi)容】
[0009] 有鑒于此,本發(fā)明提出了 一種在Presto中混合使用內(nèi)存和臨時表空間的方法,包 括:將計算數(shù)據(jù)傳輸給Presto計算節(jié)點;如果所需內(nèi)存超過Presto計算節(jié)點的空閑內(nèi)存或 者超過單個計算任務(wù)在該Presto計算節(jié)點上允許使用的最大內(nèi)存,使用臨時表空間。
[0010]本發(fā)明還提出了一種在Presto中混合使用內(nèi)存和臨時表空間的裝置,包括:傳輸 模塊,被配置為將計算數(shù)據(jù)傳輸給Presto計算節(jié)點;臨時表空間模塊,被配置為如果所需內(nèi) 存超過Presto計算節(jié)點的空閑內(nèi)存或者超過單個計算任務(wù)在該Presto計算節(jié)點上允許使 用的最大內(nèi)存,使用臨時表空間。
[0011] 本發(fā)明在PrestO應(yīng)用中添加臨時表空間功能,使用內(nèi)存和臨時表空間混合使用的 方法,有效解決了集群內(nèi)存不足的問題,而且簡單易用,可以極大提升集群查詢性能以及并 發(fā)性。
【附圖說明】
[0012] 圖1示出了現(xiàn)有技術(shù)中只使用內(nèi)存的Presto計算節(jié)點的流程圖。
[0013] 圖2示出了根據(jù)本發(fā)明實施例的在Presto計算節(jié)點混合使用內(nèi)存和臨時表空間的 方法的流程圖。
[0014]圖3示出了根據(jù)本發(fā)明實施例的在Presto計算節(jié)點中混合使用內(nèi)存和臨時表空間 的方法的流程圖。
[0015]圖4示出了根據(jù)本發(fā)明實施例的在Presto中混合使用內(nèi)存和臨時表空間的裝置。
【具體實施方式】
[0016] 以下對本發(fā)明的示例性實施例做出說明,其中包括本發(fā)明實施例的各種細(xì)節(jié)以有 助于理解,應(yīng)當(dāng)將它們認(rèn)為僅僅是示例性的。因此,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)認(rèn)識到,可對本 文描述的實施例做出各種修改和改變,而不脫離本發(fā)明的范圍和精神。
[0017] 一般來說,Presto數(shù)據(jù)處理要求內(nèi)存大小可以容下所參與計算的全部數(shù)據(jù)量大 小,否則,計算會十分緩慢或者出現(xiàn)內(nèi)存錯誤,導(dǎo)致計算任務(wù)失敗,同時太過于依賴內(nèi)存大 小,也導(dǎo)致Presto的并發(fā)性不高。
[0018] 基于現(xiàn)有技術(shù)方案存在的缺點,我們提出了在Presto各計算節(jié)點增加臨時表空間 與內(nèi)存一起混合使用的方法,臨時表空間主要用來做排序操作以及用于存儲臨時表、中間 排序結(jié)果集等臨時對象,如CREATE TABLE、SELECT DISTINCT、0RDER BY、GR0UP BY、UNI0N ALL、MINUS、SORT-MERGE JOINS、HASH JOIN等原本在內(nèi)存中的操作都可以用到臨時表空間。 該方法解決了內(nèi)存容量不足的問題,同時也提高了集群性能以及并發(fā)能力。同時,該方法無 需額外的硬件投入,操作起來也比較簡單。
[0019 ]圖2示出了根據(jù)本發(fā)明實施例的在Pr e s to計算節(jié)點中混合使用內(nèi)存和臨時表空間 的方法200的流程圖。
[0020]在步驟210,將計算數(shù)據(jù)傳輸給Presto計算節(jié)點。在步驟220,計算各計算節(jié)點的內(nèi) 存。然后在步驟230和步驟240分別判斷計算節(jié)點的空閑內(nèi)存是否大于所需內(nèi)存以及所需內(nèi) 存是否小于task. max. memory (也就是單個計算任務(wù)在每個計算節(jié)點服務(wù)器上可以使用的 內(nèi)存最大值)。如果步驟230判斷為"否"或者步驟240判斷為"否",這表明計算節(jié)點的內(nèi)存不 夠,這時可以前進(jìn)到步驟250,使用臨時表空間。如果步驟230和步驟240判斷都為"是",表明 計算節(jié)點內(nèi)存足夠,這時前進(jìn)到步驟280繼續(xù)計算,然后結(jié)束。在步驟250后的步驟260中,判 斷臨時表空間是否足夠,如果臨時空間足夠,則前進(jìn)到步驟280繼續(xù)計算,然后結(jié)束;如果臨 時表空間不足,則前進(jìn)到步驟270,執(zhí)行十分緩慢或出錯,然后結(jié)束。
[0021 ] 在一個實施例中,可以修改Presto源碼,識別臨時表空間。具體地,Presto臨時表 空間有如下特征:
[0022]臨時表空間的大小最大為32TB,且不超過服務(wù)器硬盤總?cè)萘康拇笮 ?br>[0023] 進(jìn)程執(zhí)行完成后,臨時表間空會自動釋放數(shù)據(jù),這里的釋放只是標(biāo)記為空閑、可以 重用,其實實質(zhì)占用的磁盤空間并沒有真正釋放。
[0024] 臨時表空間使用貪心算法,所占用的存儲空間只增加,不減少。
[0025] 當(dāng)創(chuàng)建臨時表空間時,自動啟用一個后臺進(jìn)程檢測臨時表空間的有效性,當(dāng)刪除 臨時表空間后,后臺進(jìn)程同時刪除。
[0026] 臨時表空間存儲大規(guī)模排序操作和散列操作的中間結(jié)果。它跟永久表空間不同之 處在于它由臨時數(shù)據(jù)文件組成的,而不是永久數(shù)據(jù)文件。臨時表空間不會存儲永久類型的 對象,所以它不需要額外二個副本。(像Hadoop分布式文件系統(tǒng)(HDFS)-般都有二個副本)
[0027]創(chuàng)建臨時表空間或臨時表空間添加臨時數(shù)據(jù)文件時,即使臨時數(shù)據(jù)文件很大,添 加過程也相當(dāng)快。這是因為臨時數(shù)據(jù)文件是一類特殊的數(shù)據(jù)文件:稀疏文件,當(dāng)臨時表空間 文件創(chuàng)建時,它只會寫入文件頭部和最后塊信息。它的空間是延后分配的。這就是在創(chuàng)建臨 時表空間或給臨時表空間添加