一種基于MapReduce的分布式計算方法和裝置制造方法
【專利摘要】本申請公開了一種基于MapReduce的分布式計算方法和裝置,通過在MapReduce編譯工具層面對MapReduce軟件框架處理作業(yè)之前和之后進行數(shù)據(jù)處理,一方面記錄MapReduce軟件框架對歷史作業(yè)的處理結果,另一方面借鑒歷史作業(yè)的成功處理結果來處理當前作業(yè),從而形成了一個閉環(huán)的反饋系統(tǒng),來解決困擾較大的如何設置歸約器數(shù)量的問題。
【專利說明】—種基于MapReduce的分布式計算方法和裝置
【技術領域】
[0001]本申請涉及一種分布式計算方法。
【背景技術】
[0002]Hadoop項目是Apache軟件基金會開發(fā)的一個軟件框架(software framework), 用來支持分布式應用程序(distributed applications)在眾多具有計算能力且相互獨立 的計算機上處理大量數(shù)據(jù),其處理的數(shù)據(jù)量可達PB即IO15字節(jié)級別。
[0003]請參閱圖1, Hadoop軟件框架至少包括:
[0004]位于最底層的一個分布式文件系統(tǒng)10,常見的是HDFS(Hadoop Distributed File System, Hadoop分布式文件系統(tǒng))。
[0005]HDFS是一個采用主-從架構的分布式文件系統(tǒng),由一個主節(jié)點Namenode (命名 節(jié)點)和多個從節(jié)點Datanode (數(shù)據(jù)節(jié)點)組成。HDFS將一個文件分成一個或多個數(shù)據(jù)塊 (block),這些數(shù)據(jù)塊存儲在一組Datanode上。Namenode負責管理該分布式文件系統(tǒng)的名 字空間(namespace),如打開、關閉、重命名、刪除文件或目錄。它也負責確定數(shù)據(jù)塊到具體 Datanode的映射。Datanode在Namenode的統(tǒng)一調度下進行數(shù)據(jù)塊的創(chuàng)建、刪除和復制。一 個典型的HDFS集群是一臺計算機上只運行一個Namenode作為主機,其它計算機分別運行 一個Datanode作為從機。
[0006]Hadoop項目也兼容其他分布式文件系統(tǒng),例如Amazon S3 (Amazon Simple Storage Service)、CloudStore 等。
[0007]在該分布式文件系統(tǒng)之上的一個分布式計算軟件框架20,常見的是MapReduce軟 件框架。
[0008]MapReduce用來支持在計算機集群上對大型數(shù)據(jù)集的分布式計算。其也采用 主-從架構,由一個主節(jié)點JobTracker (作業(yè)跟蹤器)和多個從節(jié)點TaskTracker (任務跟 蹤器)組成。MapReduce將一個作業(yè)(job)分成一個或多個任務(task),由一組TaskTracker 并行處理。JobTracker負責調度構成一個作業(yè)的所有任務,將這些任務分配給可用的 TaskTracker0它還監(jiān)控任務的執(zhí)行,重新執(zhí)行已經失敗的任務。TaskTracker僅負責執(zhí)行 由JobTracker指派的任務。通常,MapReduce軟件框架和分布式文件系統(tǒng)是運行在一組相 同的節(jié)點上的,即計算節(jié)點和存儲節(jié)點通常在一起。
[0009]位于最上方的客戶應用程序(Client Applications) 40,即應用該分布式計算軟 件框架20進行分布式計算、并存儲于該分布式文件系統(tǒng)10的應用程序。
[0010]請參閱圖2,Hadoop軟件框架通常還包括位于分布式計算軟件框架20和客戶應用 程序40之間的MapReduce編譯工具30,常見的有數(shù)據(jù)倉庫工具Hive、編程工具Pig等。
[0011]Hive是一個數(shù)據(jù)倉庫系統(tǒng)(data warehouse system),提供數(shù)據(jù)匯總、查詢和分 析。Hive支持對存儲于Hadoop兼容型分布式文件系統(tǒng)的大型數(shù)據(jù)庫的分析,同時完全兼容 MapReduce框架。它提供類似于SQL (Structured Query Language,結構化查詢語言)的語 言稱為HiveQL。[0012]Pig是一個編程平臺,提供大型數(shù)據(jù)集的分析。該平臺的語言稱為Pig Latin,用 來創(chuàng)建在MapReduce軟件框架上運行的程序。
[0013]圖1所示的Hadoop軟件框架中,客戶應用程序40必須基于MapReduce軟件框架 20直接開發(fā),MapReduce級的編程利用Java APIs,這對程序員提出了較高要求,所編寫的 客戶應用程序40也存在代碼冗長等缺點。
[0014]圖2所示的Hadoop軟件框架中,客戶應用程序40是基于MapRedece編譯工具30 開發(fā)的,可以采用HiveQUPig Latin等高等語言,這使得編程工作更為簡單,所編寫的客戶 應用程序40也可大幅削減代碼量。因而,圖2所示的Hadoop軟件框架在實際應用中更為常見。
[0015]請參閱圖3,現(xiàn)有的基于MapReduce的分布式計算方法包括如下步驟:
[0016]步驟S31,客戶應用程序向MapReduce編譯工具發(fā)出指令;
[0017]步驟S32,MapReduce編譯工具將該指令編譯為一個或多個作業(yè),再提交給 MapReduce軟件框架;
[0018]步驟S33, MapReduce軟件框架處理所述作業(yè),然后向MapReduce編譯工具輸出每 個作業(yè)結果;
[0019]步驟S34, MapReduce編譯工具將作業(yè)結果發(fā)送給客戶應用程序,和/或MapReduce 編譯工具將作業(yè)結果存儲于分布式文件系統(tǒng)。
[0020]請參閱圖4,所述步驟S33和S34也可合并為步驟S33’ =MapReduce軟件框架處理 所述一個或多個作業(yè),然后直接將作業(yè)結果發(fā)送給客戶應用程序,和/或直接將作業(yè)結果 存儲于分布式文件系統(tǒng)。
[0021]所述“指令”、“作業(yè)”、“任務”在本申請中特指以下含義:
[0022]指令(instruction)-是MapReduce編譯工具可執(zhí)行的。每條指令中都包括有
該條指令所操作的數(shù)據(jù),或者該條指令所操作的數(shù)據(jù)在分布式文件系統(tǒng)中的存儲地址。
[0023]作業(yè)(job)-是MapReduce軟件框架可執(zhí)行的。MapReduce編譯工具將一條指
令編譯為一個或多個作業(yè)。
[0024]任務(task)-是MapReduce軟件框架可執(zhí)行的。MapReduce軟件框架將一個
作業(yè)分解為多個任務。
[0025]上述步驟S33、S33’中的“MapReduce軟件框架處理作業(yè)”具體又包括具有前后順 序關系的映射步驟和歸約步驟。
[0026]所述映射步驟中,主節(jié)點JobTracker接收作業(yè),將一個作業(yè)分為多個任務,每個 任務包括一個或多個輸入的鍵值對(key/value pair)。主節(jié)點JobTracker再將這多個任 務交給多個從節(jié)點TaskTracker并行處理,此時,每個從節(jié)點TaskTracker稱為一個映射器 (Mapper)。映射器將每個輸入鍵值對映射(map)為一組中間格式的鍵值對集合,該中間格 式的鍵值對集合為零個、一個或多個中間格式的鍵值對。這些中間格式的鍵值對集合再返 回至主節(jié)點JobTracker。
[0027]所述歸約步驟中,主節(jié)點JobTracker接收各個映射器返回的中間格式的鍵值對 集合,將與一個鍵(key)相關聯(lián)的所有中間格式的值(value)分成一組。主節(jié)點JobTracker 再將與一個鍵相關聯(lián)的每一組中間格式的值發(fā)給一個從節(jié)點TaskTracker,此時每個從節(jié) 點TaskTracker稱為歸約器(Reducer)。各個歸約器并行處理,每個歸約器將與一個鍵相關聯(lián)的一組中間格式的數(shù)值集歸約(reduce)為一個更小的數(shù)值集。這些更小的數(shù)值集再返 回至主節(jié)點JobTracker,形成輸出的鍵值對,即作業(yè)結果。
[0028]在映射步驟中,映射器的數(shù)量是可以精確確定的,通常為一個作業(yè)所操作的數(shù)據(jù) (該作業(yè)的輸入數(shù)據(jù))的大小與分布式文件系統(tǒng)中的數(shù)據(jù)塊大小(例如為128MB)相除后的商 數(shù)。如有余數(shù),則可為商數(shù)+ I。
[0029]而歸約步驟中,歸約器的數(shù)量卻難以確定,目前采用如下三種方式來估算:
[0030]其一,針對每個指令通過人工方式確定歸約器數(shù)量,適用于該指令所編譯的一個 或多個作業(yè)。在大規(guī)模分布式存儲和計算的集群環(huán)境下,作業(yè)數(shù)通常數(shù)以萬計,因此帶來比 較高的人工開發(fā)和維護成本。
[0031]其二,對于不同指令,以一刀切的方式設置一個全局統(tǒng)一的歸約器數(shù)量,適用于所 有作業(yè)。該種方式導致部分作業(yè)由于歸約器數(shù)量過少而存在嚴重的運行低效,而另外一些 作業(yè)則由于歸約器數(shù)量過多而大量浪費計算和存儲資源。
[0032]其三,對于每個作業(yè),由MapReduce編譯工具估算歸約器的數(shù)量。例如Hive中內 置了推測機制,可以根據(jù)每個作業(yè)的輸入數(shù)據(jù)集來估算歸約器的數(shù)量。但是輸入數(shù)據(jù)集并 不簡單等同于歸約器實際處理的中間數(shù)據(jù)集,往往相差較大,這導致推測的歸約器數(shù)量通 常不是最優(yōu)值,有時甚至起到負面的效果。實際應用中通常關閉或針對特殊情況才開啟 MapReduce編譯工具對歸約器數(shù)量的估算功能。
[0033]在MapReduce軟件框架中,每個作業(yè)都是由多個映射器和多個歸約器來執(zhí)行的。 而每個映射器或歸約器都要啟動一個JVM (Java Virtual Machine, Java虛擬機)來實現(xiàn)。 如果歸約器的數(shù)量設置得過多,就會有大量非必須的JVM啟動和關閉,其開銷較大,這降低 了 MapReduce軟件框架的執(zhí)行效率。
[0034]在MapReduce軟件框架中,每個歸約器必然對應一個文件。如果歸約器的數(shù)量設 置得過多,就會使文件數(shù)量過多,而每個文件的大小則過小。在分布式文件系統(tǒng)(例如HDFS 系統(tǒng))中,過多的文件數(shù)量將會增大主節(jié)點Namenode的處理壓力,使得分布式文件系統(tǒng)中的 讀寫操作成為處理瓶頸。
【發(fā)明內容】
[0035]本申請實施例提供一種基于MapReduce的分布式計算方法,其可以為每個作業(yè)較 為精確地設置歸約器的數(shù)量。
[0036]為解決上述技術問題,本申請的基于MapReduce的分布式計算方法包括如下步 驟:
[0037]第I步,客戶應用程序向MapReduce編譯工具發(fā)出指令;
[0038]第2步,MapReduce編譯工具將該指令編譯為一個或多個作業(yè);在數(shù)據(jù)庫中查詢 該指令所對應的作業(yè)記錄,以查詢到的作業(yè)記錄中的歸約器數(shù)量作為相應作業(yè)的歸約器 數(shù)量;MapReduCe編譯工具將每個作業(yè)與對應的歸約器數(shù)量一起提交給MapReduce軟件框 架;
[0039]第3步,MapReduce軟件框架按照接收的歸約器數(shù)量處理每個作業(yè),然后向 MapReduce編譯工具輸出作業(yè)結果;
[0040]第4步,MapReduce編譯工具將成功作業(yè)記錄儲存在數(shù)據(jù)庫中,并將作業(yè)結果發(fā)送給客戶應用程序和/或存儲于分布式文件系統(tǒng)中。
[0041]相應地,本申請的基于MapReduce的分布式計算裝置包括:
[0042]用于發(fā)送指令的裝置;
[0043]用于將指令編譯為一個或多個作業(yè)的裝置;
[0044]用于在數(shù)據(jù)庫中查詢該指令所對應的作業(yè)記錄的裝置;
[0045]用于以查詢到的作業(yè)記錄中的歸約器數(shù)量作為相應作業(yè)歸約器數(shù)量的裝置;
[0046]用于提交作業(yè)與對應的歸約器數(shù)量的裝置;
[0047]用于按照接收的歸約器數(shù)量處理每個作業(yè)的裝置;
[0048]用于輸出作業(yè)結果的裝置;
[0049]用于將成功作業(yè)記錄儲存在數(shù)據(jù)庫中的裝置;
[0050]用于將作業(yè)結果發(fā)送給客戶應用程序和/或存儲于分布式文件系統(tǒng)的裝置。
[0051]本申請基于MapReduce的分布式計算方法和裝置,通過在MapReduce編譯工具層 面對MapReduce軟件框架處理作業(yè)之前和之后進行數(shù)據(jù)處理,一方面記錄MapReduce軟件 框架對歷史作業(yè)的處理結果,另一方面借鑒歷史作業(yè)的成功處理結果來處理當前作業(yè),從 而形成了一個閉環(huán)的反饋系統(tǒng),來解決困擾較大的如何設置歸約器數(shù)量的問題。
【專利附圖】
【附圖說明】
[0052]圖1是Hadoop軟件框架的基本結構示意圖;
[0053]圖2是Hadoop軟件框架的常見結構示意圖;
[0054]圖3是現(xiàn)有的基于MapReduce的分布式計算方法的流程圖一;
[0055]圖4是現(xiàn)有的基于MapReduce的分布式計算方法的流程圖二 ;
[0056]圖5是本申請的基于MapReduce的分布式計算方法的流程圖;
[0057]圖6是本申請的基于MapReduce的分布式計算方法的一個實施例的流程圖;
[0058]圖7是圖6中的prehook的流程圖;
[0059]圖8是圖6中的posthook的流程圖。
[0060]圖中附圖標記說明:
[0061]10為分布式文件系統(tǒng);20為分布式計算軟件框架;30為MapReduce編譯工具;40 為客戶應用程序。
【具體實施方式】
[0062]請參閱圖5,本申請的基于MapReduce的分布式計算方法包括如下步驟:
[0063]步驟S51,客戶應用程序向MapReduce編譯工具發(fā)出指令。
[0064]所述指令中或者直接包括該指令所操作的數(shù)據(jù)的內容,或者包括該指令所操作的 數(shù)據(jù)在分布式文件系統(tǒng)中的存儲地址,后者更為常見。
[0065]所述指令為MapReduce編譯工具可執(zhí)行的格式,例如為HiveQL語句、Pig Latin語句等。
[0066]步驟S52,MapReduce編譯工具將該指令編譯為一個或多個作業(yè),并在數(shù)據(jù)庫中 查詢該指令所對應的作業(yè)記錄,以查詢到的作業(yè)記錄中的歸約器數(shù)量作為作業(yè)的歸約器 數(shù)量;MapReduCe編譯工具將每個作業(yè)與對應的歸約器數(shù)量一起提交給MapReduce軟件框架;
[0067]進一步地,還可先為每個作業(yè)設置歸約器數(shù)量。
[0068]所述作業(yè)為MapReduce軟件框架可執(zhí)行的格式,即Java語句。
[0069]所設置的歸約器數(shù)量可以是人工確定的,或者是全局設置的,或者是MapReduce 編譯工具推測得到的。
[0070]進一步地,MapReduce編譯工具還可對該指令去噪,并在數(shù)據(jù)庫中查詢該去噪后指 令所對應的作業(yè)記錄,以查詢到的作業(yè)記錄中的歸約器數(shù)量替換相應作業(yè)所設置的歸約器 數(shù)量。所述去噪是指將指令中的無關變化量與自定義量去除掉。例如,所有指令中都包括 日期、時間信息,而該信息對于指令的執(zhí)行是無關的,每條指令中的日期、時間都是不同的, 因而將其去除掉。又如,所有指令都會指定該條指令所操作的數(shù)據(jù),該信息對于指令的執(zhí)行 是相關的,因而不能去除。再如,有些指令會自定義一些量,諸如數(shù)據(jù)類型等,這些自定義量 只在該條指令中有意義,其余指令無法識別,因而將其去除掉。去噪操作可視為一種“歸一 化”處理,去噪后的指令才具有可比性。
[0071]所述數(shù)據(jù)庫中記錄有以往的成功作業(yè)記錄。每個作業(yè)記錄包括:該作業(yè)所對應的 去噪后指令、該作業(yè)的編號、該作業(yè)采用的歸約器數(shù)量。所述作業(yè)的編號是指:當一條指令 編譯為多個作業(yè)時,用來表示這多個作業(yè)之間的先后順序的標識。
[0072]在MapReduce編譯工具這一層面,如果兩條指令去噪后的內容相同,那么這兩條 指令所編譯的作業(yè)在數(shù)量、順序、內容等諸方面也相同。
[0073]MapReduce編譯工具將每個作業(yè)與對應的歸約器數(shù)量一起提交給MapReduce軟件 框架。
[0074]步驟S53, MapReduce軟件框架按照接收的歸約器數(shù)量處理每個作業(yè),然后向 MapReduce編譯工具輸出作業(yè)結果。
[0075]其中,MapReduce軟件框架所輸出的每個作業(yè)結果中均可包括該作業(yè)是否處理成 功的標識。
[0076]步驟S54,MapReduce編譯工具將成功作業(yè)記錄儲存在數(shù)據(jù)庫中,并將作業(yè)結果發(fā) 送給客戶應用程序和/或存儲于分布式文件系統(tǒng)。
[0077]所述成功作業(yè)記錄包括:具有處理成功的標識的作業(yè)所對應的去噪后指令、該作 業(yè)的編號、MapReduce軟件框架在處理該作業(yè)時采用的歸約器數(shù)量。
[0078]在步驟S52中,“編譯”必須在“設置歸約器數(shù)量”之前進行?!叭ピ搿北仨氃凇安?詢”之前進行?!霸O置歸約器數(shù)量”和“查詢”都必須在“替換歸約器數(shù)量”之前進行。除此 之外,各項操作之間并無時序要求,可以任意一項或多項在先,或同時進行。
[0079]所述數(shù)據(jù)庫,可以儲存在分布式文件系統(tǒng)之中或之外,只要MapReduce編譯工具 對其可以存取數(shù)據(jù)即可。
[0080]可替換地,在步驟S52中,MapReduce編譯工具還為去噪后的指令計算指紋值。所 述計算指紋值是指對去噪后的指令采用任何具有唯一映射關系的函數(shù)計算函數(shù)值,例如 md5值。這樣,MapReduce編譯工具在數(shù)據(jù)庫中根據(jù)去噪后的指令的指紋值進行查詢。所述 數(shù)據(jù)庫中的每個作業(yè)記錄中,將該作業(yè)所對應的去噪后指令替換為去噪后指令的指紋值。 在步驟S54中,MapReduce編譯工具將該作業(yè)所對應的去噪后指令的指紋值(而非去噪后指 令)存儲在數(shù)據(jù)庫中。這種替換形式主要是考慮到去噪后指令可能比較長,在存儲、查詢等操作中耗時耗資源較多,以具有唯一映射關系的指紋值替代其進行存儲、查詢,效率更高。
[0081]另一種可替換地,在步驟S52中,MapReduce編譯工具為每個作業(yè)設置中間數(shù)據(jù)量 的大小,而非歸約器數(shù)量。所述中間數(shù)據(jù)量是指每個作業(yè)在映射步驟后得到的數(shù)據(jù)量,該中 間數(shù)據(jù)量是歸約步驟所實際處理的數(shù)據(jù)。所述數(shù)據(jù)庫中的每個作業(yè)記錄中,不記錄該作業(yè) 采用的歸約器數(shù)量,而改為記錄該作業(yè)的中間數(shù)據(jù)的大小。這樣,MapReduce編譯工具將查 詢到的該數(shù)據(jù)庫中的成功作業(yè)記錄中的中間數(shù)據(jù)的大小替換相應作業(yè)所設置的中間數(shù)據(jù) 的大小。在步驟S54中,MapReduce編譯工藝將該作業(yè)的中間數(shù)據(jù)的大小(而非采用的歸約 器數(shù)量)存儲在數(shù)據(jù)庫中。在同一個MapReduce軟件框架中,歸約器所處理的中間數(shù)據(jù)量的 大小與歸約器數(shù)量之間具有唯一確定的函數(shù)關系,因而取其中之一進行存儲即可。這種函 數(shù)關系例如為:歸約器數(shù)量=歸約器所處理的中間數(shù)據(jù)量的大小+分布式文件系統(tǒng)中的 數(shù)據(jù)塊大??;如有余數(shù)則十I。
[0082]相應地,本申請的基于MapReduce的分布式計算裝置包括:
[0083]用于發(fā)送指令的裝置;
[0084]用于將指令編譯為一個或多個作業(yè)的裝置;
[0085]用于在數(shù)據(jù)庫中查詢該指令所對應的作業(yè)記錄的裝置;
[0086]用于以查詢到的作業(yè)記錄中的歸約器數(shù)量作為相應作業(yè)歸約器數(shù)量的裝置;
[0087]用于提交作業(yè)與對應的歸約器數(shù)量的裝置;
[0088]用于按照接收的歸約器數(shù)量處理每個作業(yè)的裝置;
[0089]用于輸出作業(yè)結果的裝置;
[0090]用于將成功作業(yè)記錄儲存在數(shù)據(jù)庫中的裝置;
[0091]用于將作業(yè)結果發(fā)送給客戶應用程序和/或存儲于分布式文件系統(tǒng)的裝置。
[0092]進一步地,還可包括用于為每個作業(yè)設置歸約器數(shù)量的裝置;所述用于以查詢到 的作業(yè)記錄中的歸約器數(shù)量作為相應作業(yè)歸約器數(shù)量的裝置,還具體用于以查詢到的作業(yè) 記錄中的歸約器數(shù)量替換作為相應作業(yè)所設置的歸約器數(shù)量;
[0093]進一步地,還可包括用于對指令去噪的裝置;所述用于在數(shù)據(jù)庫中查詢該指令 所對應的作業(yè)記錄的裝置還具體用于在數(shù)據(jù)庫中查詢去噪后指令所對應的作業(yè)記錄的裝 置;
[0094]可替換地,還包括用于為去噪后的指令計算指紋值的裝置。所述用于在數(shù)據(jù)庫中 查詢去噪后指令所對應的作業(yè)記錄的裝置,改為用于在數(shù)據(jù)庫中查詢去噪后的指令的指紋 值所對應的作業(yè)記錄的裝置。
[0095]另一種可替換地,所述用于為每個作業(yè)設置歸約器數(shù)量的裝置,改為用于為每個 作業(yè)設置中間數(shù)據(jù)的大小的裝置。所述用于以查詢到的作業(yè)記錄中的歸約器數(shù)量替換相應 作業(yè)所設置的歸約器數(shù)量的裝置,改為用于以查詢到的作業(yè)記錄中的中間數(shù)據(jù)的大小替換 相應作業(yè)所設置的中間數(shù)據(jù)的大小的裝置。
[0096]例如,歷史上曾有指令A,去噪后為指令Al。該指令A被編譯為5個作業(yè)Jl?J5。 其中作業(yè)Jl?J3被MapReduce軟件框架判定為執(zhí)行成功,作業(yè)J4?J5被判定為執(zhí)行失 敗。因而作業(yè)Jl?J3的編號、采用的歸約器數(shù)量(或歸約器所處理的中間數(shù)據(jù)的大小)、對 應的去噪后指令Al (或該去噪后指令Al的指紋值)記錄到了數(shù)據(jù)庫之中。
[0097]當前的指令B,去噪后為指令BI。去噪后的指令BI與去噪后的指令Al相同,表明這兩個指令實際上執(zhí)行的同樣的操作。該指令B因此也被編譯為5個作業(yè)Jl?J5。通過 去噪后指令BI (或該去噪后指令BI的指紋值)在數(shù)據(jù)庫中查詢,作業(yè)Jl?J3采用了數(shù)據(jù) 庫中已存儲的歸約器數(shù)量(或歸約器所處理的中間數(shù)據(jù)的大小)的成功歷史經驗值。而作業(yè) J4?J5仍采用現(xiàn)有三種手段之一得到歸約器數(shù)量。假設作業(yè)J4被判定為執(zhí)行成功,作業(yè) J5被判定為執(zhí)行失敗,那么作業(yè)J4的編號、采用的歸約器數(shù)量(或歸約器所處理的中間數(shù) 據(jù)的大小)、對應的去噪后指令BI (或該去噪后指令BI的指紋值)也記錄到了數(shù)據(jù)庫之中, 供未來的指令采用。
[0098]請參閱圖6,這是本申請基于MapReduce的分布式計算方法的一個具體實施例,包 括如下步驟:
[0099]步驟S61,客戶應用程序向MapReduce編譯工具發(fā)出指令。
[0100]步驟S62a,MapReduce編譯工具將該指令編譯為一個或多個作業(yè)。
[0101]Prehook 步驟。
[0102]步驟S65,MapReduce編譯工具將每個作業(yè)與對應的歸約器數(shù)量一起提交給 MapReduce軟件框架。
[0103]步驟S66,MapReduce軟件框架按照接收的各作業(yè)的歸約器數(shù)量處理每個作業(yè),然 后向MapReduce編譯工具輸出作業(yè)結果。
[0104]Posthook 步驟。
[0105]步驟S69, MapReduce編譯工具將作業(yè)結果發(fā)送給客戶應用程序。
[0106]在計算機編程領域,名詞hooking (掛鉤)涵蓋了一系列技術,它用來改變或增加操 作系統(tǒng)的行為、或應用程序的行為、或軟件組件之間通過攔截函數(shù)調用(function calls)、 消息(messages)或事件(events)的行為。處理這種攔截的函數(shù)調用、消息或事件的代碼稱 為hook (鉤子)。
[0107]該實施例中,prehook表示在MapReduce軟件框架處理作業(yè)之前的攔截行為,具體 如圖7所示。其通過MapReduce編譯工具所編寫的prehook程序,即可在攔截步驟S62a到 步驟S65之間的數(shù)據(jù)傳遞,待prehook程序對這些數(shù)據(jù)處理完畢后,再返回執(zhí)行步驟S65。
[0108]所述prehook程序具體包括:
[0109]步驟S62b,MapReduce編譯工具為每個作業(yè)設置歸約器數(shù)量。
[0110]步驟S63,MapReduce編譯工具對該指令去噪,并在數(shù)據(jù)庫中根據(jù)去噪后的指令 進行查詢。如果數(shù)據(jù)庫中有相同的去噪后指令所對應的一個或多個作業(yè)記錄,則進入步驟 S64 ;如果數(shù)據(jù)庫中沒有相同的去噪后指令所對應的任何作業(yè)記錄,則進入步驟S65。
[0111]步驟S64,MapReduce編譯工具將查詢到的作業(yè)記錄中的作業(yè)編號和歸約器數(shù)量 記錄下來,對去噪后的指令的具有相同作業(yè)編號的作業(yè)以查詢到的歸約器數(shù)量替代所設置 的歸約器數(shù)量,然后進入步驟S65。
[0112]posthook表示在MapReduce軟件框架處理作業(yè)之后的攔截行為,具體如圖8所示。 其通過MapReduce編譯工具所編寫的posthook程序,即可攔截步驟S66到步驟S69之間的 數(shù)據(jù)傳遞,待prehook程序對這些數(shù)據(jù)處理完畢后,再返回執(zhí)行步驟S69。
[0113]所述pos thook程序具體包括:
[0114]步驟S67, MapReduce編譯工具判斷每個作業(yè)是否處理成功,如果處理成功則進入 步驟S68 ;如果處理失敗則進入步驟S69。[0115]步驟S68,MapReduce編譯工具將該作業(yè)所對應的去噪后指令、該作業(yè)的編號、 MapReduce軟件框架在處理該作業(yè)時采用的歸約器數(shù)量一起儲存在數(shù)據(jù)庫中,然后進入步 驟 S69。
[0116]本申請基于MapReduce的分布式計算方法可使歸約器的數(shù)量設置得較為精確,從 而顯著地提高MapReduce軟件框架的處理效率,這表現(xiàn)為以下幾個方面:
[0117]其一,如前所述,MapReduce軟件框架中的每個映射器或歸約器都要啟動一個JVM 來實現(xiàn)。映射器的數(shù)量是可以精確確定的,因而當歸約器的數(shù)量較為精確時,非必須的JVM 的啟動和關閉就會大大減少。
[0118]其二,在MapReduce軟件框架中,每個映射器和歸約器都要由主節(jié)點JobTracker 進行任務調度。當歸約器的數(shù)量較為精確時,主節(jié)點JobTracker的調度開銷也將減少。
[0119]其三,對一個計算機集群而言,其能承載的歸約器具有一個最大數(shù)量。當歸約器的 數(shù)量較為精確時,可以同時處理的作業(yè)數(shù)量也就得以確認,這有利于降低MapReduce軟件 框架中長期存在的對歸約器資源的競爭難題。例如,某個計算機集群最多可實現(xiàn)10000個 歸約器,如果每個作業(yè)的歸約器數(shù)量粗略估計需要5000個歸約器,那么只能同時處理2個 作業(yè)。如果每個作業(yè)較為精確地設置為500個歸約器,那么可以同時處理20個作業(yè)。
[0120]其四,如前所述,當歸約器的數(shù)量設置得過多,就會使文件數(shù)量過多,而每個文件 的大小則過小。當歸約器的數(shù)量較為精確時,有利于減少了文件數(shù)量,提高了單個文件的大 小,從而減輕分布式文件系統(tǒng)(例如HDFS系統(tǒng))中主節(jié)點Namenode的訪問(RPC)次數(shù)。同 時,還能改善文件碎片化現(xiàn)象。例如,IMB的數(shù)據(jù)如果采用1000個歸約器處理,那么平均每 個文件為IKB左右,這便帶來了文件碎片化的現(xiàn)象。如果只采用10個歸約器處理,那么平 均每個文件為102KB左右,降低了文件碎片化現(xiàn)象。
[0121]其五,當一個作業(yè)的歸約器數(shù)量較為精確時,會使得后續(xù)作業(yè)的映射器的吞吐量 提高,處理得更有效率,并減少文件碎片化現(xiàn)象。
[0122]其六,MapReduce編譯工具原來只能實現(xiàn)指令級別的hook功能,本申請則使得 MapReduce編譯工具可實現(xiàn)作業(yè)級別的hook功能,這便大大擴展了 MapReduce編譯工具的 處理范圍。
[0123]以上僅為本申請的優(yōu)選實施例,并不用于限定本申請。對于本領域的技術人員來 說,本申請可以有各種更改和變化。凡在本申請的精神和原則之內,所作的任何修改、等同 替換、改進等,均應包含在本申請的保護范圍之內。
【權利要求】
1.一種基于MapReduce的分布式計算方法,其特征是,包括如下步驟:第I步,客戶應用程序向MapReduce編譯工具發(fā)出指令;第2步,MapReduce編譯工具將該指令編譯為一個或多個作業(yè);在數(shù)據(jù)庫中查詢該指令所對應的作業(yè)記錄,以查詢到的作業(yè)記錄中的歸約器數(shù)量作為相應作業(yè)的歸約器數(shù)量; MapReduce編譯工具將每個作業(yè)與對應的歸約器數(shù)量一起提交給MapReduce軟件框架;第3步,MapReduce軟件框架按照接收的歸約器數(shù)量處理每個作業(yè),然后向MapReduce 編譯工具輸出作業(yè)結果;第4步,MapReduce編譯工具將成功作業(yè)記錄儲存在數(shù)據(jù)庫中,并將作業(yè)結果發(fā)送給客戶應用程序和/或存儲于分布式文件系統(tǒng)。
2.根據(jù)權利要求1所述的一種基于MapReduce的分布式計算方法,其特征是,所述方法第2步中,MapReduce編譯工具將該指令編譯為一個或多個作業(yè)后,為每個作業(yè)設置歸約器數(shù)量;當在數(shù)據(jù)庫中查詢到該指令所對應的作業(yè)記錄時,以查詢到的作業(yè)記錄中的歸約器數(shù)量替換相應作業(yè)所設置的歸約器數(shù)量。
3.根據(jù)權利要求1所述的一種基于MapReduce的分布式計算方法,其特征是,所述方法第2步中,MapReduce編譯工具還對該指令去噪,并在數(shù)據(jù)庫中查詢該去噪后指令所對應的作業(yè)記錄。
4.根據(jù)權利要求3所述的一種基于MapReduce的分布式計算方法,其特征是,所述方法第2步中,MapReduce編譯工具還為去噪后的指令計算指紋值;MapReduCe編譯工具在數(shù)據(jù)庫中查詢去噪后的指令的指紋值所對應的作業(yè)記錄。
5.根據(jù)權利要求1所述的一種基于MapReduce的分布式計算方法,其特征是,所述方法第2步中,MapReduce編譯工具為每個作業(yè)設置中間數(shù)據(jù)的大小,還以在數(shù)據(jù)庫中查詢到的作業(yè)記錄中的中間數(shù)據(jù)的大小替換相應作業(yè)所設置的中間數(shù)據(jù)的大小。
6.根據(jù)權利要求1所述的一種基于MapReduce的分布式計算方法,其特征是,所述方法第2步中,所述去噪是指將指令中的無關變化量與自定義量去除掉。
7.根據(jù)權利要求3所述的一種基于MapReduce的分布式計算方法,其特征是,所述計算指紋值是指對去噪后的指令采用任何具有唯一映射關系的函數(shù)計算函數(shù)值。
8.根據(jù)權利要求1所述的一種基于MapReduce的分布式計算方法,其特征是,所述數(shù)據(jù)庫中記錄有以往的成功作業(yè)記錄;每個作業(yè)記錄包括:該作業(yè)所對應的去噪后指令、該作業(yè)的編號、該作業(yè)采用的歸約器數(shù)量。
9.根據(jù)權利要求4或8所述的一種基于MapReduce的分布式計算方法,其特征是,每個作業(yè)記錄中,以該作業(yè)所對應的去噪后指令的指紋值,替代該作業(yè)所對應的去噪后指令。
10.根據(jù)權利要求5或6所述的一種基于MapReduce的分布式計算方法,其特征是,每個作業(yè)記錄中,以該作業(yè)的歸約器所處理的中間數(shù)據(jù)的大小,替代該作業(yè)采用的歸約器數(shù)量。
11.一種基于MapReduce的分布式計算裝置,其特征是,包括:用于發(fā)送指令的裝置;用于將指令編譯為一個或多個作業(yè)的裝置;用于在數(shù)據(jù)庫中查詢該指令所對應的作業(yè)記錄的裝置;用于以查詢到的作業(yè)記錄中的歸約器數(shù)量作為相應作業(yè)歸約器數(shù)量的裝置;用于提交作業(yè)與對應的歸約器數(shù)量的裝置;用于按照接收的歸約器數(shù)量處理每個作業(yè)的裝置;用于輸出作業(yè)結果的裝置;用于將成功作業(yè)記錄儲 存在數(shù)據(jù)庫中的裝置;用于將作業(yè)結果發(fā)送給客戶應用程序和/或存儲于分布式文件系統(tǒng)的裝置。
【文檔編號】G06F9/50GK103455374SQ201210181255
【公開日】2013年12月18日 申請日期:2012年6月5日 優(yōu)先權日:2012年6月5日
【發(fā)明者】王勇, 廖新濤, 徐冬 申請人:阿里巴巴集團控股有限公司