專利名稱:一種建立層次化的映射/歸約并行編程模型的方法
技術(shù)領(lǐng)域:
本發(fā)明屬計(jì)算機(jī)軟件應(yīng)用領(lǐng)域,具體涉及一種建立層次化的映射/歸約并行編程模型的方法,本發(fā)明能在分布式計(jì)算系統(tǒng)中,使用映射/規(guī)約并行編程模型來處理大規(guī)模數(shù)據(jù)的應(yīng)用。
背景技術(shù):
隨著用戶業(yè)務(wù)需求的增長和網(wǎng)絡(luò)技術(shù)的發(fā)展,海量數(shù)據(jù)的存儲和計(jì)算對傳統(tǒng)計(jì)算機(jī)系統(tǒng)提出了新的挑戰(zhàn)。海量數(shù)據(jù)是指數(shù)據(jù)量極大(往往是萬億字節(jié)數(shù)量級以上)的數(shù)據(jù)集合,它比一般的通用數(shù)據(jù)庫要大得多,遠(yuǎn)遠(yuǎn)超出單臺計(jì)算機(jī)的存儲和處理能力。為了解決海量數(shù)據(jù)的管理和存取問題,人們通過分布式系統(tǒng)將這樣一個需要巨大的計(jì)算和存儲能力的任務(wù)分成許多子任務(wù),然后把這些子任務(wù)分配調(diào)度給多臺互聯(lián)的計(jì)算機(jī)進(jìn)行并行處理, 最后再把各個計(jì)算機(jī)上的輸出綜合起來得到最后結(jié)果。分布式系統(tǒng)的出現(xiàn)使對海量數(shù)據(jù)進(jìn)行高效處理和存儲成為可能,但是分布式系統(tǒng)上的程序編寫與傳統(tǒng)單機(jī)上的程序有很大的不同軟件程序設(shè)計(jì)者需要考慮系統(tǒng)不同節(jié)點(diǎn)間的同步,任務(wù)調(diào)度算法的有效性和公平性, 負(fù)載均衡和錯誤恢復(fù)等問題。因此如何在分布式系統(tǒng)上進(jìn)行高效有序的并行程序設(shè)計(jì)成為當(dāng)今計(jì)算機(jī)學(xué)術(shù)界和業(yè)界共同關(guān)注的焦點(diǎn)。在這個背景下,并行編程模型便被提出,使得程序員不用關(guān)注于并行體系結(jié)構(gòu)的特點(diǎn),而把注意力集中到程序業(yè)務(wù)邏輯本身。并行編程模型是指并行體系結(jié)構(gòu)(如分布式系統(tǒng),多核體系結(jié)構(gòu))上的編程模型, 它對于簡化、規(guī)范并行編程有重大的意義。并行編程模型一直是并行計(jì)算研究領(lǐng)域中的重點(diǎn)內(nèi)容,它和并行計(jì)算機(jī)體系結(jié)構(gòu)緊密相關(guān)。映射/規(guī)約(MapReduce)并行編程模型是谷歌Google)公司為了解決其在集群上進(jìn)行百萬億字節(jié)以上海量數(shù)據(jù)分布式計(jì)算的問題而提出的并行編程模型,該模型在2004年的國際操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)大會上被首次提出,并在其后得到廣泛的應(yīng)用,且已有多種并行體系結(jié)構(gòu)上的開放源代碼實(shí)現(xiàn)。它將并行計(jì)算抽象成作用于一系列鍵值對的操作,具有編程接口簡單、不要求程序員有并行編程知識、能充分發(fā)揮并行體系結(jié)構(gòu)的計(jì)算能力等優(yōu)點(diǎn)。映射/規(guī)約并行編程模型主要由“映射”和“規(guī)約” 兩個階段構(gòu)成,“映射”階段根據(jù)輸入數(shù)據(jù)產(chǎn)生一系列中間鍵值對,“規(guī)約”階段則把具有相同鍵的所有中間鍵值對規(guī)約到一起(如圖1所示)。Hadoop是第一個映射/規(guī)約模型在分布式系統(tǒng)上的開放源代碼實(shí)現(xiàn),它的代碼使用Java語言編寫。該項(xiàng)目由阿帕奇軟件基金會 (Apache Software Foundation)支持,目前已為大量的公司企業(yè)所部署和應(yīng)用。一個典型的Hadoop應(yīng)用部署通常會采用分布式文件系統(tǒng)作為持久層,在此之上運(yùn)行映射/規(guī)約應(yīng)用框架。Hadoop與分布式文件系統(tǒng)之間協(xié)作如下一個映射/規(guī)約任務(wù)首先將來自文件系統(tǒng)的輸入切分成可以并行處理的多份小數(shù)據(jù),它們將提交給映射/規(guī)約框架作為各個映射任務(wù)的輸入,經(jīng)過映射階段處理完后映射/規(guī)約框架會將其結(jié)果進(jìn)行排序并作為輸入傳遞給規(guī)約階段處理,最后再將規(guī)約階段的結(jié)果寫回分布式文件系統(tǒng)。映射 /規(guī)約框架負(fù)責(zé)任務(wù)調(diào)度,監(jiān)控并重新執(zhí)行失敗的任務(wù)。一般來說,計(jì)算節(jié)點(diǎn)和存儲節(jié)點(diǎn)是相同的,就是說映射/規(guī)約框架和分布式文件系統(tǒng)是運(yùn)行在相同的節(jié)點(diǎn)集上的。這樣的部署使得映射/規(guī)約框架能夠根據(jù)數(shù)據(jù)的實(shí)際位置在各個節(jié)點(diǎn)上有效地調(diào)度任務(wù),從而在整個集群上達(dá)到極高的網(wǎng)絡(luò)帶寬利用率。Hadoop的映射/規(guī)約框架將負(fù)責(zé)調(diào)度的邏輯抽象成任務(wù)跟蹤器對象,作為中央的調(diào)度節(jié)點(diǎn);而具體執(zhí)行任務(wù)的那部分邏輯則被抽象為作業(yè)跟蹤器對象,作為工作節(jié)點(diǎn)。整個框架由一個任務(wù)跟蹤器和多個作業(yè)跟蹤器組成,集群上每個節(jié)點(diǎn)都有一個作業(yè)跟蹤器。任務(wù)跟蹤器負(fù)責(zé)調(diào)度組成任務(wù)的各個子作業(yè)在作業(yè)跟蹤器上執(zhí)行,監(jiān)控并重新執(zhí)行失敗的任務(wù)。作業(yè)跟蹤器在任務(wù)跟蹤器的控制下執(zhí)行作業(yè)。每個作業(yè)跟蹤器可以同時執(zhí)行多個作業(yè),并不斷地向任務(wù)跟蹤器匯報(bào)當(dāng)前其負(fù)責(zé)的作業(yè)隊(duì)列狀況。作業(yè)跟蹤器在準(zhǔn)備執(zhí)行一個作業(yè)的時候,會通過作業(yè)執(zhí)行器運(yùn)行一個新的Java虛擬機(jī)實(shí)例獨(dú)立地執(zhí)行作業(yè)。無論作業(yè)成功或失敗,所有臨時的數(shù)據(jù)都會隨著虛擬機(jī)實(shí)例的退出而銷毀。另一方面隨著多核技術(shù)的發(fā)展,單個計(jì)算節(jié)點(diǎn)的處理能力日益提升,而體系結(jié)構(gòu)則日趨復(fù)雜。其中多核上的并行計(jì)算問題和數(shù)據(jù)局部性問題是決定程序執(zhí)行性能的關(guān)鍵因素。如果程序不能充分地同時利用多個計(jì)算核心資源進(jìn)行計(jì)算,空閑的核心就會造成計(jì)算資源的浪費(fèi),使得程序只能使用多核架構(gòu)的部分計(jì)算能力。數(shù)據(jù)局部性包括空間局部性 (臨近的數(shù)據(jù)會被相繼訪問)和時間局部性(相同數(shù)據(jù)會被多次訪問),改善數(shù)據(jù)局部性可以有效地提高CPU高速緩存性能及輸入輸出子系統(tǒng)的性能,從而改善整體的運(yùn)算性能。因此,為了最大限度地挖掘單個計(jì)算節(jié)點(diǎn)的運(yùn)算能力,應(yīng)用程序必須充分考慮上述兩個問題,并根據(jù)應(yīng)用程序特點(diǎn)進(jìn)行相應(yīng)的細(xì)粒度優(yōu)化。但是現(xiàn)有的Hadoop作業(yè)執(zhí)行器并不能很好地解決這兩個問題。這是由于作業(yè)執(zhí)行器是在Java虛擬機(jī)實(shí)例上進(jìn)行作業(yè)處理,Java虛擬機(jī)為上層應(yīng)用程序提供了統(tǒng)一的抽象的執(zhí)行環(huán)境,使得應(yīng)用程序無法通過底層操作系統(tǒng)去針對體系結(jié)構(gòu)特點(diǎn)進(jìn)行優(yōu)化。
發(fā)明內(nèi)容
本發(fā)明的目的是為克服現(xiàn)有技術(shù)的不足,針對現(xiàn)有的映射/規(guī)約框架無法充分利用單個計(jì)算節(jié)點(diǎn)上的處理能力這一問題,提供一種建立層次化的映射/歸約并行編程模型的方法?,F(xiàn)有的映射/規(guī)約框架如Hadoop主要注重于集群層次的并行計(jì)算,并沒有考慮單個計(jì)算節(jié)點(diǎn)上的細(xì)粒度優(yōu)化,忽視了普遍流行的多核架構(gòu)的并行計(jì)算和數(shù)據(jù)局部性問題, 從而無法最大程度挖掘計(jì)算節(jié)點(diǎn)的處理能力。為解決上述問題,本發(fā)明建立層次化的映射/歸約并行編程模型,其包括使用C 語言實(shí)現(xiàn)單節(jié)點(diǎn)上的作業(yè)處理邏輯,以實(shí)現(xiàn)原有Java虛擬機(jī)之上很難乃至無法實(shí)現(xiàn)的任務(wù)并行和數(shù)據(jù)局部性優(yōu)化;對應(yīng)于一般的集群環(huán)境中的雙層并行架構(gòu)(多個計(jì)算節(jié)點(diǎn)間的集群并行架構(gòu)和單個計(jì)算節(jié)點(diǎn)內(nèi)的多核并行架構(gòu)),采用層次化的映射/規(guī)約框架,在單個計(jì)算節(jié)點(diǎn)上也應(yīng)用映射/規(guī)約模型以實(shí)現(xiàn)多核架構(gòu)上的并行處理,如圖2所示。所述的作業(yè)處理邏輯,包括作業(yè)執(zhí)行器全部,以及作業(yè)跟蹤器相應(yīng)部分的改進(jìn)。作業(yè)執(zhí)行器按照映射/規(guī)約模型用C語言重新實(shí)現(xiàn);改進(jìn)的作業(yè)跟蹤器需要在自身初始化的時候編譯作業(yè)執(zhí)行器所需的庫程序,在執(zhí)行作業(yè)的時候根據(jù)作業(yè)類型調(diào)用相應(yīng)的作業(yè)執(zhí)行器執(zhí)行(對于原有類型的作業(yè)調(diào)用原有作業(yè)執(zhí)行器執(zhí)行,對于新類型的作業(yè)調(diào)用C語言實(shí)現(xiàn)的高效作業(yè)執(zhí)行器執(zhí)行)。所述的任務(wù)并行優(yōu)化,包括映射作業(yè)的數(shù)據(jù)獲取與數(shù)據(jù)處理之間的并行,以及規(guī)約作業(yè)的數(shù)據(jù)獲取與數(shù)據(jù)處理之間的并行。對于映射作業(yè),作業(yè)執(zhí)行器將創(chuàng)建一個獨(dú)立的數(shù)據(jù)加載線程從分布式文件系統(tǒng)讀取輸入數(shù)據(jù),與此同時數(shù)據(jù)處理線程不斷地處理已讀取的數(shù)據(jù),每次處理數(shù)據(jù)的粒度可由用戶控制;對于規(guī)約作業(yè),也采用類似的并行作業(yè)方式, 所不同的是規(guī)約作業(yè)的數(shù)據(jù)獲取線程以文件的粒度讀取數(shù)據(jù),當(dāng)一個待處理文件被完整地讀取之后,相應(yīng)的處理線程才開始處理該輸入文件。所述的數(shù)據(jù)局部性優(yōu)化,包括高速緩存級別的數(shù)據(jù)局部性和內(nèi)存級別的數(shù)據(jù)局部性。對于高速緩存級別的數(shù)據(jù)局部性,作業(yè)執(zhí)行器將輸入數(shù)據(jù)作進(jìn)一步的切分,使得每次處理的數(shù)據(jù)單元能完整地加載到CPU上的一級高速緩存;對于內(nèi)存級別的數(shù)據(jù)局部性,作業(yè)執(zhí)行器將盡可能地重用內(nèi)存中的數(shù)據(jù)與數(shù)據(jù)結(jié)構(gòu),如將原始文本讀入內(nèi)存再利用單詞末尾的標(biāo)點(diǎn)對單詞進(jìn)行劃分,避免了多余的單詞文本數(shù)據(jù)復(fù)制。本發(fā)明的有益效果是,實(shí)現(xiàn)了高效的作業(yè)執(zhí)行器,充分挖掘了單個計(jì)算節(jié)點(diǎn)的處理能力,特別是多核架構(gòu)的并行處理能力和緩存及內(nèi)存中的數(shù)據(jù)局部性,為映射/規(guī)約并行編程模型的整體性能帶來速度提升;同時保留了 Hadoop在集群級別的任務(wù)調(diào)度、負(fù)載均衡以及錯誤容忍等特性。為了便于理解,以下將通過具體的附圖和實(shí)施例對本發(fā)明的進(jìn)行詳細(xì)地描述。需要特別指出的是,具體實(shí)例和附圖僅是為了說明,顯然本領(lǐng)域的普通技術(shù)人員可以根據(jù)本文說明,在本發(fā)明的范圍內(nèi)對本發(fā)明做出各種各樣的修正和改變,這些修正和改變也納入本發(fā)明的范圍內(nèi)。
圖1,顯示了主要由“映射”和“規(guī)約”兩個階段構(gòu)成的映射/規(guī)約并行編程模型。圖2為本發(fā)明建立的層次化的映射/歸約并行編程模型。圖3為本發(fā)明的系統(tǒng)架構(gòu)示意圖。圖4為作業(yè)執(zhí)行器的模塊構(gòu)成示意圖。圖5為映射作業(yè)處理邏輯與映射/規(guī)約模型的對應(yīng)關(guān)系。圖6為規(guī)約作業(yè)處理邏輯與映射/規(guī)約模型的對應(yīng)關(guān)系。
具體實(shí)施例方式實(shí)施例1如圖3所示,本發(fā)明保留了 Hadoop原有實(shí)現(xiàn)的大部分模塊,包括任務(wù)跟蹤器和作業(yè)跟蹤器,作業(yè)執(zhí)行器則采用C/C++語言重新實(shí)現(xiàn)。在作業(yè)跟蹤器調(diào)用作業(yè)執(zhí)行器之前, 系統(tǒng)的運(yùn)作方式與Hadoop類似用戶通過任務(wù)客戶端向任務(wù)跟蹤器提交映射/規(guī)約任務(wù), 用戶可通過配置文件制定任務(wù)類型;任務(wù)跟蹤器將劃分并分發(fā)子作業(yè)到各個作業(yè)跟蹤器執(zhí)行。作業(yè)跟蹤器根據(jù)任務(wù)類型調(diào)用相應(yīng)類型的作業(yè)執(zhí)行器執(zhí)行作業(yè),這樣使得Hadoop原有的應(yīng)用程序可以使用原作業(yè)執(zhí)行器執(zhí)行,而新系統(tǒng)的應(yīng)用程序可以采用高效的新作業(yè)執(zhí)行器執(zhí)行。圖4展示了本發(fā)明實(shí)現(xiàn)的新作業(yè)執(zhí)行器的模塊構(gòu)成及與原有系統(tǒng)其他模塊的關(guān)系。作業(yè)執(zhí)行器包含三個主要的模塊核心處理模塊,進(jìn)程通訊模塊和文件系統(tǒng)客戶端。核心處理模塊使用映射/規(guī)約框架實(shí)現(xiàn)了子作業(yè)的處理邏輯,還包括任務(wù)并行和數(shù)據(jù)局部性等優(yōu)化。進(jìn)程通訊模塊負(fù)責(zé)與作業(yè)跟蹤器進(jìn)行通訊,它實(shí)現(xiàn)了作業(yè)跟蹤器約定的遠(yuǎn)程過程調(diào)用協(xié)議客戶端,并為作業(yè)執(zhí)行器其他模塊提供遠(yuǎn)程過程調(diào)用接口 ;該模塊還包含了 Java 對象和C對應(yīng)數(shù)據(jù)結(jié)構(gòu)之間的轉(zhuǎn)換以及C語言中對應(yīng)Java反射機(jī)制的實(shí)現(xiàn)。文件系統(tǒng)客戶端負(fù)責(zé)所有訪問分布式文件系統(tǒng)的操作,并為作業(yè)執(zhí)行器其他模塊提供分布式文件系統(tǒng)訪問接口。圖5詳述了映射作業(yè)的處理邏輯與映射/規(guī)約模型的對應(yīng)關(guān)系,如圖所示,映射作業(yè)的前兩階段天然地與映射/規(guī)約模型有直接的對應(yīng),分別是映射和規(guī)約(也即合并)階段。由于映射作業(yè)需要把輸出結(jié)果按照規(guī)約階段作業(yè)數(shù)進(jìn)行劃分,所以在映射/規(guī)約模型的最后的歸并寫回階段,映射作業(yè)只需完成寫回磁盤的功能而無需對劃分的多個中間結(jié)果文件進(jìn)行歸并操作。圖6詳述了規(guī)約作業(yè)的處理邏輯與映射/規(guī)約模型的對應(yīng)關(guān)系,如圖所示,規(guī)約作業(yè)的復(fù)制階段通過HTTP協(xié)議從其他節(jié)點(diǎn)讀取映射階段的中間結(jié)果數(shù)據(jù),而排序階段則對這些數(shù)據(jù)進(jìn)行排序以方便規(guī)約階段處理。這兩階段的功能對應(yīng)于映射/規(guī)約模型的映射階段,因此作業(yè)執(zhí)行器在映射階段完成數(shù)據(jù)讀取、反序列化以及排序的功能。而規(guī)約作業(yè)最后的規(guī)約階段包含了規(guī)約和寫回過程,對應(yīng)于映射/規(guī)約模型的規(guī)約和歸并寫回階段,因此作業(yè)執(zhí)行器在最后兩個階段聯(lián)合完成規(guī)約階段的功能。通常一些復(fù)雜的映射/規(guī)約應(yīng)用程序可能涉及多個任務(wù)和復(fù)雜的任務(wù)前后執(zhí)行邏輯,為使得應(yīng)用程序能夠配置和監(jiān)控已提交的任務(wù),本發(fā)明同時將任務(wù)客戶端重新用C 語言實(shí)現(xiàn)。用戶只需提供一段C代碼,指定任務(wù)類型和其他任務(wù)參數(shù),調(diào)用新實(shí)現(xiàn)的任務(wù)客戶端,即可使用本發(fā)明改進(jìn)的高效作業(yè)執(zhí)行器。
權(quán)利要求
1.一種建立層次化的映射/歸約并行編程模型的方法,其特征在于,其包括使用C語言實(shí)現(xiàn)單節(jié)點(diǎn)上的作業(yè)處理邏輯,實(shí)現(xiàn)任務(wù)并行和數(shù)據(jù)局部性優(yōu)化;對應(yīng)于一般的集群環(huán)境中的雙層并行架構(gòu),采用層次化的映射/規(guī)約框架,在單個計(jì)算節(jié)點(diǎn)上應(yīng)用映射/規(guī)約模型實(shí)現(xiàn)多核架構(gòu)上的并行處理。
2.按權(quán)利要求1所述的方法,其特征在于,所述的作業(yè)處理邏輯包括作業(yè)執(zhí)行器全部, 以及作業(yè)跟蹤器相應(yīng)部分的改進(jìn)。
3.按權(quán)利要求2所述的方法,其特征在于,所述的作業(yè)執(zhí)行器按照映射/規(guī)約模型用C 語言重新實(shí)現(xiàn);改進(jìn)的作業(yè)跟蹤器在自身初始化的時候編譯作業(yè)執(zhí)行器所需的庫程序,在執(zhí)行作業(yè)的時候根據(jù)作業(yè)類型調(diào)用相應(yīng)的作業(yè)執(zhí)行器執(zhí)行。
4.按權(quán)利要求3所述的方法,其特征在于,所述的根據(jù)作業(yè)類型調(diào)用相應(yīng)的作業(yè)執(zhí)行器執(zhí)行包括對原有類型的作業(yè)調(diào)用原有作業(yè)執(zhí)行器執(zhí)行,對新類型的作業(yè)調(diào)用C語言實(shí)現(xiàn)的高效作業(yè)執(zhí)行器執(zhí)行。
5.按權(quán)利要求1所述的方法,其特征在于,所述的任務(wù)并行優(yōu)化包括映射作業(yè)的數(shù)據(jù)獲取與數(shù)據(jù)處理之間的并行,以及規(guī)約作業(yè)的數(shù)據(jù)獲取與數(shù)據(jù)處理之間的并行。
6.按權(quán)利要求1所述的方法,其特征在于,所述的數(shù)據(jù)局部性優(yōu)化包括高速緩存級別的數(shù)據(jù)局部性和內(nèi)存級別的數(shù)據(jù)局部性。
7.按權(quán)利要求1所述的方法,其特征在于,所述的集群環(huán)境中的雙層并行架構(gòu)包括多個計(jì)算節(jié)點(diǎn)間的集群并行架構(gòu)和單個計(jì)算節(jié)點(diǎn)內(nèi)的多核并行架構(gòu)。
全文摘要
本發(fā)明屬計(jì)算機(jī)軟件應(yīng)用領(lǐng)域,涉及建立層次化的映射/歸約并行編程模型的方法,包括使用C語言實(shí)現(xiàn)單節(jié)點(diǎn)上的作業(yè)處理邏輯,實(shí)現(xiàn)任務(wù)并行和數(shù)據(jù)局部性優(yōu)化;對應(yīng)于一般的集群環(huán)境中的雙層并行架構(gòu),采用層次化的映射/規(guī)約框架,在單個計(jì)算節(jié)點(diǎn)上應(yīng)用映射/規(guī)約模型實(shí)現(xiàn)多核架構(gòu)上的并行處理。本發(fā)明能在分布式計(jì)算系統(tǒng)中,使用映射/規(guī)約并行編程模型處理大規(guī)模數(shù)據(jù)的應(yīng)用,實(shí)現(xiàn)了高效的作業(yè)執(zhí)行器,充分挖掘了單個計(jì)算節(jié)點(diǎn)的處理能力,特別是多核架構(gòu)的并行處理能力和緩存及內(nèi)存中的數(shù)據(jù)局部性,為映射/規(guī)約并行編程模型的整體性能帶來速度提升;同時保留了Hadoop在集群級別的任務(wù)調(diào)度、負(fù)載均衡以及錯誤容忍等特性。
文檔編號G06F9/50GK102193831SQ201010125019
公開日2011年9月21日 申請日期2010年3月12日 優(yōu)先權(quán)日2010年3月12日
發(fā)明者肖之慰, 臧斌宇, 陳海波 申請人:復(fù)旦大學(xué)