午夜毛片免费看,老师老少妇黄色网站,久久本道综合久久伊人,伊人黄片子

一種自動分發(fā)、運行和更新可執(zhí)行程序的方法及系統(tǒng)的制作方法

文檔序號:6509436閱讀:371來源:國知局
一種自動分發(fā)、運行和更新可執(zhí)行程序的方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及一種自動分發(fā)、運行和更新可執(zhí)行程序的方法及系統(tǒng),包括客戶端將可執(zhí)行程序及相關(guān)文件所在目錄打包成一個文件,并采用大文件分割及索引存儲方法將打包文件存儲到狀態(tài)存儲集群;工作節(jié)點定期到狀態(tài)存儲集群檢測索引狀態(tài),當檢測到有新的索引或已有索引有更新,按照索引方式將可執(zhí)行程序下載到本地目錄;工作節(jié)點定期到狀態(tài)存儲集群獲取程序相關(guān)信息;工作節(jié)點根據(jù)程序相關(guān)信息,每隔心跳時間到本地目錄檢測可執(zhí)行程序的下載狀態(tài),直到檢測到可執(zhí)行程序下載完成時,執(zhí)行可執(zhí)行程序;本發(fā)明可實現(xiàn)可執(zhí)行程序的自動分發(fā)、運行及更新,尤其在線更新正在執(zhí)行的可執(zhí)行程序,無需重新提交Job信息,增加了系統(tǒng)的靈活性與穩(wěn)定性。
【專利說明】一種自動分發(fā)、運行和更新可執(zhí)行程序的方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及云計算領(lǐng)域,尤其涉及一種自動分發(fā)、運行和更新可執(zhí)行程序的方法及系統(tǒng)。
【背景技術(shù)】
[0002]近年來,一種新的數(shù)據(jù)密集型應(yīng)用——流動“大數(shù)據(jù)”處理已經(jīng)得到了廣泛的認同,這些應(yīng)用的實例包括:網(wǎng)絡(luò)監(jiān)控、電信數(shù)據(jù)管理、Web應(yīng)用、傳感檢測等等。在這種數(shù)據(jù)流模型中,數(shù)據(jù)以大量、快速、時變(可能是不可預(yù)知)的數(shù)據(jù)流形式持續(xù)到達,針對這種網(wǎng)絡(luò)海量流動數(shù)據(jù)的實時處理需求,建立適合的平臺是需要考慮的問題。
[0003]基于流水線處理的實時云計算是解決流數(shù)據(jù)處理的有效方法與手段,其關(guān)注的是海量數(shù)據(jù)流即時處理,是一種數(shù)據(jù)密集型計算平臺。工業(yè)界和學(xué)術(shù)界開發(fā)了很多實時云平臺。在國內(nèi),包括baidu下一代數(shù)據(jù)流系統(tǒng)DStream、淘寶Beatles實時流式數(shù)據(jù)分析平臺等;在國外,包括斯坦福大學(xué)的STREAM、施樂公司的Tapestry、加州大學(xué)伯克利分校的Telegraph、布朗大學(xué)和麻省理工學(xué)院合作的Aurora、Apache的Hadoop Online、Twitter的Storm以及Yahoo的S4。這些系統(tǒng)從集中式演化到并行分布式,其主要目的就是為了提高數(shù)據(jù)流處理的性能,降低處理延遲。
[0004]目前,幾乎所有實時云平臺都采用類似hadoop map/reduce函數(shù)式/接口式編程模型為用戶提供編程接口,用戶可以在接口中完成自己的業(yè)務(wù)函數(shù),定義處理流程及Job信息,并提交Job程序到集群中,并分發(fā)程序給每個工作節(jié)點運行。
[0005]然而,這種方式存在以下一些問題:
[0006]1、函數(shù)式/接口式編程模型看似邏輯松散,靈活度高,但實則用戶依然需要按照接口編程,使用平臺提供的方法,當面對一些特殊業(yè)務(wù)時,平臺提供的接口與方法并不能滿足實際需求。
[0007]2、在線更新業(yè)務(wù)或算法代價過高。將所有處理流程中的函數(shù)打包成Jar文件或動態(tài)庫文件的形式,并作為Job提交。在這種模式下,哪怕是只對一個節(jié)點中的一個算法的細微改動,也需要將整個集群中的Job殺死、修改算法、重新打包、重新提交Job。
[0008]因此,我們需要一種可以擺脫函數(shù)式編程束縛、實現(xiàn)可執(zhí)行程序分布式提交運行的方法;并能夠提供在線更新某個指定業(yè)務(wù)程序,而非重新提交整個Job的方法。

【發(fā)明內(nèi)容】

[0009]本發(fā)明所要解決的技術(shù)問題是針對現(xiàn)有技術(shù)的不足,提供一種自動分發(fā)、運行和更新可執(zhí)行程序的方法及系統(tǒng),本發(fā)明具有良好的魯棒性及運行效率。
[0010]本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種自動分發(fā)、運行和更新可執(zhí)行程序的方法,包括如下步驟:
[0011]步驟A:客戶端將可執(zhí)行程序及相關(guān)文件所在目錄打包成一個文件,并存儲在緩存中;[0012]步驟B:客戶端采用大文件分割及索引存儲方法將緩存中的打包文件存儲到狀態(tài)存儲集群的相應(yīng)目錄中;
[0013]步驟C:工作節(jié)點每隔心跳時間到狀態(tài)存儲集群中與其相關(guān)的目錄中檢測索引狀態(tài),當檢測到有新的索引或已有索引有更新,按照索引方式將可執(zhí)行程序下載到本地目錄;
[0014]步驟D:工作節(jié)點每隔心跳時間到狀態(tài)存儲集群中與其相關(guān)的目錄中獲取包括程序名、程序地址的程序相關(guān)信息;
[0015]步驟E:工作節(jié)點根據(jù)程序相關(guān)信息,每隔心跳時間到本地目錄檢測可執(zhí)行程序的下載狀態(tài),直到檢測到可執(zhí)行程序下載完成時,執(zhí)行可執(zhí)行程序。
[0016]本發(fā)明的有益效果是:
[0017]1.可執(zhí)行程序自動分發(fā)、運行
[0018]通過將可執(zhí)行程序上傳到狀態(tài)存儲集群中,各工作節(jié)點定時檢查狀態(tài)存儲集群中的父目錄的狀態(tài),并下載可執(zhí)行程序,進而執(zhí)行可執(zhí)行程序,實現(xiàn)可執(zhí)行程序的自動分發(fā);
[0019]2.可執(zhí)行程序運行時自動更新
[0020]工作節(jié)點通過檢查狀態(tài)存儲集群中父目錄的版本號及更新時間,完成可執(zhí)行程序的版本控制,且工作節(jié)點執(zhí)行單元定期檢查本地目錄中正在執(zhí)行的可執(zhí)行程序的MD5值,如果MD5值發(fā)送變化,則終止現(xiàn)有可執(zhí)行程序的執(zhí)行,執(zhí)行最新版本的可執(zhí)行程序,這樣便擺脫了更新程序時需要重新提交Job的束縛;
[0021]3.靈活性與穩(wěn)定性增加
[0022]在傳統(tǒng)函數(shù)式云計算編程模型基礎(chǔ)上,增加可執(zhí)行程序執(zhí)行模式,使得靈活性大大增加;且通過狀態(tài)存儲集群讀寫鎖與大文件讀寫增強系統(tǒng)魯棒性。
[0023]4.業(yè)務(wù)程序崩潰自動重啟
[0024]本發(fā)明的運行控制方式使得當線程中業(yè)務(wù)程序運行崩潰后,可自動重啟業(yè)務(wù)程序,保證了平臺及業(yè)務(wù)的魯棒性。
[0025]在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進。
[0026]進一步,上述技術(shù)方案還包括:
[0027]步驟F:工作節(jié)點每隔心跳時間檢查本地目錄中正在執(zhí)行的可執(zhí)行程序;
[0028]步驟G:計算可執(zhí)行程序的MD5值,當發(fā)現(xiàn)可執(zhí)行程序的MD5值發(fā)生變化時則終止對原可執(zhí)行程序的執(zhí)行,重新執(zhí)行更新的可執(zhí)行程序。
[0029]采用上述進一步方案的有益效果是:業(yè)務(wù)程序運行時自動更新,本發(fā)明采用心跳檢查程序的MD5值,當發(fā)現(xiàn)程序的MD5值改變時,更新程序并重新執(zhí)行,實現(xiàn)可執(zhí)行程序隨時更新隨時自動運行功能;而程序更新也支持簡單的替換操作,無需重新提交整個Job,不僅效率大大提高,且流處理業(yè)務(wù)連續(xù)運行得到保持。
[0030]進一步,所述步驟B中客戶端采用大文件分割及索引存儲方法將緩存中的打包文件存儲到狀態(tài)存儲集群的具體實現(xiàn)為:
[0031]步驟B1:判斷狀態(tài)存儲集群中是否存在與打包文件相對應(yīng)的父目錄,如果存在,執(zhí)行步驟B2 ;如果不存在,則新建父目錄,執(zhí)行步驟B2 ;
[0032]步驟B2:將打包件分割成若干個分片文件;
[0033]步驟B3:在狀態(tài)存儲集群中的父目錄中存儲包括分片文件數(shù)目、每片分片文件的大小、末尾分片文件大小在內(nèi)的分片信息;
[0034]步驟B4:根據(jù)父目錄中存儲的分片信息創(chuàng)建相應(yīng)數(shù)量的子目錄;
[0035]步驟B5:將各分片文件存入相應(yīng)的子目錄中。
[0036]采用上述進一步方案的有益效果是:大文件存儲服務(wù),本發(fā)明實現(xiàn)了大文件分割索引存儲方式,解決了狀態(tài)存儲集群中存儲大文件超時、同步困難甚至導(dǎo)致狀態(tài)存儲集群崩潰的問題。
[0037]進一步,所述步驟C中工作節(jié)點從狀態(tài)存儲集群下載可執(zhí)行程序的具體實現(xiàn)為:
[0038]步驟Cl:工作節(jié)點每隔心跳時間檢查狀態(tài)存儲集群中父目錄的版本號及更新時間;
[0039]步驟C2:根據(jù)父目錄的版本號是否更新且更新時間小于心跳時間,判斷是否有新的可執(zhí)行程序需要執(zhí)行或原可執(zhí)行程序需要更新,如果有則執(zhí)行步驟C3 ;否則等待心跳時間,返回步驟Cl ;
[0040]步驟C3:所述工作節(jié)點根據(jù)父目錄中存儲的分片信息,將子目錄中存儲的分片文件拼接讀取到工作節(jié)點的本地目錄。
[0041]采用上述進一步方案的有益效果是:采用心跳檢查狀態(tài)存儲集群中父目錄的版本號及更新時間,當父目錄的版本號更新且更新時間小于心跳時間時,將該父目錄相應(yīng)子目錄中的文件讀取到工作節(jié)點,實現(xiàn)業(yè)務(wù)程序隨時更新;而程序更新也支持簡單的替換操作,無需重新提交整個Job,不僅效率大大提高,且流處理業(yè)務(wù)連續(xù)運行得到保持。
[0042]進一步,客戶端向狀態(tài)存儲集群上傳分片文件前,要對父目錄加寫鎖,上傳完畢,解除對父目錄的寫鎖;工作節(jié)點從狀態(tài)存儲集群下載可執(zhí)行程序前,要對父目錄加讀鎖,下載完畢后,解除對父目錄的讀鎖。
[0043]進一步,對父目錄加讀、寫鎖的具體實現(xiàn)為:
[0044]想獲得鎖的進程在父目錄下創(chuàng)建臨時節(jié)點,讀鎖的臨時節(jié)點前綴設(shè)置為read+編號,寫鎖的前綴設(shè)置為write+編號;
[0045]創(chuàng)建讀鎖的時候,檢查是否有編號小于自己的寫鎖存在,若存在則對編號剛好小于自己的寫鎖節(jié)點進行監(jiān)聽,直到監(jiān)聽的寫鎖被撤銷,便可獲得讀鎖;
[0046]創(chuàng)建寫鎖時,檢查創(chuàng)建的臨時節(jié)點編號是否為最小,如不是最小,則需要對編號剛好小于自己的讀鎖或?qū)戞i進行監(jiān)聽,直到監(jiān)聽的鎖被撤銷,便可獲得寫鎖;
[0047]撤銷讀鎖或?qū)戞i只需刪除臨時節(jié)點。
[0048]采用上述進一步方案的有益效果是:分布式讀寫鎖服務(wù),采用分別建立父目錄的讀臨時節(jié)點與寫臨時節(jié)點,并監(jiān)聽前序節(jié)點動作的方式,實現(xiàn)讀鎖與寫鎖,相比于狀態(tài)存儲集群中提供的互斥鎖方法效率更高,安全性更好。
[0049]本發(fā)明解決上述技術(shù)問題的另一技術(shù)方案如下:一種自動分發(fā)、運行和更新可執(zhí)行程序的系統(tǒng),包括客戶端、狀態(tài)存儲集群和若干個工作節(jié)點;
[0050]所述客戶端,其用于將可執(zhí)行程序及相關(guān)文件所在目錄打包成一個文件,存儲在緩存中;并采用大文件分割及索引存儲方法將緩存中的打包文件存儲到狀態(tài)存儲集群;
[0051]所述狀態(tài)存儲集群,其用于以索引方式存儲客戶端上傳的文件,還用于保存其客戶端和各工作節(jié)點的工作狀態(tài)及心跳信息;
[0052]所述工作節(jié)點,其用于每隔心跳時間到狀態(tài)存儲集群檢測索引狀態(tài),當檢測到有新的索引或已有索引有更新,按照索引方式將可執(zhí)行程序下載到本地目錄,下載完成時,啟動工作進程執(zhí)行可執(zhí)行程序。
[0053]本發(fā)明的有益效果是:
[0054]1.業(yè)務(wù)邏輯實現(xiàn)靈活
[0055]本發(fā)明采用傳統(tǒng)函數(shù)式編程模型接口與可執(zhí)行程序編程接口相結(jié)合的方式,使實時云平臺對于業(yè)務(wù)的局限性大大降低,業(yè)務(wù)邏輯的實現(xiàn)方式更加靈活。使用戶只需關(guān)心業(yè)務(wù)邏輯層面,使平臺更加透明化。
[0056]2.分布式讀寫鎖服務(wù)
[0057]本發(fā)明采用分別建立服目錄的讀臨時節(jié)點與寫臨時節(jié)點,并監(jiān)聽前序節(jié)點動作的方式,實現(xiàn)讀鎖與寫鎖,相比于Zook^per中提供的互斥鎖方法效率更高,安全性更好。
[0058]3.大文件存儲服務(wù)
[0059]本發(fā)明實現(xiàn)了索引一一分割存儲大文件的方法,解決了 Zookeeper中存儲大文件超時、同步困難甚至導(dǎo)致Zookeeper崩潰的問題。
[0060]4.業(yè)務(wù)程序運行時更新
[0061]本發(fā)明采用心跳檢查程序更新時間、版本號、MD5值等策略,實現(xiàn)業(yè)務(wù)程序隨時更新隨時自動運行功能;而程序更新也支持簡單的替換操作,無需重新提交整個Job,不僅效率大大提高,且流處理業(yè)務(wù)連續(xù)運行得到保持。
[0062]在上述技術(shù)方案的基 礎(chǔ)上,本發(fā)明還可以做如下改進。
[0063]進一步,所述工作節(jié)點執(zhí)行單元還用于每隔心跳時間檢測本地目錄中正在執(zhí)行的可執(zhí)行程序是否有更新,如果有則終止執(zhí)行現(xiàn)有的可執(zhí)行程序,重新執(zhí)行更新的可執(zhí)行程序。
[0064]進一步,所述工作節(jié)點中包括監(jiān)聽單元和執(zhí)行單元;
[0065]所述監(jiān)聽單元,其用于監(jiān)聽狀態(tài)存儲集群中是否有新上傳的可執(zhí)行程序,等到上傳完成時,將可執(zhí)行程序下載到本地程序目錄;
[0066]所述執(zhí)行單元,其用于每隔心跳時間檢查本地目錄中的可執(zhí)行程序是否下載完成,等到可執(zhí)行程序下載完成,則執(zhí)行可執(zhí)行程序;其還用于每隔心跳時間檢查本地目錄中正在執(zhí)行的可執(zhí)行程序的MD5值是否發(fā)生變化,如果發(fā)生變化則表面可執(zhí)行程序有更新,終止執(zhí)行現(xiàn)有的可執(zhí)行程序,啟動新線程執(zhí)行更新的可執(zhí)行程序。
[0067]進一步,所述狀態(tài)存儲集群中包括若干個狀態(tài)存儲節(jié)點,且狀態(tài)存儲集群中部署有zookeeper開源軟件。
【專利附圖】

【附圖說明】
[0068]圖1為本發(fā)明所述一種自動分發(fā)、運行和更新可執(zhí)行程序的系統(tǒng)結(jié)構(gòu)圖;
[0069]圖2為本發(fā)明所述一種自動分發(fā)、運行和更新可執(zhí)行程序的方法流程圖;
[0070]圖3為本發(fā)明所述客戶端的工作流程圖;
[0071]圖4為本發(fā)明所述工作節(jié)點中監(jiān)聽單元工作流程圖;
[0072]圖5為本發(fā)明所述工作節(jié)點中執(zhí)行單元的工作流程圖。
[0073]附圖中,各標號所代表的部件列表如下:
[0074]1、客戶端,2、狀態(tài)存儲集群,3、工作節(jié)點?!揪唧w實施方式】
[0075]以下結(jié)合附圖對本發(fā)明的原理和特征進行描述,所舉實例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
[0076]數(shù)據(jù)源Spring:—個Spring是一個流數(shù)據(jù)接收單元程序,它從外部數(shù)據(jù)源讀取流數(shù)據(jù)并且把它們發(fā)射到Job中
[0077]Processer:一個Processer是一個流數(shù)據(jù)處理單元程序,它接收Spring或者其他Processer發(fā)射的一個或者多個Streams,輸出零個或者多個Streams
[0078]Job: —個流處理的應(yīng)用封裝為一個Job。一個Job是一個由數(shù)據(jù)源Spring和Processor通過流分組形成的有向無環(huán)圖,Job是一次流處理計算工作的總稱,包括指定業(yè)務(wù)程序和申請資源(機器數(shù)、工作進程數(shù)、業(yè)務(wù)程序執(zhí)行的并行度)等信息而提交job的過程,不僅包括將上述內(nèi)容提交到zookeeper中,還包括任務(wù)調(diào)度的計算,即計算某worker執(zhí)行哪個程序,這個程序執(zhí)行結(jié)果發(fā)送到哪個下游的程序中而當可執(zhí)行程序更新時,只需要簡單的提交新的可執(zhí)行程序目錄,或者在工作節(jié)點直接覆蓋舊的程序,無需kill掉Job、回收計算資源并重新提交Job。
[0079]Client:客戶端程序。主要負責(zé)向系統(tǒng)提交客戶指令,例如,提交Job、刪除Job、申請工作節(jié)點等指令。
[0080]Zookeeper:是Google的Chubby的開源實現(xiàn),針對大型分布式系統(tǒng)的可靠協(xié)調(diào)系統(tǒng),提供的功能包括:配置維護、名字服務(wù)、分布式同步、組服務(wù)等。在本系統(tǒng)中作為高可用性狀態(tài)存儲模塊使用,保存其他各模塊的工作狀態(tài)及心跳信息。
[0081]Supervisor:工作節(jié)點運行的后臺程序。主要負責(zé)監(jiān)聽分配給工作節(jié)點的工作進程,根據(jù)需要啟動/關(guān)閉工作進程,并監(jiān)聽zookeeper上存儲可執(zhí)行程序的節(jié)點是否有新的可執(zhí)行程序或更新已存在的可執(zhí)行程序,如果有則下載到本地程序目錄。
[0082]Worker:執(zhí)行Job的工作進程。一個工作進程屬于一個指定的Job,可以在Job中的每個組件(Spring或者Processor)上運行多個Task,負責(zé)執(zhí)行本體程序目錄中的可執(zhí)行程序。
[0083]Task:由一個工作進程(Worker)產(chǎn)生的一個線程,執(zhí)行數(shù)據(jù)處理的程序。
[0084]Scheduler:(客戶端中的任務(wù)分配模塊)當Worker足夠時,所有Task被均勻的分配到所有機器的Worker ;當Worker不足時,所有的Task分配到僅有的Worker。
[0085]Heartbeat心跳信息:各模塊定期向Zookeeper發(fā)送心跳信息,其中包括當前時間各模塊的工作狀態(tài)信息。Master讀取Zookeeper中的心跳信息判斷各模塊、各節(jié)點運行狀態(tài),并執(zhí)行相應(yīng)動作。
[0086]如圖1所示,一種自動分發(fā)、運行和更新可執(zhí)行程序的系統(tǒng),包括客戶端1、狀態(tài)存儲集群2和若干個工作節(jié)點3 ;
[0087]所述客戶端I,其用于將可執(zhí)行程序及相關(guān)文件所在目錄打包成一個文件,存儲在緩存中;并采用大文件分割及索引存儲方法將緩存中的打包文件存儲到狀態(tài)存儲集群2的相應(yīng)目錄中;
[0088]所述狀態(tài)存儲集群2,其用于以索引方式存儲客戶端上傳的文件,還用于保存其客戶端和各工作節(jié)點的工作狀態(tài)及心跳信息;[0089]所述工作節(jié)點3,其用于每隔心跳時間到狀態(tài)存儲集群與其相關(guān)的目錄中檢測索引狀態(tài),當檢測到有新的索引或已有索引有更新,按照索引方式將可執(zhí)行程序下載到本地目錄,下載完成時,執(zhí)行可執(zhí)行程序。
[0090]其中,所述工作節(jié)點3中的工作節(jié)點執(zhí)行單元還用于每隔心跳時間檢測本地目錄中正在執(zhí)行的可執(zhí)行程序是否有更新,如果有則終止執(zhí)行現(xiàn)有的可執(zhí)行程序,重新執(zhí)行更新的可執(zhí)行程序。
[0091]其中,所述工作節(jié)點中包括監(jiān)聽單元和執(zhí)行單元;
[0092]所述監(jiān)聽單元,其用于監(jiān)聽狀態(tài)存儲集群中是否有客戶端新上傳的可執(zhí)行程序,等到上傳完成時,將可執(zhí)行程序下載到本地程序目錄;
[0093]所述執(zhí)行單元,其用于每隔心跳時間檢查本地目錄中的可執(zhí)行程序是否下載完成,等到可執(zhí)行程序下載完成,則執(zhí)行可執(zhí)行程序;其還用于每隔心跳時間檢查本地目錄中正在執(zhí)行的可執(zhí)行程序的MD5值是否發(fā)生變化,如果發(fā)生變化則表面可執(zhí)行程序有更新,終止執(zhí)行現(xiàn)有的可執(zhí)行程序,啟動新線程執(zhí)行更新的可執(zhí)行程序。
[0094]其中,所述狀態(tài)存儲集群的狀態(tài)存儲功能采用Zookeeper實現(xiàn)。
[0095]如圖2所示,一種自動分發(fā)、運行和更新可執(zhí)行程序的方法,包括如下步驟:
[0096]步驟A:客戶端將可執(zhí)行程序及相關(guān)文件所在目錄打包成一個文件,并存儲在緩存中;
[0097]步驟B:客戶端采用大文件分割及索引存儲方法將緩存中的打包文件存儲到狀態(tài)存儲集群的相應(yīng)目錄中;
[0098]步驟C:工作節(jié)點每隔心跳時間到狀態(tài)存儲集群中與其相關(guān)的目錄檢測索引狀態(tài),當檢測到有新的索引或已有索引有更新,按照索引方式將可執(zhí)行程序下載到本地目錄;
[0099]步驟D:工作節(jié)點每個心跳時間到狀態(tài)存儲集群中與其相關(guān)的目錄獲取包括程序名、程序地址的程序相關(guān)信息;
[0100]步驟E:工作節(jié)點根據(jù)程序相關(guān)信息,每隔心跳時間到本地目錄檢測可執(zhí)行程序的下載狀態(tài),直到檢測到可執(zhí)行程序下載完成時,啟動工作進程執(zhí)行可執(zhí)行程序。
[0101]上述技術(shù)方案還包括:
[0102]步驟F:工作節(jié)點執(zhí)行單元每隔心跳時間檢查本地目錄中正在執(zhí)行的可執(zhí)行程序;
[0103]步驟G:計算可執(zhí)行程序的MD5值,當發(fā)現(xiàn)可執(zhí)行程序的MD5值發(fā)生變化時則終止對原可執(zhí)行程序的執(zhí)行,啟動新線程執(zhí)行更新的可執(zhí)行程序。
[0104]如圖3所示,所述步驟B中客戶端采用大文件分割及索引存儲方法將緩存中的打包文件存儲到狀態(tài)存儲集群的具體實現(xiàn)為:
[0105]步驟B1:判斷狀態(tài)存儲集群中是否存在與打包文件相對應(yīng)的父目錄,如果存在,執(zhí)行步驟B2 ;如果不存在,則新建父目錄,執(zhí)行步驟B2 ;
[0106]步驟B2:將打包件分割成若干個分片文件;
[0107]步驟B3:在狀態(tài)存儲集群中的父目錄中存儲包括分片文件數(shù)目、每片分片文件的大小、末尾分片文件大小在內(nèi)的分片信息;
[0108]步驟B4:根據(jù)父目錄中存儲的分片信息創(chuàng)建相應(yīng)數(shù)量的子目錄;[0109]步驟B5:將各分片文件存入相應(yīng)的子目錄中。
[0110]如圖4所示,所述步驟C中工作節(jié)點從狀態(tài)存儲集群下載可執(zhí)行程序的具體實現(xiàn)為(該過程是工作節(jié)點中的監(jiān)聽單元實現(xiàn)的):
[0111]步驟Cl:工作節(jié)點每隔心跳時間檢查狀態(tài)存儲集群中父目錄的版本號及更新時間; [0112]步驟C2:根據(jù)父目錄的版本號是否更新且更新時間小于心跳時間,判斷是否有新的可執(zhí)行程序需要執(zhí)行或原可執(zhí)行程序需要更新,如果有則執(zhí)行步驟C3 ;否則等待心跳時間,返回步驟Cl ;
[0113]步驟C3:所述工作節(jié)點根據(jù)父目錄中存儲的分片信息,將子目錄中存儲的分片文件拼接讀取到工作節(jié)點的本地目錄。
[0114]其中,客戶端向狀態(tài)存儲集群上傳分片文件前,要對父目錄加寫鎖,上傳完畢,解除對父目錄的寫鎖;工作節(jié)點從狀態(tài)存儲集群下載可執(zhí)行程序前,要對父目錄加讀鎖,下載完畢后,解除對父目錄的讀鎖。
[0115]對父目錄加讀、寫鎖的具體實現(xiàn)為:想獲得鎖的進程在父目錄下創(chuàng)建臨時節(jié)點,讀鎖的臨時節(jié)點前綴設(shè)置為read+編號,寫鎖的前綴設(shè)置為write+編號;創(chuàng)建讀鎖的時候,檢查是否有編號小于自己的寫鎖存在,若存在則對編號剛好小于自己的寫鎖節(jié)點進行監(jiān)聽,直到監(jiān)聽的寫鎖被撤銷,便可獲得讀鎖;創(chuàng)建寫鎖時,檢查創(chuàng)建的臨時節(jié)點編號是否為最小,如不是最小,則需要對編號剛好小于自己的讀鎖或?qū)戞i進行監(jiān)聽,直到監(jiān)聽的鎖被撤銷,便可獲得寫鎖;撤銷讀鎖或?qū)戞i只需刪除臨時節(jié)點。
[0116]如圖5所示,工作節(jié)點中執(zhí)行單元的工作流程如下:
[0117]步驟Dl:執(zhí)行單元定期從狀態(tài)存儲集群獲取Task信息(包括程序名、程序地址、并行度和下級流水等信息);
[0118]步驟D2:查看Task信息狀態(tài),存在三種情況,情況一,有新可執(zhí)行程序,執(zhí)行步驟D3,有正在執(zhí)行的可執(zhí)行程序,執(zhí)行步驟D4,無新可執(zhí)行程序也無正在執(zhí)行的可執(zhí)行程序,執(zhí)行D5 ;
[0119]D3:則檢查本地目錄,判斷可執(zhí)行程序是否下載完成,如果下載完成則執(zhí)行可執(zhí)行程序;否則等待,直至下載完成,執(zhí)行可執(zhí)行程序;
[0120]D4:檢查正在執(zhí)行的程序的MD5值,判斷MD5值是否發(fā)生改變,如果改變,退出當前任務(wù)線程,啟動新任務(wù)線程執(zhí)行新可執(zhí)行程序;如果未改變則等待心跳時間,返回步驟Dl ;
[0121]D5:等待心跳時間,返回步驟D1。
[0122]本實施例中,使用三臺服務(wù)器作為狀態(tài)存儲集群(通過Zookeeper實現(xiàn)),負責(zé)全局狀態(tài)存儲并負責(zé)與其他模塊通信;使用五臺服務(wù)器作為工作節(jié)點,其中監(jiān)聽單元(Supervisor),負責(zé)監(jiān)控及控制執(zhí)行單元(Worker)的進程工作;使用一臺服務(wù)器作為客戶端(Client),負責(zé)向集群發(fā)布命令、提交Job及可執(zhí)行程序等;并使用千兆網(wǎng)卡與交換機提供集群網(wǎng)絡(luò)通信。
[0123]本發(fā)明通過客戶端(Client)配置Job信息,使得五臺工作節(jié)點中每個執(zhí)行單元(Worker)進程中運行一個Task線程,Task線程中的程序為簡單的控制臺循環(huán)輸出“helloworld! ”,觀察每個節(jié)點程序運行情況,驗證可執(zhí)行程序自動分發(fā)方法,具體運行流程如下:[0124](一)自動分發(fā)、運行可執(zhí)行程序
[0125]1.用戶通過客戶端(Client)配置Job信息,其中包括所需計算資源數(shù)目(Worker數(shù))、程序執(zhí)行并行度、程序間邏輯拓撲、程序所在目錄等,并通過接口命令提交。
[0126]2.客戶端(Client)分析Job信息,得到Worker、Task、程序等所在狀態(tài)存儲集群(Zookeeper)中的地址,將結(jié)果對應(yīng)上傳到狀態(tài)存儲集群(Zookeeper)中。
[0127]由于可執(zhí)行程序及其相關(guān)文件可能較大,狀態(tài)存儲集群(Zookwper)中單個父目錄無法滿足存儲要求,因此需將可執(zhí)行程序及其相關(guān)文件分片存儲。首先,建立父目錄;然后,父目錄加寫鎖,并將大文件分片的索引信息存入父目錄;最后,將分片內(nèi)容存儲到子目錄中,接觸父目錄的寫鎖。[0128]3.工作節(jié)點的監(jiān)聽單元(Supervisor)將狀態(tài)存儲集群(Zookeeper)中的可執(zhí)行程序下載到本地,具體為:
[0129]監(jiān)聽單元(Supervisor)定時檢查狀態(tài)存儲集群(Zookeeper)中父目錄,發(fā)現(xiàn)程序上傳成功后,將程序下載到本地。
[0130]下載時,先給父目錄加讀鎖,再根據(jù)父目錄中索引信息將子目錄中數(shù)據(jù)拼接完整,存儲到本地目錄中,接觸父目錄的讀鎖。
[0131]4.工作節(jié)點的執(zhí)行單元(Worker)執(zhí)行下載到本地的程序,具體為:
[0132]執(zhí)行單元(Worker)首先接收到Task執(zhí)行信息,檢查本地程序目錄,如此時程序還沒有下載完成,則等待心跳時間后循環(huán)檢查,直到程序下載完成,啟動Task線程執(zhí)行下載的可執(zhí)行程序。
[0133](二)自動更新可執(zhí)行程序
[0134]1.將可執(zhí)行程序改為循環(huán)輸出“HELLO WORLD! ”,并不對Job做修改,只是將更新過的程序和程序目錄打包上傳到狀態(tài)存儲集群(Zookeeper)中(上傳方法與提交Job時相同),通過客戶端(Client)接口替換狀態(tài)存儲集群(Zookeeper)中的原程序,或直接復(fù)制替換某臺工作節(jié)點中下載的本地程序,觀察各工作節(jié)點輸出變化,驗證程序運行時更新及更新無需重新提交Job的方法。
[0135]2.監(jiān)聽單元(Supervisor)自動下載更新的程序,監(jiān)聽單元(Supervisor)定期檢查狀態(tài)存儲集群(Zookeeper)中父目錄,當發(fā)現(xiàn)父目錄版本號及更新時間發(fā)生改變時,刪除本地原始程序,更新為新版本程序(下載方法與第一次下載時相同)。
[0136]3.執(zhí)行單元(Worker)自動執(zhí)行更新的程序,執(zhí)行單元(Worker)循環(huán)檢查本地目錄可執(zhí)行程序,通過檢查程序MD5值的變化,發(fā)現(xiàn)監(jiān)聽單元(Supervisor)下載的更新的程序,原Task線程退出,并啟動新Task線程執(zhí)行更新的程序。
[0137]4.也可手動替換本地目錄中可執(zhí)行程序,通過手動復(fù)制替換的方法,將某臺工作節(jié)點的本地目錄中的可執(zhí)行程序更新為新的可執(zhí)行程序。
[0138]執(zhí)行單元(Worker)自動執(zhí)行手動更新的程序,執(zhí)行單元(Worker)循環(huán)檢查本地目錄可執(zhí)行程序,通過檢查程序MD5值變化,發(fā)現(xiàn)監(jiān)聽單元(Supervisor)下載的更新的程序,原Task線程退出,并啟動新Task線程執(zhí)行更新的程序。
[0139]運行結(jié)果如下:
[0140]第一次客戶端提交Job后,各Supervisor控制臺打印“hello world!”,響應(yīng)時間為1.75秒;[0141]第二次客戶端更新可執(zhí)行程序后,各Supervisor控制臺打印“HELLO WORLD! ”,響應(yīng)時間為1.33秒;
[0142]第三次手動更新某Supervisor可執(zhí)行程序后,其控制臺打印“HELLO WORLD!”,響應(yīng)時間為0.76秒,其他Supervisor運行情況不變。
[0143]以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
【權(quán)利要求】
1.一種自動分發(fā)、運行和更新可執(zhí)行程序的方法,其特征在于,包括如下步驟: 步驟A:客戶端將可執(zhí)行程序及相關(guān)文件所在目錄打包成一個文件,并存儲在緩存中;步驟B:客戶端采用大文件分割及索引存儲方法將緩存中的打包文件存儲到狀態(tài)存儲集群的相應(yīng)目錄中; 步驟C:工作節(jié)點每隔心跳時間到狀態(tài)存儲集群中與其相關(guān)的目錄檢測索引狀態(tài),當檢測到有新的索引或已有索引有更新,按照索引方式將可執(zhí)行程序下載到本地目錄; 步驟D:工作節(jié)點每隔心跳時間到狀態(tài)存儲集群中與其相關(guān)的目錄獲取包括程序名、程序地址的程序相關(guān)信息; 步驟E:工作節(jié)點根據(jù)程序相關(guān)信息,每隔心跳時間到本地目錄檢測可執(zhí)行程序的下載狀態(tài),直到檢測到可執(zhí)行程序下載完成時,啟動工作進程執(zhí)行可執(zhí)行程序。
2.根據(jù)權(quán)利要求1所述一種自動分發(fā)、運行和更新可執(zhí)行程序的方法,其特征在于,上述技術(shù)方案還包括: 步驟F:工作節(jié)點執(zhí)行單元每隔心跳時間檢查本地目錄中正在執(zhí)行的可執(zhí)行程序;步驟G:計算可執(zhí)行程序的MD5值,當發(fā)現(xiàn)可執(zhí)行程序的MD5值發(fā)生變化時則終止對原可執(zhí)行程序的執(zhí)行,重新執(zhí)行更新的可執(zhí)行程序。
3.根據(jù)權(quán)利要求1所述一種自動分發(fā)、運行和更新可執(zhí)行程序的方法,其特征在于,所述步驟B中客戶端采用大文件分割及索引存儲方法將緩存中的打包文件存儲到狀態(tài)存儲集群的相應(yīng)目錄中的具體實現(xiàn)為: 步驟B1:判斷狀態(tài)存儲集群中是否存在與打包文件相對應(yīng)的父目錄,如果存在,執(zhí)行步驟B2 ;如果不存在,則新.建父目錄,執(zhí)行步驟B2 ; 步驟B2:將打包文件分割成若干個分片文件; 步驟B3:在狀態(tài)存儲集群中的父目錄中存儲包括分片文件數(shù)目、每片分片文件的大小、末尾分片文件大小在內(nèi)的分片信息; 步驟B4:根據(jù)父目錄中存儲的分片信息創(chuàng)建相應(yīng)數(shù)量的子目錄; 步驟B5:將各分片文件存入相應(yīng)的子目錄中。
4.根據(jù)權(quán)利要求3所述一種自動分發(fā)、運行和更新可執(zhí)行程序的方法,其特征在于,所述步驟C中工作節(jié)點從狀態(tài)存儲集群下載可執(zhí)行程序的具體實現(xiàn)為: 步驟Cl:工作節(jié)點每隔心跳時間檢查狀態(tài)存儲集群中與其相關(guān)的父目錄的版本號及更新時間; 步驟C2:根據(jù)父目錄的版本號是否更新且更新時間小于心跳時間,判斷是否有新的可執(zhí)行程序需要執(zhí)行或原可執(zhí)行程序需要更新,如果有則執(zhí)行步驟C3 ;否則等待心跳時間,返回步驟Cl ; 步驟C3:所述工作節(jié)點根據(jù)父目錄中存儲的分片信息,將子目錄中存儲的分片文件拼接讀取到工作節(jié)點的本地目錄。
5.根據(jù)權(quán)利要求4所述一種自動分發(fā)、運行和更新可執(zhí)行程序的方法,其特征在于,客戶端向狀態(tài)存儲集群上傳分片文件前,要對父目錄加寫鎖,上傳完畢,解除對父目錄的寫鎖;工作節(jié)點從狀態(tài)存儲集群下載可執(zhí)行程序前,要對父目錄加讀鎖,下載完畢后,解除對父目錄的讀鎖。
6.根據(jù)權(quán)利要求5所述一種自動分發(fā)、運行和更新可執(zhí)行程序的方法,其特征在于,對父目錄加讀、寫鎖的具體實現(xiàn)為: 想獲得鎖的進程在父目錄下創(chuàng)建臨時節(jié)點,讀鎖的臨時節(jié)點前綴設(shè)置為read+編號,寫鎖的前綴設(shè)置為write+編號; 創(chuàng)建讀鎖的時候,檢查是否有編號小于自己的寫鎖存在,若存在則對編號剛好小于自己的寫鎖節(jié)點進行監(jiān)聽,直到監(jiān)聽的寫鎖被撤銷,便可獲得讀鎖; 創(chuàng)建寫鎖時,檢查創(chuàng)建的臨時節(jié)點編號是否為最小,如不是最小,則需要對編號剛好小于自己的讀鎖或?qū)戞i進行監(jiān)聽,直到監(jiān)聽的鎖被撤銷,便可獲得寫鎖; 撤銷讀鎖或?qū)戞i只需刪除臨時節(jié)點。
7.一種自動分發(fā)、運行和更新可執(zhí)行程序的系統(tǒng),其特征在于,包括客戶端、狀態(tài)存儲集群和若干個工作節(jié)點; 所述客戶端,其用于將可執(zhí)行程序及相關(guān)文件所在目錄打包成一個文件,存儲在緩存中;并采用大文件分割及索引存儲方法將緩存中的打包文件存儲到狀態(tài)存儲集群的相應(yīng)目錄中; 所述狀態(tài)存儲集群,其用于以索引方式存儲客戶端上傳的文件,還用于保存其客戶端和各工作節(jié)點的工作狀態(tài)及心跳信息; 所述工作節(jié)點,其用于每隔心跳時間到狀態(tài)存儲集群檢測索引狀態(tài),當檢測到有新的索引或已有索引有更新,按照索引方式將可執(zhí)行程序下載到本地目錄,下載完成時,啟動工作進程執(zhí)行可執(zhí)行程序。
8.根據(jù)權(quán)利要求7所述一種自動分發(fā)、運行和更新可執(zhí)行程序的系統(tǒng),其特征在于,所述工作節(jié)點執(zhí)行單元用于每隔心跳時間檢測本地目錄中正在執(zhí)行的可執(zhí)行程序是否有更新,如果有則終止執(zhí)行現(xiàn)有的可執(zhí)行程序,重新執(zhí)行更新的可執(zhí)行程序。
9.根據(jù)權(quán)利要求7所述一種自動分發(fā)、運行和更新可執(zhí)行程序的系統(tǒng),其特征在于,所述工作節(jié)點中包括監(jiān)聽單元和執(zhí)行單元; 所述監(jiān)聽單元,其用于監(jiān)聽狀態(tài)存儲集群中是否有新上傳的可執(zhí)行程序,等到上傳完成時,將可執(zhí)行程序下載到本地程序目錄; 所述執(zhí)行單元,其用于每隔心跳時間檢查本地目錄中的可執(zhí)行程序是否下載完成,等到可執(zhí)行程序下載完成,則執(zhí)行可執(zhí)行程序;其還用于每隔心跳時間檢查本地目錄中正在執(zhí)行的可執(zhí)行程序的MD5值是否發(fā)生變化,如果發(fā)生變化則表面可執(zhí)行程序有更新,終止執(zhí)行現(xiàn)有的可執(zhí)行程序,啟動新線程執(zhí)行更新的可執(zhí)行程序。
10.根據(jù)權(quán)利要求7所述一種自動分發(fā)、運行和更新可執(zhí)行程序的系統(tǒng),其特征在于,所述狀態(tài)存儲集群中包括若干個狀態(tài)存儲節(jié)點,且狀態(tài)存儲集群中部署有zookeeper開源軟件。
【文檔編號】G06F9/445GK103473287SQ201310385972
【公開日】2013年12月25日 申請日期:2013年8月30日 優(yōu)先權(quán)日:2013年8月30日
【發(fā)明者】張闖, 李釗, 徐克付, 張鵬 申請人:中國科學(xué)院信息工程研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1