一種分布式計算系統中對象傳遞的方法
2023-07-06 13:26:31 3
專利名稱:一種分布式計算系統中對象傳遞的方法
技術領域:
本發明涉及一種分布式計算系統,尤其涉及一種分布式計算系統中對象傳遞的方法。
背景技術:
分布式計算,是把一個需要非常巨大的計算能力才能解決的問題分成許多小的部 分,然後把這些小的部分分配給許多計算機進行處理,最後把這些計算結果綜合起來得到 最終的結果,它是一門計算機科學。
分布式計算系統(Map/Reduce),是一個用於大規模數據處理的分布式計算模型, 作為目前最為常見的分布式計算系統,它最初是由Google工程師設計並實現的。其中對它 的定義是,Map/Reduce是一個編程模型(programming model ),是一個用於處理和生成大規 11 ^: (processing and generating large data sets) ^ ^° ffiPtl—f map函數來處理一個key/value對以生成一批中間的key/value對,再定義一個reduce函 數將所有這些中間的有著相同key的values合併起來。很多現實世界中的任務都可用這 個模型來表達。
Hadoop,是由Apache基金會開發,採用JAVA開發語言實現了分布式文件系統HDFS 和Map-Reduce分布式計算平臺,用戶只要繼承該系統提供的基類MapReduceBase,分別實 現Map和Reduce的兩個類,並註冊Job即可自動分布式運行定製的任務。
Hadoop的Map/Reduce實現中,對於每一個具體的作業(Job),均需要在不同的節 點之間傳遞運行時所需的配置信息,它是通過job. xml來實現的,即由作業(Job)發起端將 運行時所需信息,例如作業(Job)名稱,輸入/輸出格式,Map/Reduce任務個數等等,寫入一 個job. xml文件,然後傳遞到不同的系統節點。job. xml是標準的XML(可擴展標準語言)文 件,每一項具體信息均以XML的元素(element)形成存在其中。系統中其他運行節點從這個 job. xml文件中讀取相關信息,用以配置該節點上面運行的部分任務,從而實現真箇Map/ Reduce的分布式運行。圖1為現有分布式計算系統基本結構示意圖,如圖1所示,分布式計 算系統一般包括客戶端、作業伺服器和任務伺服器。客戶端將作業及其相關內容和配置寫 入一個job. xml,提交到作業伺服器去,並時刻監控執行的狀況;作業伺服器,在Hadoop中 稱為JobTracker或Master,負責將作業文件(xml文件)分發到多個任務伺服器,作業服務 器負責管理運行在此框架下所有作業;任務伺服器,具體的負責執行用戶定義操作的,每一 個作業被拆分成很多的任務,包括Map任務和Reduce任務等,任務是具體執行的基本單元, 它們都需要分配到合適任務伺服器上去執行,任務伺服器一邊執行一邊向作業伺服器匯報 各個任務的狀態,以此來幫助作業伺服器了解作業執行的整體情況,分配新的任務等。
現有的分布式計算系統,即Hadoop Map/Reduce系統中無法傳遞對象(class)實 例,job. xml僅僅只能用來傳遞有限的簡單數據類型,例如int,long, float, String, boolean等,由於XML對於傳輸的字符,即每個元素(element)中的字符是有一定限制的,不 能夠隨便將內存中一段緩存(buf f er )拷貝至xml中進行傳遞,那樣會造成XML編解碼失敗,不能進行傳輸。
然而用戶定製的應用一般不只是有上述這些簡單的數據類型,用戶的應用中經常 會需要在Map-Reduce系統的各個節點之間傳遞複雜的對象(class)實例,進行一些高級的 分布式計算,則目前Hadoop的Map/Reduce實現則不能提供這種功能。發明內容
為了解決現有技術存在的不足,本發明的目的在於提供一種分布式計算系統中對 象傳遞的方法,可以使分布式計算系統的各個節點之間傳遞複雜的對象實例。
為實現上述目的,本發明提供的一種分布式計算系統中對象傳遞的方法,該方法 包括以下步驟將對象序列化、編碼,寫入作業文件; 傳送含有編碼序列的作業文件;將含有編碼序列的作業文件中的編碼序列進行解碼和反序列化,提取並使用對象內容。
其中,所述將對象序列化、編碼是由客戶端將對象分解成字節流,然後再將所述字 節流經過編碼,轉換成ASCII字符。
其中,所述作業文件是標準的XML文件。
其中,所述將對象編碼是採用Base64編碼。
其中,所述傳送含有編碼序列的作業文件的步驟進一步包括客戶端將所述含有 編碼序列的作業文件傳送給作業伺服器和作業伺服器將所述含有編碼序列的作業文件傳 送給任務伺服器的步驟。
其中,所述將含有編碼序列的作業文件中的編碼序列進行解碼和反序列化,提取 並使用對象內容的步驟進一步包括作業伺服器將含有編碼序列的作業文件中的編碼序列 進行解碼和反序列化,提取並使用對象內容和任務伺服器將含有編碼序列的作業文件中的 編碼序列進行解碼和反序列化,提取並使用對象內容的步驟。
其中,所述對象序列化是將可串行化接口的對象轉換成一個字節序列。
本發明提供的分布式計算系統中對象傳遞的方法解決了當前最常見的分布式計 算系統,即Hadoop Map/Reduce系統中無法傳遞對象實例的問題,對Map/Reduce系統中 的job的處理能力進行了有效的擴展,Map/Reduce系統在進行分布式運算時,就不會局限 於只能在不同節點之間傳遞字符串這樣的簡單數據結構信息,而是可以傳遞複雜的對象 (class)實例,有效的增強了整個Hadoop Map/Reduce分布式計算系統的處理能力,可以進 行更為高級的分布式運算過程。
本發明的其它特徵和優點將在隨後的說明書中闡述,並且,部分地從說明書中變 得顯而易見,或者通過實施本發明而了解。
附圖用來提供對本發明的進一步理解,並且構成說明書的一部分,並與本發明的 實施例一起,用於解釋本發明,並不構成對本發明的限制。在附圖中圖1為現有分布式計算系統基本結構示意圖;圖2為根據本發明的分布式計算系統中對象傳遞的方法流程圖。
具體實施方式
以下結合附圖對本發明的優選實施例進行說明,應當理解,此處所描述的優選實 施例僅用於說明和解釋本發明,並不用於限定本發明。
為了實現在Hadoop的Map/Reduce系統中傳遞用戶的對象(class)實例,擴展現 有Map/Reduce系統中作業(job)的處理能力,亦即有效增強整個Map/Reduce系統的處理 能力,本申請提案採用了 Java對象序列化與Base64編解碼相結合的技術方案。
Java對象序列化,是將實現了可串行化(Serializable)接口的對象轉換成一個 字節序列,並能夠在以後將這個字節序列完全恢復為原來的對象。序列化的過程就是對象 寫入字節流和從字節流中讀取對象。將對象狀態轉換成字節流之後,可以用Java, io包中 的各種字節流類將其保存到文件中,管道到另一線程中或通過網絡連接將對象數據發送到 另一主機。序列化分為兩大部分序列化和反序列化。序列化是這個過程的第一部分,將數 據分解成字節流,以便存儲在文件中或在網絡上傳輸。反序列化就是打開字節流並重構對 象。對象序列化不僅要將基本數據類型轉換成字節表示,還要恢復數據,恢復數據要求恢復 數據的對象實例。
Base64編碼,是網絡上最常見的用於傳輸SBit字節代碼的編碼方式之一。在 RFC2045中Base64被定義為BaSe64內容傳送編碼被設計用來把任意序列的8位字節描述 為一種不易被人直接識別的形式。Base64產生的原因還有一個就是,在Email的傳送過程 中,由於歷史原因,Email只被允許傳送ASCII字符,即一個8位字節的低7位。Base64要 求把每三個8Bit的字節轉換為四個6Bit的字節(3*8 = 4*6 = M),然後把6Bit再添兩位 高位0,組成四個SBit的字節,也就是說,轉換後的字符串理論上將要比原來的長1/3。
Hadoop的Map/Reduce系統中使用job. xml來傳遞不同任務伺服器(計算節點)之 間的信息,對象序列化之後的字節流不能夠直接寫入ml的元素(element)進行傳遞,可以 將對象序列化形成的字節流經過Base64編碼之後,轉換成可以寫入xml元素(element)的 合法ASCII字符,在Map/Reduce系統中的各任務伺服器(計算節點)之間進行傳遞,系統中 接收到job. xml的任務伺服器,先將job. xml中的元素(element)進行Base64解碼,再對 解碼形成的字節流做對象的反序列化,就可以轉換成所需要的對象實例,這樣就達到了在 Hadoop的Map/Reduce系統中不同任務伺服器(計算節點)之間傳遞對象。
圖2為根據本發明的分布式計算系統中對象傳遞的方法流程圖,下面將參考圖2, 對本發明的分布式計算系統中對象傳遞的方法進行詳細描述。
首先,在步驟201,客戶端(Map/Reduce Client)作為作業發起端,將對象分解成 字節流進行序列化,然後再將對象序列化形成的字節流經過Base64編碼,轉換成可以寫入 xml元素(element)的合法ASCII字符,寫入作業文件(job. xml),作業文件是標準的XML (可擴展標準語言)文件,每一項具體信息均以XML的元素(element)形成存在其中。
在步驟202,客戶端將包含經過序列化、Base64編碼的作業文件(job. xml)提交給 作業伺服器(Map/Reduce Master)。
在步驟203,作業伺服器接收到包含經過序列化、Base64編碼的作業文件後,對該 作業文件中的Base64編碼序列進行解碼,並反序列化,提取並使用該對象內容。
在步驟204,作業伺服器將收到包含經過序列化、Base64編碼的作業文件傳遞給 各個任務伺服器(Map/Reduce Slave)。
在步驟205,任務伺服器接收到包含經過序列化、Base64編碼的作業文件後,對作 業文件中的Base64編碼序列進行解碼,並反序列化,提取並使用該對象內容。
通過本發明的分布式計算系統中對象傳遞的方法,Map/Reduce系統中的作業 (job)處理能力得到了有效的擴展,Map/Reduce系統在進行分布式運算時,就不會局限 於只能在不同節點之間傳遞字符串這樣的簡單數據結構信息,而是可以傳遞複雜的對象 (class)實例,有效的增強了整個Map/Reduce系統的處理能力,可以進行更為高級的分布 式運算過程。
本領域普通技術人員可以理解以上所述僅為本發明的優選實施例而已,並不用 於限制本發明,儘管參照前述實施例對本發明進行了詳細的說明,對於本領域的技術人員 來說,其依然可以對前述各實施例記載的技術方案進行修改,或者對其中部分技術特徵進 行等同替換。凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含 在本發明的保護範圍之內。
權利要求
1.一種分布式計算系統中對象傳遞的方法,該方法包括以下步驟 將對象序列化、編碼,寫入作業文件;傳送含有編碼序列的作業文件;將含有編碼序列的作業文件中的編碼序列進行解碼和反序列化,提取並使用對象內容。
2.根據權利要求1所述的分布式計算系統中對象傳遞的方法,其特徵在於,所述將對 象序列化、編碼是由客戶端將對象分解成字節流,然後再將所述字節流經過Base64編碼, 轉換成ASCII字符。
3.根據權利要求1所述的分布式計算系統中對象傳遞的方法,其特徵在於,所述作業 文件是標準的XML文件。
4.根據權利要求1所述的分布式計算系統中對象傳遞的方法,其特徵在於,所述將對 象序列化是將可串行化接口的對象轉換成一個字節序列。
5.根據權利要求1-4任一項所述的分布式計算系統中對象傳遞的方法,其特徵在於, 所述傳送含有編碼序列的作業文件的步驟進一步包括客戶端將所述含有編碼序列的作業 文件傳送給作業伺服器和作業伺服器將所述含有編碼序列的作業文件傳送給任務伺服器 的步驟。
6.根據權利要求1-4任一項所述的分布式計算系統中對象傳遞的方法,其特徵在於, 所述將含有編碼序列的作業文件中的編碼序列進行解碼和反序列化,提取並使用對象內容 的步驟進一步包括作業伺服器將含有編碼序列的作業文件中的編碼序列進行解碼和反序 列化,提取並使用對象內容和任務伺服器將含有編碼序列的作業文件中的編碼序列進行解 碼和反序列化,提取並使用對象內容的步驟。全文摘要
一種分布式計算系統中對象傳遞的方法,該方法包括以下步驟將對象序列化、編碼,寫入作業文件;傳送含有編碼序列的作業文件;將含有編碼序列的作業文件中的編碼序列進行解碼和反序列化,提取並使用對象內容。其中,所述將對象序列化、編碼是由客戶端將對象分解成字節流,然後再將所述字節流經過編碼,轉換成ASCII字符。其中,所述作業文件是標準的XML文件;其中,所述將對象編碼是採用Base64編碼。本發明的分布式計算系統中對象傳遞的方法,可以使分布式計算系統的各個節點之間傳遞複雜的對象實例,有效的增強了整個分布式計算系統系統的處理能力,可以進行更為高級的分布式運算過程。
文檔編號G06F17/30GK102033959SQ201010610679
公開日2011年4月27日 申請日期2010年12月29日 優先權日2010年12月29日
發明者謝天 申請人:北京播思軟體技術有限公司