述)并且解決(聯系)依賴關系來執行初始化以啟動分布式批處理應用120。元數據管理單元113的元數據共享單元115借助模塊加載器112將加載在其中的元數據保存在文件夾116中,同時,將它提供到從節點20的元數據共享單元115,以保存它。
[0096]首先,僅由主節點10的執行容器111(主容器)執行第一步121。在下面的第二步122中,執行容器111 (主容器)向從節點20提供執行第二步122的從執行的命令。從節點20啟動執行容器111(從容器),以準備啟動分布式批處理應用120。
[0097]從節點20從主節點10的元數據共享單元115獲取執行第二步122所需的元數據。然后,從節點創建僅僅元數據的類文件并且將它存儲到文件夾116。從節點20的執行容器111(從容器)調用用于執行從模塊122b (step2_slave.class)的處理的方法。然而,要注意在要調用的方法中沒有實際執行代碼,該方法只提供用于加載執行區域的命令。因此,執行該命令。
[0098]也就是說,從節點20的執行容器111(從容器)從主節點10的元數據共享單元115獲取從模塊122b(step2_slave.class)的執行區域的數據,根據其中寫入的內容將文件夾116的存儲區域的數據重新初始化,并且將從模塊122b(Step2_SlaVe.ClaSS)寫入其中。也就是說,在從節點20中,對元數據和執行區域二者執行重新初始化。由此,獲取可執行正常應用動作的狀態。因此,執行從模塊12213(8七6口2_813¥6.(31388)。在從節點203和2013中同時執行上述的處理。
[0099]在從節點20a和20b中,可使用已經由主節點10執行的數據進行元數據的獲取和加載。由此,變得可以高速執行啟動。另外,在調用實際要執行的代碼之后,獲取執行所需的代碼和數據,使得實際要傳遞的數據量可減少。
[0100]圖5至圖6是示出在圖2至圖3中示出的分布式處理系統100中操作圖4中示出的分布式批處理應用120的情況下執行的處理的流程圖。圖5至圖6因為紙面的空白而分開在兩頁上示出。首先,執行容器111(主容器)加載distributed batch applicat1n l.jar文件,并且將其內部的模塊、配置文件等中的每個保存于文件夾116(步驟S101)。
[0101]隨后,執行容器111(主容器)加載分布式批處理應用120的配置文件120a并且啟動分布式批處理應用120(步驟S102)。本文中,如圖1中所示,執行容器111(主容器)從第一步121起依次進行執行處理。
[0102]為了執行第一步121,執行容器111(主容器)向模塊加載器112提供加載第一主模塊121a(stepl.class)從而成為可執行狀態的命令,并且響應于此,模塊加載器112加載第一主模塊121a(stepl.class)的元數據(步驟S103)。
[0103]此時,模塊加載器112向元數據管理單元113進行關于第一主模塊12 la(stepl.class)的存在的查詢。響應于此,元數據管理單元113檢查主節點10的元數據共享單元115中是否存在元數據。此時,在元數據共享單元115中不存在元數據,使得元數據管理單元113將指示“否”的響應返回到模塊加載器112(步驟S104)。
[0104]模塊加載器112在接收到命令時將它提供到文件管理單元114以從文件夾116上的文件加載第一主模塊121a(stepl.class)的元數據。文件管理單元114在文件夾116中搜索第一主模塊121a(st印l.class),加載元數據,并且將它提供到模塊加載器112(步驟S105)。
[0105]隨后,模塊加載器112在存儲器上擴展第一主模塊121a(stepl.class)的元數據并且同時將它告知元數據管理單元113。元數據管理單元113將元數據寫入元數據共享單元115(步驟S106)。圖7是示出在完成直至圖5中的步驟S106的處理的狀態下的元數據共享單元115的說明圖。
[0106]隨后,模塊加載器112加載第一主模塊121a(stepl.class)的元數據并且當在元數據的“依賴關系”的部分中定義所需的共享模塊和從模塊時,根據定義加載必要文件或者向其他設備提供命令(步驟S107)。在該實施例的情況下,在第一主模塊121a中沒有特別定義依賴關系。因此,這里的執行沒有特別之處,被推進到“解決依賴關系”方。
[0107]然后,模塊加載器112執行試探性初始化處理(步驟S108)。實際上,不執行第一主模塊121a(stepl.class)的正常初始化處理,預先定義第一主模塊12la(stepl.class)以調用“〈clinit〉”并且進行所有其他方法調用“execut1n reg1n loading command”。圖8是示出其中在圖4中示出的分布式批處理應用120中定義其“execut1n reg1n loadingcommand”的第一主模塊121a(stepl.class)的說明圖。
[0108]這里的“execut1n reg1n loading command”是通過加載在模塊加載器112中指定處于能夠執行應用的狀態的類的執行區域來執行重新初始化的方法。以這種方式執行試探性初始化,并且由此認為正常初始化處理結束。第一步121不包括分布式處理,使得在這里不執行隨后將描述的步驟S115。
[0109]由此,執行容器111(主容器)開始執行第一主模塊121a(stepl.class)。如圖8中所示,在該實施例中,用“execut1n reg1n loading command”取代實際執行代碼。因此,執行容器111 (主容器)向模塊加載器112提供加載執行區域的命令,模塊加載器112向文件管理單元114提供加載該類的執行區域的命令(步驟S109)。
[0110]當類文件的執行區域處于自身節點的文件夾116中時,文件管理單元114在接收到命令時從該類文件加載執行區域(步驟S110至S111)。如果不存在類文件或者在文件夾116中沒有執行區域(僅僅元數據的類文件),則加載其他節點中的類文件的執行區域(步驟S110至S112)。
[0111]在這個實施例中,在主節點10的文件夾116中存在擴展的第一主模塊121a(stepl.class)。因此,文件管理單元114加載執行區域并且將它告知模塊加載器112。
[0112]模塊加載器112將執行區域設置于主存儲器,覆寫元數據,并且執行重新初始化,以成為可執行方法的狀態(步驟S113)。圖9是示出處于直至圖5中示出的步驟S113的處理被完成時執行區域被覆寫的狀態下的第一主模塊121a(stepl.class)的說明圖。然后,執行容器111(主容器)在該狀態下執行第一主模塊121a(Stepl.ClaSS)(步驟S114),并且終止關于第一步121的處理。
[0113]隨后,執行容器111(主容器)開始執行關于第二步122的處理。也就是說,針對第二主模塊12]^(8丨6口2.0]^88)執行與步驟5101至5106的處理相同的處理。
[0114]隨后,模塊加載器112用第二主模塊121a(step2.class)的元數據執行解決依賴關系的處理(步驟S107)。第二主模塊121a(Step2.ClaSS)的元數據的“依賴關系”的部分表示取決于從模塊122b(step2_slave.(:1&88)和共享模塊122(3(811&16(12.class),使得嘗試從元數據共享單元115讀出它們。然而,它們在其中并不存在,使得文件管理單元114讀出它們并且將它們寫入元數據共享單元115。
[0115]由此,解決依賴關系。因此,處理轉到步驟S108,以如第一步121的情況下一樣執行試探性初始化,脫離用“execut1n reg1n loading command”取代所有方法的狀態(步驟S108至S114)。圖10是示出在圖4中示出的分布式批處理應用120中定義其“execut1nreg1n loading command”的第二主模塊(step2.class)的說明圖。在這種情況下,從模塊122b (step2_s lave.class)和共享模塊122c(shared2.class)像它們在主節點10方一樣保由ο
[0116]在第二步122中,主節點10和從節點20以協作方式執行分布式并行處理。因此,主節點10的執行容器111(主容器)倉ll建僅僅元數據的從模塊122b(step2_slave.class)(執行區域只是“execut1n reg1n loading command”)并且將它發送到從節點20(步驟S115)。圖11是示出僅僅通過圖5中示出的步驟S115的處理創建的元數據的從模塊122b (s t ep2_slave, class)的說明圖。要注意,僅僅主節點10創建的元數據的從模塊122b可或不可保存在主節點10方的存儲模塊12中。
[0117]從節點20的執行容器(從容器)在接收到從模塊122b(step2_slave.class)的執行時開始執行并且執行與步驟S101至S103的步驟的處理相同的處理。在從模塊122b(step2_slave.class)的元數據的“依賴關系”的部分中,需要共享模塊1220(888^(12.0]^88),使得元數據管理單元113檢查在主節點10的元數據共享單元115中是否存在這些模塊(步驟S101至S104)。
[0118]從節點20的模塊加載器112借助元數據管理單元113獲取主節點10的第二主模塊121a(step2.class)、從模塊12213(8七6卩2_81&¥6.class)和共享模塊 122c(shared2.class)的元數據。原來,必須執行用于解決依賴關系的處理。然而,這已經被主節點10的處理解決。因此,從主節點的元數據共享單元11 5獲取這些模塊(步驟S107 ),由此“dependentrelat1n is solved”。
[0119]從節點20的模塊加載器112在文件夾116上擴展從主節點10的元數據共享單元115獲取的元數據,并且如主節點10的情況下一樣執行嘗試性初始化(步驟S108)。
[0120]從節點20的執行容器111(從容器)調用從模塊12213(8七6口2_813¥6.(:1388)。然而,在其元數據中包含“execut1n reg1n loading command”,使得用于加載執行區域的指令被提供到從節點20的模塊加載器112 (步驟S109)。
[0121]從節點20的文件管理單元114在接收到該命令時從主節點10的文件夾116讀出文件類的執行區域并且將它寫入自身文件夾116,因為在自身文件夾116中沒有從模塊122b(step2_slave.class)(步驟SI 13、SI 16)。
[0122]從節點20的模塊加載器112將執行區域設置于主存儲器,覆寫元數據,并且執行重新初始化,以成為可執行方法的狀態(步驟S113)。圖12是示出處于圖5中示出的步驟S113的處理被完成時設置執行區域的狀態下的從模塊122b(step2_slave.class)的說明圖。然后,執行容器111(從容器)在該狀態下執行從模塊122b(step2_slave.class)(步驟S114),并且終止關于第二步122的處理。
[0123]如第一步121的情況下一樣,通過主節點10執行關于第三步S123的處理。通過以上步驟,完成關于執行分布式批處理應用120的處理。
[0124](第一實施例的整體動作和效果)
[0125]接下來,將描述上述實施例的整體動作。
[0126]在其中多個計算機相互互連并且通過這些計算機以協作分布式方式執行分布式批處理應用的分布式處理系統中展現根據實施例的分布式處理方法。元數據管理單元從構成分布式批處理應用的模塊中的每個中獲取包含初始化處理的命令的元數據(圖5:步驟S101至S107)。模塊加載器用元數據執行初始化處理(圖5:步驟S108)。在初始化處理之后,文件管理單元檢查在存儲模塊中是否存在包含模塊的執行代碼的執行區域(圖6:步驟S109至S110)。當在存儲模塊中不存在包含執行代碼的執行區域時,文件管理單元從其他計算機加載執行代碼并且將它作為執行區域寫入(圖6:步驟S110至S