所示的數(shù)量流頂點(diǎn)406具有數(shù)據(jù)并行實現(xiàn),其意味著發(fā)送給算子的每個差異可根據(jù)其記錄的一些功能(稱為關(guān)鍵功能)來劃分。如上所述,在一些實施例中,協(xié)調(diào)時鐘可管理計算,其中數(shù)據(jù)流圖形可以是不是功能的數(shù)據(jù)并行的意義上的“算子”的合成的頂點(diǎn)。每個算子輸入可使用不同關(guān)鍵函數(shù)。為實現(xiàn)并行,系統(tǒng)將每個頂點(diǎn)406的計算狀態(tài)劃分成多個不聯(lián)結(jié)的碎片408 (I) -408 (N),其中數(shù)量是群集中工作器404的總的數(shù)量,并且每個工作器負(fù)責(zé)圖形中每個頂點(diǎn)的一個碎片。作為結(jié)果,每個頂點(diǎn)406跨整個群集被劃分。同一碎片408用同一關(guān)鍵處理到頂點(diǎn)406的輸入,且算子可獨(dú)立處理映射到不同關(guān)鍵的記錄。每個工作器404包含本地調(diào)度器410,其一次獨(dú)立調(diào)度一個頂點(diǎn)碎片,基于資源管理策略決定調(diào)度哪一個(如果有)。
[0050]當(dāng)碎片408產(chǎn)生新差異時,該差異可能需要被轉(zhuǎn)移到不同工作器404。單向信道412實現(xiàn)該數(shù)據(jù)流邊。單向信道412可選地排序并連接全部工作器對404。數(shù)據(jù)交換通過發(fā)送方碎片將目標(biāo)關(guān)鍵函數(shù)應(yīng)用到每個輸出記錄并選擇去往接收方碎片的合適信道來獲得。兩個不同處理中的工作器之間的信道被復(fù)用到諸如TCP連接,且用于針對循環(huán)數(shù)據(jù)流的基于可到達(dá)性的協(xié)調(diào)的技術(shù)自動生成序列化代碼用于套接通信。進(jìn)程內(nèi)信道使用鍵入的存儲器內(nèi)緩沖,且不必要將差異進(jìn)行串行化。無狀態(tài)算子的鏈被融合到函數(shù)調(diào)用的流水線中。
[0051]本地協(xié)調(diào)時鐘414 (I)-414 (N)通知每個工作器的調(diào)度和資源管理決策。每個處理具有一個協(xié)調(diào)時鐘并將協(xié)調(diào)時鐘協(xié)議復(fù)用到用于數(shù)據(jù)交換的相同套接。在替換實施例中,每個工作器具有一個協(xié)調(diào)時鐘或整個群集共享單個協(xié)調(diào)時鐘。在這些替代實施例中,更新協(xié)議保持相同,且不同通信機(jī)制被用來向工作器散布結(jié)果。
[0052]程序以三階段運(yùn)行:首先,工作器404之間的通信信道412例如被庫代碼建立;其次,數(shù)據(jù)流圖形,諸如圖3所示的一個,被例如通過執(zhí)行對圖2中所示的Main功能中的的ConnectedComponents函數(shù)的調(diào)用來構(gòu)建;并接著,數(shù)據(jù)被呈現(xiàn)給輸入圖形節(jié)點(diǎn)。系統(tǒng)用對應(yīng)輸出數(shù)據(jù)來異步觸發(fā)回調(diào),且只要新數(shù)據(jù)時期被引入程序就無限地執(zhí)行,在全部的輸入已經(jīng)關(guān)閉并且待辦差異的全局組為空時才終止。至少一個實現(xiàn)使用“單程序多數(shù)據(jù)”(SPMD)部署策略,其中構(gòu)建圖形的程序運(yùn)行在每個設(shè)備400上。每個工作器404可使數(shù)據(jù)進(jìn)入每個輸入頂點(diǎn)406 (時期沒有完成直到它已經(jīng)被每個工作器關(guān)閉),并且編程者以SPMD知曉方式加載數(shù)據(jù),劃分?jǐn)?shù)據(jù)進(jìn)入和跨參與過程402的結(jié)果收集。
[0053]圖5是根據(jù)各實施例,描繪針對循環(huán)數(shù)據(jù)流程序的基于可到達(dá)性的協(xié)調(diào)(其在固定點(diǎn)循環(huán)中執(zhí)行MapReduce,并在其完成時發(fā)起回調(diào))的示例的圖。循環(huán)數(shù)據(jù)流程序可運(yùn)行在單個機(jī)器上。然而,在單個機(jī)器實現(xiàn)中,性能可能受到在單個機(jī)器上的獨(dú)立處理核的數(shù)量的限制。此外,性能可能受到單個機(jī)器中的存儲器的量的限制。程序跨機(jī)器的群集的分布執(zhí)行避免了單個機(jī)器的限制。然而,歸因于中央主機(jī)處理,跨機(jī)器的群集的分布執(zhí)行引入了等待時間的問題。
[0054]系統(tǒng)將該程序500渲染成數(shù)據(jù)流圖形502,其中每個循環(huán)是一個算子,并沿邊記錄流。算子508和510的每一個作為協(xié)同例程來操作,該協(xié)同例程拉取其輸入504、執(zhí)行差分?jǐn)?shù)據(jù)流算法,并產(chǎn)生記錄作為其輸出512。在不需要采用協(xié)調(diào)時鐘的單機(jī)器實現(xiàn)中,系統(tǒng)例如通過劃分與每個算子相關(guān)聯(lián)的關(guān)鍵空間來將圖形分成碎片,并將每個碎片指定到不同處理器核。在GroupBy 510之前的數(shù)據(jù)交換使用共享存儲緩沖器來實現(xiàn)。主循環(huán)接著在鎖定步驟中通過算子508和510來進(jìn)行,如果合適就重復(fù),直到全部工作已經(jīng)完成。
[0055]為在分布式系統(tǒng)中而不是單個機(jī)器中高效使用循環(huán)數(shù)據(jù)流,用TCP套件代替共享存儲緩沖器是不夠的,因為工作器頻繁訪問全局共享狀態(tài)。例如,考慮布爾變量allDone,如果且僅如果全部工作器已經(jīng)終止才為真。隨著它們在非活動和活動狀態(tài)之間轉(zhuǎn)換,工作器將更新allDone變量,并在非活動時考慮allDone變量以確定它們是否可以終止。與諸如使用中央主機(jī)處理來同步作出決定的Haloop、Twister和Spark的其它迭代MapReduce方法相反,在此描述的系統(tǒng)避免了在每次發(fā)生工作器變得不活動時同步聯(lián)系主機(jī)的等待時間(其將限制具有很小的迭代或增量更新的程序的最大性能)。如在此描述的針對循環(huán)數(shù)據(jù)流的基于可到達(dá)性的協(xié)調(diào),通過采用線程的異步和分散式獨(dú)立調(diào)度來獲得微秒(例如,50、200,800等)的而不是在其它方法中的幾秒或幾分鐘的等待時間,來使得在分布式系統(tǒng)中高效使用差分?jǐn)?shù)據(jù)流。
[0056]為獲得低等待時間,分布式系統(tǒng)被設(shè)計為異步和分散式系統(tǒng)。每個工作器的每個線程獨(dú)立調(diào)度,且當(dāng)線程接收新數(shù)據(jù)時,這觸發(fā)在接收方的計算。為了使其可行,并獲得微秒的迭代等待時間,系統(tǒng)采用針對分布式終端的特定協(xié)議。此外,可由系統(tǒng)的全局視圖來回答幾個資源管理問題。例如,有個簡單的二進(jìn)制問題“群集中全部工作器都終止了嗎? ”。然而,為了計算聚集,工作器也可能想要知道直到時間t時它是否已經(jīng)看見它的全部輸入。此夕卜,為壓縮其歷史狀態(tài),工作器可能想要知道其狀態(tài)的子集是否有效地“凍結(jié)”,意指狀態(tài)的子集不能在任何將來的點(diǎn)改變。
[0057]因此,除了終端以外,分布式終端協(xié)議使用時間的指示。如在此描述的,時間的指示是基于上面描述的并且由協(xié)調(diào)時鐘表示的邏輯時間,其為概述要以針對循環(huán)數(shù)據(jù)流計算的基于可到達(dá)性的協(xié)調(diào)來完成的剩余工作的復(fù)制的數(shù)據(jù)結(jié)構(gòu)。協(xié)調(diào)時鐘以下參考圖6A、6B、6C和6D來描述。
[0058]說曰月件狀杰
[0059]圖6A、6B、6C和6D是根據(jù)各實施例的,示出采用協(xié)調(diào)時鐘的系統(tǒng)中的信息流狀態(tài)圖。
[0060]每個過程參考其自身的根據(jù)協(xié)調(diào)時鐘協(xié)議118創(chuàng)建的協(xié)調(diào)時鐘602來作出資源管理決策。每個過程在它們被產(chǎn)生時向記錄添加一時戳,例如使用符號(時期、迭代)使得(1,37)意味著記錄在第I時期,第37次迭代產(chǎn)生。時鐘602提供從頂點(diǎn)名稱606和時間608到待辦記錄610的記數(shù)的映射條目604。圖6呈現(xiàn)了具有三個算子A 612、B 614和C 616的程序,其中B 614和C 616在A612的輸出上進(jìn)行操作。
[0061]在圖6所示的示例中,具體而言在圖6A,算子A 612接收記錄618,其為具有版本(1,37)的串“three little pigs”(三只小豬)。在該初始狀態(tài),其中計數(shù)610被設(shè)為+1,時鐘602指示有待辦記錄用于由頂點(diǎn)606 (在此情況中頂點(diǎn)A)在時間608 (在此情況中時間(1,37))處理。
[0062]如圖613所示,給定頂點(diǎn)A 612執(zhí)行串詞例化(tokenizat1n)功能,頂點(diǎn)A 612在時間620通過以下來消費(fèi)記錄618:將串“three little pigs”詞例化為其組成的單詞,并產(chǎn)生三個記錄622、624和626,每個針對頂點(diǎn)B 614和C616。S卩,頂點(diǎn)A 612產(chǎn)生每個單詞的記錄以傳遞到頂點(diǎn)B 614和C 616用于在其上的具有相同版本628仍在該循環(huán)的迭代37中在時期I中的操作。
[0063]如圖6C所示,時鐘協(xié)議指示在頂點(diǎn)A 612的操作產(chǎn)生概述處理記錄618的效果的時鐘更新630。時鐘更新630指示現(xiàn)在有頂點(diǎn)B在(1,37)的更多的三個未處理的記錄632、頂點(diǎn)C在(1,37)的更多的三個未處理的記錄634,以及頂點(diǎn)A在(1,37)的少一個的未處理的記錄636。
[0064]如圖6D所示,系統(tǒng)將這個更新廣播到所有處理,以在638用于對它們的本地時鐘的分量級附加。因此,如針對圖6所示的處理中的時鐘602所示,在時間(1,37)對應(yīng)于頂點(diǎn)A的條目604(1)的記數(shù)610以落到零。同時在時間(1,37)對應(yīng)于頂點(diǎn)B的條目604(2)的記數(shù)610指示+3,意指三個待辦記錄對于在頂點(diǎn)B的操作可用,并且在時間(1,37)對應(yīng)于頂點(diǎn)C的條目604 (3)的記數(shù)610指示+3,意指三個待辦記錄對于在頂點(diǎn)C的操作可用。
[0065]當(dāng)計算正在運(yùn)行時,“最早”時鐘條目可能特別有用。當(dāng)針對最早的時鐘條目之一的時鐘記數(shù)610落到零時,這指示那個頂點(diǎn)的全部先前數(shù)據(jù)在那個時間被“凍結(jié)”并將不改變。例如,如果最早的條目之一對應(yīng)于一個聚集,該系統(tǒng)可標(biāo)識其全部輸入已被接收,并可產(chǎn)生正確結(jié)果。圖形結(jié)構(gòu)的這個知識允許系統(tǒng)在時鐘條目上施加因果次序,從而如果在X處理記錄可導(dǎo)致在Y的一組記錄改變,那么頂點(diǎn)一時間對X在因果次序中領(lǐng)先于頂點(diǎn)一時間對Y。該系統(tǒng)可施加因果次序,因為算子從不在它們的輸入“之前”的時間產(chǎn)生輸出,且全部的循環(huán)嚴(yán)格增加時間的最后的坐標(biāo),其表示迭代。因此,系統(tǒng)標(biāo)識何時確定的頂點(diǎn)一時間對,例如A — (1,37),已穩(wěn)定,且在處理中的頂點(diǎn)的全部時鐘計數(shù)610落到零時系統(tǒng)可安全地終止處理。換言之,系統(tǒng)使用圖形的結(jié)構(gòu)來確定因果次序,因為如果沒有時鐘條目604具有因果地在其之前的計數(shù)610,那么算子的全部的輸入已經(jīng)來到。
[0066]因果次序還允許系統(tǒng)執(zhí)行垃圾收集。由于有狀態(tài)的算子將包含在時鐘里的最早頂點(diǎn)一時間對的組之前的許多時間,并且因為存儲在那些頂點(diǎn)一時間對處的值現(xiàn)在凍結(jié),系統(tǒng)可將它們合并到單個時間。這節(jié)省了存儲器并使得可能用長期運(yùn)行的滑動窗來操作。
[0067]此外,開銷是可忽略的,因為時鐘更新可通過將與每個時間相關(guān)聯(lián)的權(quán)重求和來被批量進(jìn)行,并被承載在消息交換上。
[0068]圖7A和7B是根據(jù)各實施例的,示出采用協(xié)調(diào)時鐘602的循環(huán)系統(tǒng)中的信息流的狀態(tài)圖。為簡化,我們忽略一些在圖6中提供的注釋以突出顯示圖7中的循環(huán)操作。然而,普通技術(shù)人員可以理解發(fā)生在圖7中的類似或相同處理和更新和在圖6中發(fā)生的一樣。
[0069]圖7示出了具有連接成循環(huán)的W 702、X 704、Y 706和+708四個算子的數(shù)據(jù)流圖形。四個算子具有對應(yīng)的時鐘條目710,其類似于圖6的時鐘條目604,指示待辦工作。系統(tǒng)可使用時鐘條目710來向前看并預(yù)計算子W 702、X 704、Y 706和+708可導(dǎo)致在將來發(fā)生。具體而言,如果沒有可導(dǎo)致數(shù)據(jù)的某子集的改變的待辦工作,該系統(tǒng)可用該子集完成的知識來處理數(shù)據(jù)的那個子集。
[0070]如圖7A所示,數(shù)據(jù)通過頂點(diǎn)W702進(jìn)入該循環(huán),W702將記錄傳遞到算子X704。為了簡化,在算子X704示出時鐘條目710 (I),其是類似在類似+1的610的記數(shù)處的608的時間(1,37)。系統(tǒng)可使用圖形的結(jié)構(gòu)來指出這可能造成什么改變。如上所述,系統(tǒng)可依賴的數(shù)據(jù)流圖形的結(jié)構(gòu)有兩個主要屬性:1)這些