一種分布式計算系統中對象傳遞的方法
【技術領域】
[0001]本發明涉及一種分布式計算系統,尤其涉及一種分布式計算系統中對象傳遞的方法。
【背景技術】
[0002]分布式計算,是把一個需要非常巨大的計算能力才能解決的問題分成許多小的部分,然后把這些小的部分分配給許多計算機進行處理,最后把這些計算結果綜合起來得到最終的結果,它是一門計算機科學。
[0003]分布式計算系統(Map/Reduce),是一個用于大規模數據處理的分布式計算模型,作為目前最為常見的分布式計算系統,它最初是由Google工程師設計并實現的。其中對它的定義是,Map/Reduce是一個編程模型(programming model),是一個用于處理和生成大規模數據集(processing and generating large data sets)的相關的實現。用戶定義一個map函數來處理一個key/value對以生成一批中間的key/value對,再定義一個reduce函數將所有這些中間的有著相同key的values合并起來。很多現實世界中的任務都可用這個模型來表達。
[0004]Hadoop,是由Apache基金會開發,采用JAVA開發語言實現了分布式文件系統HDFS和Map-Reduce分布式計算平臺,用戶只要繼承該系統提供的基類MapReduceBase,分別實現Map和Reduce的兩個類,并注冊Job即可自動分布式運行定制的任務。
[0005]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任務等,任務是具體執行的基本單元,它們都需要分配到合適任務服務器上去執行,任務服務器一邊執行一邊向作業服務器匯報各個任務的狀態,以此來幫助作業服務器了解作業執行的整體情況,分配新的任務等。
[0006]現有的分布式計算系統,即Hadoop Map/Reduce系統中無法傳遞對象(class)實例,job.xml僅僅只能用來傳遞有限的簡單數據類型,例如int, long, float, String,boolean等,由于XML對于傳輸的字符,即每個元素(element)中的字符是有一定限制的,不能夠隨便將內存中一段緩存(buffer)拷貝至xml中進行傳遞,那樣會造成XML編解碼失敗,不能進行傳輸。
[0007]然而用戶定制的應用一股不只是有上述這些簡單的數據類型,用戶的應用中經常會需要在Map-Reduce系統的各個節點之間傳遞復雜的對象(class)實例,進行一些高級的分布式計算,則目前Hadoop的Map/Reduce實現則不能提供這種功能。
【發明內容】
[0008]為了解決現有技術存在的不足,本發明的目的在于提供一種分布式計算系統中對象傳遞的方法,可以使分布式計算系統的各個節點之間傳遞復雜的對象實例。
[0009]為實現上述目的,本發明提供的一種分布式計算系統中對象傳遞的方法,該方法包括以下步驟:
將對象序列化、編碼,寫入作業文件;
傳送含有編碼序列的作業文件;
將含有編碼序列的作業文件中的編碼序列進行解碼和反序列化,提取并使用對象內容。
[0010]其中,所述將對象序列化、編碼是由客戶端將對象分解成字節流,然后再將所述字節流經過編碼,轉換成ASCII字符。
[0011]其中,所述作業文件是標準的XML文件。
[0012]其中,所述將對象編碼是米用Base64編碼。
[0013]其中,所述傳送含有編碼序列的作業文件的步驟進一步包括:客戶端將所述含有編碼序列的作業文件傳送給作業服務器和作業服務器將所述含有編碼序列的作業文件傳送給任務服務器的步驟。
[0014]其中,所述將含有編碼序列的作業文件中的編碼序列進行解碼和反序列化,提取并使用對象內容的步驟進一步包括:作業服務器將含有編碼序列的作業文件中的編碼序列進行解碼和反序列化,提取并使用對象內容和任務服務器將含有編碼序列的作業文件中的編碼序列進行解碼和反序列化,提取并使用對象內容的步驟。
[0015]其中,所述對象序列化是將可串行化接口的對象轉換成一個字節序列。
[0016]本發明提供的分布式計算系統中對象傳遞的方法解決了當前最常見的分布式計算系統,即Hadoop Map/Reduce系統中無法傳遞對象實例的問題,對Map/Reduce系統中的job的處理能力進行了有效的擴展,Map/Reduce系統在進行分布式運算時,就不會局限于只能在不同節點之間傳遞字符串這樣的簡單數據結構信息,而是可以傳遞復雜的對象(class)實例,有效的增強了整個Hadoop Map/Reduce分布式計算系統的處理能力,可以進行更為高級的分布式運算過程。
[0017]本發明的其它特征和優點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發明而了解。
【附圖說明】
[0018]附圖用來提供對本發明的進一步理解,并且構成說明書的一部分,并與本發明的實施例一起,用于解釋本發明,并不構成對本發明的限制。在附圖中:
圖1為現有分布式計算系統基本結構示意圖;圖2為根據本發明的分布式計算系統中對象傳遞的方法流程圖。
【具體實施方式】
[0019]以下結合附圖