两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種數(shù)據(jù)廣播系統(tǒng)、數(shù)據(jù)廣播方法及設備與流程

文檔序號:11147467閱讀:719來源:國知局
一種數(shù)據(jù)廣播系統(tǒng)、數(shù)據(jù)廣播方法及設備與制造工藝

本發(fā)明涉及大數(shù)據(jù)領域,尤其涉及一種數(shù)據(jù)廣播系統(tǒng)、數(shù)據(jù)廣播方法及設備。



背景技術:

隨著大數(shù)據(jù)時代的到來,基于內(nèi)存的并行計算平臺Spark已經(jīng)廣泛成為業(yè)界處理海量數(shù)據(jù)的流行框架,與Hadoop相比,Spark更適合基于迭代的機器學習算法和圖算法,加上Spark開源社區(qū)非常活躍,基于Spark并行框架的生態(tài)圈也日益豐富,例如Spark-SQL,Spark-Streaming等。

Spark的運行模式有幾種模式:例如:local、standalone、yarn、mesos等。彈性分布式數(shù)據(jù)集(英文:Resilient Distributed Dataset,簡稱:RDD)是Spark的核心概念之一,表示只讀、可分區(qū)、容錯、可以全部或部分緩存到內(nèi)存中、在多次并行計算間重用。

當一個RDD需要操作另一個RDD的數(shù)據(jù)時,Spark支持將較小RDD廣播到每個數(shù)據(jù)節(jié)點上,優(yōu)化關聯(lián)操作;

現(xiàn)有技術中,Spark集群模式運行情況下,當廣播一個變量時,會按照數(shù)據(jù)節(jié)點上啟動任務執(zhí)行器(executor)的個數(shù)N,分發(fā)廣播變量N份到該數(shù)據(jù)節(jié)點上,導致系統(tǒng)網(wǎng)絡IO(Input/Output)和內(nèi)存資源多余占用,從而引發(fā)任務失敗。



技術實現(xiàn)要素:

本發(fā)明實施例提供了一種數(shù)據(jù)廣播系統(tǒng)、數(shù)據(jù)廣播方法及設備,能夠減少對系統(tǒng)網(wǎng)絡IO和內(nèi)存資源的占用。

第一方面,本發(fā)明實施例提供了一種數(shù)據(jù)廣播方法,該方法應用于數(shù)據(jù)廣播系統(tǒng),該數(shù)據(jù)廣播系統(tǒng)包括:控制節(jié)點和至少一個數(shù)據(jù)節(jié)點,每個數(shù)據(jù)節(jié)點上運行有至少一個任務執(zhí)行器,每個數(shù)據(jù)節(jié)點上包括堆外內(nèi)存,所述堆外內(nèi)存存儲的數(shù)據(jù)可被至少一個任務執(zhí)行器使用,該方法包括:

控制節(jié)點生成廣播數(shù)據(jù),并設置第一數(shù)據(jù)節(jié)點上的其中一個任務執(zhí)行器為主任務執(zhí)行器,第一數(shù)據(jù)節(jié)點為至少一個數(shù)據(jù)節(jié)點中的一個數(shù)據(jù)節(jié)點;主任務執(zhí)行器獲取廣播數(shù)據(jù),并將廣播數(shù)據(jù)保存至目標堆外內(nèi)存,將目標堆外內(nèi)存的地址發(fā)送至非主任務執(zhí)行器,其中,目標堆外內(nèi)存為第一數(shù)據(jù)節(jié)點上的堆外內(nèi)存,非主任務執(zhí)行器為第一數(shù)據(jù)節(jié)點上除主任務執(zhí)行器以外的其他任務執(zhí)行器;非主任務執(zhí)行器根據(jù)目標堆外內(nèi)存的地址,從目標堆外內(nèi)存中獲取廣播數(shù)據(jù)。

本發(fā)明實施例中,并不是每個數(shù)據(jù)節(jié)點上的每個任務執(zhí)行器都從控制節(jié)點獲取廣播數(shù)據(jù),而是由控制節(jié)點在每個數(shù)據(jù)節(jié)點上設置一個主任務執(zhí)行器,僅由主任務執(zhí)行器獲取廣播數(shù)據(jù),將獲取的廣播數(shù)據(jù)存儲至數(shù)據(jù)節(jié)點上的堆外內(nèi)存中,該數(shù)據(jù)節(jié)點上的其他任務執(zhí)行器從堆外內(nèi)存中獲取廣播數(shù)據(jù)。因此,在同一個數(shù)據(jù)節(jié)點上,只需要分發(fā)一份廣播數(shù)據(jù),從而能夠減少對系統(tǒng)網(wǎng)絡IO和內(nèi)存資源的占用。

結合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,該方法還包括:

控制節(jié)點在非主任務執(zhí)行器獲取廣播數(shù)據(jù)后,發(fā)送廣播數(shù)據(jù)清除消息給主任務執(zhí)行器;主任務執(zhí)行器接收控制節(jié)點發(fā)送的廣播數(shù)據(jù)清除消息后,清除目標堆外內(nèi)存中存儲的廣播數(shù)據(jù)。

可選的,非主任務執(zhí)行器在獲取廣播數(shù)據(jù)后,通知控制節(jié)點廣播數(shù)據(jù)獲取完成。

因此,控制節(jié)點能獲取各數(shù)據(jù)節(jié)點上的廣播數(shù)據(jù)的獲取情況,當數(shù)據(jù)節(jié)點上的各非主任務執(zhí)行器獲取到廣播數(shù)據(jù)后,指示主任務執(zhí)行器清除堆外內(nèi)存中存儲的廣播數(shù)據(jù),從而能夠減少對系統(tǒng)內(nèi)存資源的占用,提高內(nèi)存利用率。

結合第一方面,或第一方面的任一種實現(xiàn)方式,在第一方面的第二種可能的實現(xiàn)方式中,控制節(jié)點設置第一數(shù)據(jù)節(jié)點上的其中一個任務執(zhí)行器為主任務執(zhí)行器包括:控制節(jié)點根據(jù)第一數(shù)據(jù)節(jié)點中每個任務執(zhí)行器的負載信息設置一個任務執(zhí)行器為主任務執(zhí)行器。

如此,控制節(jié)點根據(jù)各任務執(zhí)行器的負載情況選擇主任務執(zhí)行器,例如:選擇一個負載較小的任務執(zhí)行器為主任務執(zhí)行器,從而能夠使各任務執(zhí)行器負載均衡。

結合第一方面,或第一方面的任一種實現(xiàn)方式,在第一方面的第三種可能的實現(xiàn)方式中,控制節(jié)點設置第一數(shù)據(jù)節(jié)點上的其中一個任務執(zhí)行器為主任務執(zhí)行器包括:控制節(jié)點隨機選擇一個任務執(zhí)行器,將該任務執(zhí)行器設置為主任務執(zhí)行器。

結合第一方面,或第一方面的任一種實現(xiàn)方式,在第一方面的第四種可能的實現(xiàn)方式中,該方法還包括:控制節(jié)點生成廣播優(yōu)化執(zhí)行計劃,廣播優(yōu)化執(zhí)行計劃包括主任務執(zhí)行器計劃和非主任務執(zhí)行器計劃;控制節(jié)點將廣播優(yōu)化執(zhí)行計劃發(fā)送至第一數(shù)據(jù)節(jié)點上的每個任務執(zhí)行器;主任務執(zhí)行器從廣播優(yōu)化執(zhí)行計劃中選擇主任務執(zhí)行器計劃執(zhí)行;非主任務執(zhí)行器從廣播優(yōu)化執(zhí)行計劃中選擇非主任務執(zhí)行器計劃執(zhí)行。

其中,主任務執(zhí)行器計劃包括第一方面中主任務執(zhí)行器執(zhí)行的步驟,非主任務執(zhí)行器計劃包括第一方面中非主任務執(zhí)行器執(zhí)行的步驟。

第二方面,本發(fā)明實施例提供了一種數(shù)據(jù)廣播方法,該方法應用于數(shù)據(jù)廣播系統(tǒng),數(shù)據(jù)廣播系統(tǒng)包括控制節(jié)點和至少一個數(shù)據(jù)節(jié)點,每個數(shù)據(jù)節(jié)點上運行有至少一個任務執(zhí)行器,每個數(shù)據(jù)節(jié)點上包括堆外內(nèi)存,堆外內(nèi)存存儲的數(shù)據(jù)可被至少一個任務執(zhí)行器使用,該方法包括:

第一數(shù)據(jù)節(jié)點上的主任務執(zhí)行器獲取廣播數(shù)據(jù),將廣播數(shù)據(jù)保存至目標堆外內(nèi)存,并將目標堆外內(nèi)存的地址發(fā)送至非主任務執(zhí)行器,第一數(shù)據(jù)節(jié)點上的非主任務執(zhí)行器根據(jù)目標堆外內(nèi)存的地址,從目標堆外內(nèi)存中獲取廣播數(shù)據(jù)。其中,目標堆外內(nèi)存為第一數(shù)據(jù)節(jié)點上的堆外內(nèi)存,主任務執(zhí)行器為控制節(jié)點在第一數(shù)據(jù)節(jié)點上所指定的一個任務執(zhí)行器,非主任務執(zhí)行器為第一數(shù)據(jù)節(jié)點上除主任務執(zhí)行器之外的其他任務執(zhí)行器,第一數(shù)據(jù)節(jié)點為至少一個數(shù)據(jù)節(jié)點中的一個數(shù)據(jù)節(jié)點。

本發(fā)明實施例中,每個數(shù)據(jù)節(jié)點上,只有主任務執(zhí)行器去獲取廣播數(shù)據(jù),將獲取的廣播數(shù)據(jù)存儲至數(shù)據(jù)節(jié)點上的堆外內(nèi)存中,其他任務執(zhí)行器從堆外內(nèi)存中獲取廣播數(shù)據(jù)。因此,在同一個數(shù)據(jù)節(jié)點上,只需要分發(fā)一份廣播數(shù)據(jù),從而能夠減少對系統(tǒng)網(wǎng)絡IO和內(nèi)存資源的占用。

結合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,該方法還包括:

主任務執(zhí)行器接收控制節(jié)點發(fā)送的廣播數(shù)據(jù)清除消息,之后,清除目標堆外內(nèi)存中存儲的廣播數(shù)據(jù)。從而可以及時清理內(nèi)存中緩存的數(shù)據(jù),減少對內(nèi)存的占用,提高內(nèi)存利用率。

結合第二方面,或第二方面的任一種可能的實現(xiàn)方式,在第二方面的第二種可能的實現(xiàn)方式中,該方法還包括:第一數(shù)據(jù)節(jié)點上的每個任務執(zhí)行器接收控制節(jié)點發(fā)送的廣播優(yōu)化執(zhí)行計劃,廣播優(yōu)化執(zhí)行計劃包括主任務執(zhí)行器計劃和非主任務執(zhí)行器計劃;主任務執(zhí)行器從廣播優(yōu)化執(zhí)行計劃中選擇主任務執(zhí)行器計劃執(zhí)行以執(zhí)行第二方面及第二方面的第一種可能的實現(xiàn)方式中的步驟;非主任務執(zhí)行器從廣播優(yōu)化執(zhí)行計劃中選擇非主任務執(zhí)行器計劃執(zhí)行以執(zhí)行第二方面中所描述的步驟。

第三方面,本發(fā)明實施例提供了一種數(shù)據(jù)廣播方法,該方法應用于數(shù)據(jù)廣播系統(tǒng),數(shù)據(jù)廣播系統(tǒng)包括控制節(jié)點和至少一個數(shù)據(jù)節(jié)點,每個數(shù)據(jù)節(jié)點上運行有至少一個任務執(zhí)行器,每個數(shù)據(jù)節(jié)點上包括堆外內(nèi)存,堆外內(nèi)存存儲的數(shù)據(jù)可被至少一個任務執(zhí)行器使用,該方法包括:

控制節(jié)點生成廣播數(shù)據(jù);控制節(jié)點設置第一數(shù)據(jù)節(jié)點上的多個任務執(zhí)行器中的一個任務執(zhí)行器為主任務執(zhí)行器,第一數(shù)據(jù)節(jié)點為至少一個數(shù)據(jù)節(jié)點中的一個數(shù)據(jù)節(jié)點;主任務執(zhí)行器用于獲取廣播數(shù)據(jù),并將廣播數(shù)據(jù)保存至目標堆外內(nèi)存,將目標堆外內(nèi)存的地址發(fā)送至非主任務執(zhí)行器,非任務執(zhí)行器為第一數(shù)據(jù)節(jié)點上除主任務執(zhí)行器之外的其他任務執(zhí)行器,非主任務執(zhí)行器用于根據(jù)目標堆外內(nèi)存的地址,從目標堆外內(nèi)存獲取廣播數(shù)據(jù),目標堆外內(nèi)存為第一數(shù)據(jù)節(jié)點上的堆外內(nèi)存。

本發(fā)明實施例中,是由控制節(jié)點在每個數(shù)據(jù)節(jié)點上設置一個主任務執(zhí)行器,僅由主任務執(zhí)行器獲取廣播數(shù)據(jù)。因此,在同一個數(shù)據(jù)節(jié)點上,只需要分發(fā)一份廣播數(shù)據(jù),從而能夠減少對系統(tǒng)網(wǎng)絡IO和內(nèi)存資源的占用。

結合第三方面,在第三方面的第一種可能的實現(xiàn)方式中,控制節(jié)點設置第一數(shù)據(jù)節(jié)點上的多個任務執(zhí)行器中的一個任務執(zhí)行器為主任務執(zhí)行器包括:控制節(jié)點根據(jù)第一數(shù)據(jù)節(jié)點中每個任務執(zhí)行器的負載信息設置一個任務執(zhí)行器為主任務執(zhí)行器。從而可以盡可能均衡每個任務執(zhí)行器負載。

結合第三方面,或第三方面的任一種可能的實現(xiàn)方式,在第三方面的第二種可能的實現(xiàn)方式中,該方法還包括:當非任務執(zhí)行器獲取廣播數(shù)據(jù)后,控制節(jié)點發(fā)送廣播數(shù)據(jù)清除消息給主任務執(zhí)行器,廣播數(shù)據(jù)清除消息用于使主任務執(zhí)行器清除目標堆外內(nèi)存中存儲的廣播數(shù)據(jù)。從而可以及時清理內(nèi)存中緩存的數(shù)據(jù),減少對內(nèi)存的占用,提高內(nèi)存利用率。

結合第三方面,或第三方面的任一種可能的實現(xiàn)方式,在第三方面的第三種可能的實現(xiàn)方式中,該方法還包括:控制節(jié)點生成廣播優(yōu)化執(zhí)行計劃,廣播優(yōu)化執(zhí)行計劃包括主任務執(zhí)行器計劃和非主任務執(zhí)行器計劃;將廣播優(yōu)化執(zhí)行計劃發(fā)送至第一數(shù)據(jù)節(jié)點上的每個任務執(zhí)行器,以使得第一數(shù)據(jù)節(jié)點上的每個任務執(zhí)行器根據(jù)控制節(jié)點所設置的任務執(zhí)行器類型,從主任務執(zhí)行器計劃和非主任務執(zhí)行器計劃中選擇一個進行執(zhí)行,任務執(zhí)行器類型包括主任務執(zhí)行器和非主任務執(zhí)行器。

第四方面,本發(fā)明實施例還提供了一種數(shù)據(jù)服務器,該數(shù)據(jù)服務器應用于數(shù)據(jù)廣播系統(tǒng),該數(shù)據(jù)廣播系統(tǒng)包括控制服務器和至少一個數(shù)據(jù)服務器,數(shù)據(jù)服務器包括:處理器、存儲器和IO接口;處理器上運行有多個任務執(zhí)行器,任務執(zhí)行器包括主任務執(zhí)行器和非主任務執(zhí)行器,主任務執(zhí)行器為控制服務器在第一數(shù)據(jù)服務器上所指定的一個任務執(zhí)行器,非主任務執(zhí)行器為第一數(shù)據(jù)服務器上除主任務執(zhí)行器之外的其他任務執(zhí)行器;存儲器中包括堆外內(nèi)存,堆外內(nèi)存存儲的數(shù)據(jù)可被至少一個任務執(zhí)行器使用;存儲器還用于存儲程序代碼,主任務執(zhí)行器調(diào)用存儲器中的程序代碼,以執(zhí)行以下操作:

通過IO接口獲取廣播數(shù)據(jù),將廣播數(shù)據(jù)保存至目標堆外內(nèi)存,并將目標堆外內(nèi)存的地址發(fā)送至非主任務執(zhí)行器,其中,目標堆外內(nèi)存為第一數(shù)據(jù)服務器上的堆外內(nèi)存;非主任務執(zhí)行器調(diào)用存儲器中的程序代碼,以執(zhí)行以下操作:根據(jù)目標堆外內(nèi)存的地址,從目標堆外內(nèi)存中獲取廣播數(shù)據(jù)。

結合第四方面,在第四方面的第一種可能的實現(xiàn)方式中,主任務執(zhí)行器還用于執(zhí)行以下操作:接收控制節(jié)點發(fā)送的廣播數(shù)據(jù)清除消息,再清除目標堆外內(nèi)存中存儲的廣播數(shù)據(jù)。

結合第四方面,或第四方面的任一種可能的實現(xiàn)方式,在第四方面的第二種可能的實現(xiàn)方式中,數(shù)據(jù)服務器上的每個任務執(zhí)行器,還用于接收控制節(jié)點發(fā)送的廣播優(yōu)化執(zhí)行計劃,廣播優(yōu)化執(zhí)行計劃包括主任務執(zhí)行器計劃和非主任務執(zhí)行器計劃;主任務執(zhí)行器,還用于從廣播優(yōu)化執(zhí)行計劃中選擇主任務執(zhí)行器計劃執(zhí)行;非主任務執(zhí)行器,還用于從廣播優(yōu)化執(zhí)行計劃中選擇非主任務執(zhí)行器計劃執(zhí)行。

第五方面,本發(fā)明實施例還提供了一種控制服務器,控制服務器應用于數(shù)據(jù)廣播系統(tǒng),數(shù)據(jù)廣播系統(tǒng)包括控制服務器和至少一個數(shù)據(jù)服務器;數(shù)據(jù)服務器上有多個任務執(zhí)行器;控制服務器包括:處理器、存儲器及IO接口,存儲器用于存儲程序代碼,處理器調(diào)用存儲器中的程序代碼,以執(zhí)行以下操作:

生成廣播數(shù)據(jù),設置數(shù)據(jù)服務器上的多個任務執(zhí)行器中的一個任務執(zhí)行器為主任務執(zhí)行器;主任務執(zhí)行器用于獲取廣播數(shù)據(jù),并將廣播數(shù)據(jù)保存至目標堆外內(nèi)存,將目標堆外內(nèi)存的地址發(fā)送至非主任務執(zhí)行器,非主任務執(zhí)行器用于根據(jù)目標堆外內(nèi)存的地址,從目標堆外內(nèi)存獲取廣播數(shù)據(jù),其中,非主任務執(zhí)行器為數(shù)據(jù)服務器上除主任務執(zhí)行器之外的其他任務執(zhí)行器,目標堆外內(nèi)存為數(shù)據(jù)服務器上的堆外內(nèi)存,堆外內(nèi)存存儲的數(shù)據(jù)可被多個任務執(zhí)行器使用。

結合第五方面,在第五方面的第一種可能的實現(xiàn)方式中,處理器調(diào)用存儲器中的應用程序,具體執(zhí)行:根據(jù)第一數(shù)據(jù)節(jié)點中每個任務執(zhí)行器的負載信息設置一個任務執(zhí)行器為主任務執(zhí)行器。

結合第五方面,或第五方面的任一種可能的實現(xiàn)方式,在第五方面的第二種可能的實現(xiàn)方式中,處理器還用于執(zhí)行:當非任務執(zhí)行器獲取廣播數(shù)據(jù)后,發(fā)送廣播數(shù)據(jù)清除消息給主任務執(zhí)行器,廣播數(shù)據(jù)清除消息用于使主任務執(zhí)行器清除目標堆外內(nèi)存中存儲的廣播數(shù)據(jù)。

結合第五方面,或第五方面的任一種可能的實現(xiàn)方式,在第五方面的第三種可能的實現(xiàn)方式中,處理器還用于執(zhí)行:生成廣播優(yōu)化執(zhí)行計劃,廣播優(yōu)化執(zhí)行計劃包括主任務執(zhí)行器計劃和非主任務執(zhí)行器計劃;將廣播優(yōu)化執(zhí)行計劃發(fā)送至數(shù)據(jù)服務器上的每個任務執(zhí)行器,以使得數(shù)據(jù)服務器上的每個任務執(zhí)行器根據(jù)控制服務器所設置的任務執(zhí)行器類型,從主任務執(zhí)行器計劃和非主任務執(zhí)行器計劃中選擇一個進行執(zhí)行,任務執(zhí)行器類型包括主任務執(zhí)行器和非主任務執(zhí)行器。

第六方面,本發(fā)明實施例還提供了一種數(shù)據(jù)廣播系統(tǒng),該系統(tǒng)包括第四方面提供的控制服務器和至少一個第五方面所提供的數(shù)據(jù)服務器。

第七方面,本發(fā)明實施例還提供了一種數(shù)據(jù)服務器,該數(shù)據(jù)服務器應用于數(shù)據(jù)廣播系統(tǒng),該數(shù)據(jù)廣播系統(tǒng)包括控制服務器和至少一個數(shù)據(jù)服務器,數(shù)據(jù)服務器包括多個任務執(zhí)行器,任務執(zhí)行器包括主任務執(zhí)行器和非主任務執(zhí)行器,主任務執(zhí)行器為控制服務器在第一數(shù)據(jù)服務器上所指定的一個任務執(zhí)行器,非主任務執(zhí)行器為第一數(shù)據(jù)服務器上除主任務執(zhí)行器之外的其他任務執(zhí)行器;

所述主任務執(zhí)行器包括:

廣播數(shù)據(jù)獲取單元,用于獲取廣播數(shù)據(jù);

廣播數(shù)據(jù)存儲單元,用于將廣播數(shù)據(jù)保存至目標堆外內(nèi)存,其中,目標堆外內(nèi)存為第一數(shù)據(jù)服務器上的堆外內(nèi)存;

堆外內(nèi)存地址廣播單元,用于將目標堆外內(nèi)存的地址發(fā)送至非主任務執(zhí)行器;

所述非主任務執(zhí)行器包括:

廣播數(shù)據(jù)獲取單元,用于根據(jù)目標堆外內(nèi)存的地址,從目標堆外內(nèi)存中獲取廣播數(shù)據(jù)。

第八方面,本發(fā)明實施例還提供了一種控制服務器,控制服務器應用于數(shù)據(jù)廣播系統(tǒng),數(shù)據(jù)廣播系統(tǒng)包括控制服務器和至少一個數(shù)據(jù)服務器;數(shù)據(jù)服務器上有多個任務執(zhí)行器;控制服務器包括:

廣播數(shù)據(jù)生成單元,用于生成廣播數(shù)據(jù);

主任務執(zhí)行器設置單元,用于設置數(shù)據(jù)服務器上的多個任務執(zhí)行器中的一個任務執(zhí)行器為主任務執(zhí)行器;主任務執(zhí)行器用于獲取廣播數(shù)據(jù),并將廣播數(shù)據(jù)保存至目標堆外內(nèi)存,將目標堆外內(nèi)存的地址發(fā)送至非主任務執(zhí)行器,非主任務執(zhí)行器用于根據(jù)目標堆外內(nèi)存的地址,從目標堆外內(nèi)存獲取廣播數(shù)據(jù),其中,非主任務執(zhí)行器為數(shù)據(jù)服務器上除主任務執(zhí)行器之外的其他任務執(zhí)行器,目標堆外內(nèi)存為數(shù)據(jù)服務器上的堆外內(nèi)存,堆外內(nèi)存存儲的數(shù)據(jù)可被多個任務執(zhí)行器使用。

從以上技術方案可以看出,本發(fā)明實施例具有以下優(yōu)點:

本發(fā)明實施例中的數(shù)據(jù)廣播系統(tǒng)包括控制節(jié)點和至少一個數(shù)據(jù)節(jié)點,每個數(shù)據(jù)節(jié)點上運行有至少一個任務執(zhí)行器;控制節(jié)點生成廣播數(shù)據(jù),對于每個數(shù)據(jù)節(jié)點,控制節(jié)點設置數(shù)據(jù)節(jié)點上的其中一個任務執(zhí)行器為主任務執(zhí)行器,主任務執(zhí)行器獲取廣播數(shù)據(jù),將廣播數(shù)據(jù)保存至堆外內(nèi)存,將堆外內(nèi)存的地址發(fā)送至該數(shù)據(jù)節(jié)點上的其他任務執(zhí)行器;其他任務執(zhí)行器從堆外內(nèi)存的地址獲取廣播數(shù)據(jù)。本發(fā)明實施例中是由主任務執(zhí)行器從其他節(jié)點獲取廣播數(shù)據(jù),其他任務執(zhí)行器僅需要從本節(jié)點上的堆外內(nèi)存中獲取廣播數(shù)據(jù),因此,在同一個數(shù)據(jù)節(jié)點上,只需要分發(fā)一份廣播數(shù)據(jù),從而能夠減少對系統(tǒng)網(wǎng)絡IO和內(nèi)存資源的占用。

附圖說明

圖1為本發(fā)明實施例中的一種并行化架構示意圖;

圖2為本發(fā)明實施例中的一種Spark運行模式示意圖;

圖3為現(xiàn)有技術中的一種廣播變量廣播方法的示意圖;

圖4為現(xiàn)有技術中的一種Spark數(shù)據(jù)廣播原理示意圖;

圖5為現(xiàn)有技術中的Spark數(shù)據(jù)廣播內(nèi)存膨脹對比圖;

圖6為現(xiàn)有技術中的Spark數(shù)據(jù)廣播網(wǎng)絡IO開銷對比圖;

圖7為本發(fā)明實施例中數(shù)據(jù)廣播系統(tǒng)及數(shù)據(jù)廣播優(yōu)化原理示意圖;

圖8為本發(fā)明實施例中數(shù)據(jù)廣播信息交互流程圖;

圖9為本發(fā)明實施例中的數(shù)據(jù)服務器和控制服務器的硬件結構示意圖。

具體實施方式

為了使本發(fā)明的技術方案及有益效果更加清楚,以下結合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。

Spark為一種基于內(nèi)存的并行計算框架,由UCBerkeley的AMP實驗室開發(fā)。Spark不同于MapReduce的是,Spark的Job中間輸出和結果可以保存在內(nèi)存中,從而不再需要讀寫Hadoop分布式文件系統(tǒng)(英文:Hadoop Distributed File System,簡稱:HDFS),因此Spark能更好地適用于數(shù)據(jù)挖掘與機器學習等需要迭代的算法。

本發(fā)明實施例中的數(shù)據(jù)廣播系統(tǒng)、數(shù)據(jù)廣播方法及設備應用于Spark集群,Spark集群模式包括但不限于StandAlone、yarn-client、yarn-cluster、Mesos等模式。

Spark集群在部署時,可以采用如圖1所示的并行化架構。并行化架構是一種可以加速任務運行的一種技術,具體是將輸入數(shù)據(jù)在多個數(shù)據(jù)節(jié)點上均衡分布,任務啟動時在多個數(shù)據(jù)節(jié)點上并行計算,從而可以加速任務的運行。

如圖1所示的并行化架構中包括控制節(jié)點(Master),一個Master節(jié)點連接多個數(shù)據(jù)節(jié)點(Worker)。其中每一個控制節(jié)點和數(shù)據(jù)節(jié)點都有獨立的處理器(英文:Central Processing Unit,CPU)和存儲資源(包括:內(nèi)存、磁盤),不同節(jié)點通過高速網(wǎng)絡(如以太網(wǎng)、光纖交換網(wǎng)絡)進行連接,其中:

控制節(jié)點負責管理整個集群中每個數(shù)據(jù)節(jié)點,對外提供任務提交接口和任務查詢等接口,接收客戶端提交的作業(yè),將外部任務請求分解到數(shù)據(jù)節(jié)點上并行執(zhí)行,并收集執(zhí)行結果反饋給客戶端。

數(shù)據(jù)節(jié)點受控制節(jié)點控制,負責管理本節(jié)點的資源,定期向控制節(jié)點匯報心跳,接收控制節(jié)點的命令,執(zhí)行提交的作業(yè),按控制節(jié)點執(zhí)行模型訓練等。

圖2為基于Spark on yarn一種Spark運行模式架構圖,從集群部署的角度來看,Spark集群由以下部分組成:

集群管理器(Cluster Manager):Spark的集群管理器,承擔如圖1中所示的控制節(jié)點(Master節(jié)點)的角色,主要負責資源的分配與管理。

數(shù)據(jù)節(jié)點(Worker):承擔如圖1中所示的數(shù)據(jù)節(jié)點(Worker節(jié)點)角色,每個Worker上有至少一個任務執(zhí)行器(Executor),Worker負責創(chuàng)建Executor,將資源和任務進一步分配給Executor,同步資源信息給Cluster Manager。

任務管理器(Executor):是Spark上的某個應用(Application)運行在worker節(jié)點上的一個進程,該進程負責運行任務(Task),并且負責將數(shù)據(jù)存在內(nèi)存或者磁盤上。每個應用(Application)都有各自獨立的任務執(zhí)行器。

客戶端驅動程序(Driver App):為客戶端應用程序,用于將任務程序轉換為彈性分布式數(shù)據(jù)集(英文:Resilient Distributed Datasets,簡稱:RDD),并與Cluster Manager進行通信與調(diào)度。

彈性分布式數(shù)據(jù)集RDD是Spark最核心的概念,表示已被分區(qū),不可變的并能夠被并行操作的數(shù)據(jù)集合,RDD通常被分區(qū)到集群的每個數(shù)據(jù)節(jié)點上,不同的數(shù)據(jù)集格式對應不同的RDD實現(xiàn)。Spark的計算過程主要是RDD的迭代計算過程。

當一個RDD需要訪問另一個RDD的數(shù)據(jù)時,則Spark可以通過將承載數(shù)據(jù)量較小的RDD廣播到每個任務執(zhí)行器上,優(yōu)化關聯(lián)操作。

將較小的RDD廣播到每個任務執(zhí)行器上可以采用廣播(broadcast)變量的方式。Spark源碼中Hadoop RDD的實現(xiàn)中,就采用廣播(broadcast)變量進行Hadoop JobConf的傳輸。

Broadcast變量是Spark所支持的兩種共享變量(shared variables)的一種,為共享分布式計算過程中各個task都會用到的只讀變量,broadcast變量只會在每個任務執(zhí)行器上保存一份,而不會每個task都傳遞一份,節(jié)省空間,效率也高。Spark使用高效的廣播算法去分配廣播變量,以降低通信成本。

圖3為現(xiàn)有技術中的一種數(shù)據(jù)廣播的方法示意圖。圖中的m表示廣播變量(Broadcast變量),Spark應用驅動(Spark application Driver)相當于圖1所示的并行化框架中的控制節(jié)點,從屬數(shù)據(jù)節(jié)點(Slave Worker)就相當于圖1所示的并行化框架中的數(shù)據(jù)節(jié)點Worker,Worker上運行有Executor,Executor運行有多個task。

現(xiàn)有Spark集群模式運行,當廣播變量m時,每個任務執(zhí)行器都會從控制節(jié)點拉取廣播變量,按照某一數(shù)據(jù)節(jié)點上啟動的任務執(zhí)行器的個數(shù)N,分發(fā)廣播變量N份到該數(shù)據(jù)節(jié)點上,導致系統(tǒng)網(wǎng)絡IO和內(nèi)存資源多余占用,從而引發(fā)任務失敗。

圖4以Spark on yarn運行模式為示例,說明了Spark在廣播數(shù)據(jù)時,每個數(shù)據(jù)節(jié)點上被分發(fā)了多份廣播數(shù)據(jù)的問題。圖中的driver_master與圖3中的Spark應用驅動、與圖1中的Master節(jié)點一樣,都表示控制節(jié)點。

Spark任務運行時,都是以Executor為基本單位,而每個Executor各自對應一個數(shù)據(jù)管理器(BlockManager),driver_master側有一個數(shù)據(jù)管理控制器(BlockManagerMaster)。每個Executor上的BlockManager用于從集群的其他節(jié)點(driver_master節(jié)點或其他數(shù)據(jù)節(jié)點)上拉取數(shù)據(jù),讀取本地數(shù)據(jù)緩存到內(nèi)存或磁盤,在拉取完數(shù)據(jù)后,向driver_master的BlockManagerMaster匯報Block的信息和接收來自BlockManagerMaster的消息。因此,每個Executor都需要從集群的其他節(jié)點拉取數(shù)據(jù),并向driver_master匯報。

這種廣播數(shù)據(jù)的實現(xiàn)方式,存在嚴重的內(nèi)存多余占用和網(wǎng)絡IO通信開銷。例如:以10個數(shù)據(jù)節(jié)點為集群、每個數(shù)據(jù)節(jié)點上啟動9個任務管理器、廣播數(shù)據(jù)大小為2GB,廣播分塊大小為4MB為例?,F(xiàn)有Spark廣播數(shù)據(jù)方法,當廣播數(shù)據(jù)的大小為2GB的時候,需要2GB*9*10=180GB的內(nèi)存開銷,廣播變量的內(nèi)存膨脹對比如圖5所示,2GB的廣播數(shù)據(jù)大小需要180GB的內(nèi)存開銷;當廣播數(shù)據(jù)的大小為2GB的時候,廣播數(shù)據(jù)塊為2GB/4MB=512,廣播數(shù)據(jù)塊傳輸次數(shù)需要(2GB/4MB)*10*9=46080次,網(wǎng)絡IO開銷對比圖如圖6所示,廣播數(shù)據(jù)塊為512時,實際需要傳輸46080次。

本發(fā)明中提出一種Spark在集群模式下數(shù)據(jù)廣播系統(tǒng)、數(shù)據(jù)廣播方法及設備,能夠減少對系統(tǒng)網(wǎng)絡IO和內(nèi)存資源的占用。下面進行詳細介紹。

圖7為本發(fā)明實施例中的數(shù)據(jù)廣播系統(tǒng),該系統(tǒng)包括:

控制節(jié)點(圖7中所示的driver_master)和至少一個數(shù)據(jù)節(jié)點(圖7中所示的Worker),每個數(shù)據(jù)節(jié)點上運行有至少一個任務執(zhí)行器。

除此之外,每個數(shù)據(jù)節(jié)點上包括堆外內(nèi)存(off-heap memory),堆外內(nèi)存中存儲的數(shù)據(jù)可被該數(shù)據(jù)節(jié)點上的所有任務執(zhí)行器訪問。堆外內(nèi)存是與堆內(nèi)內(nèi)存(on-heap memory)相對的概念,堆內(nèi)內(nèi)存是把內(nèi)存對象分配在Java虛擬機的堆內(nèi)的內(nèi)存,由Java虛擬機進行管理;堆外內(nèi)存是把內(nèi)存對象分配在Java虛擬機的堆以外的內(nèi)存,這些內(nèi)存直接受操作系統(tǒng)管理,而不是受Java虛擬機管理,不會因為系統(tǒng)內(nèi)存不夠而讓虛擬機進行垃圾回收,也能使得資源隔離的多個進程之間可以共享堆外數(shù)據(jù)的讀取。因此數(shù)據(jù)節(jié)點的堆外內(nèi)存中存儲的數(shù)據(jù)可被該節(jié)點上的多個任務執(zhí)行器訪問。

控制節(jié)點與各數(shù)據(jù)節(jié)點中的任務執(zhí)行器進行通信,任務執(zhí)行器包括主任務執(zhí)行器(圖7中的ExecutorMaster)和非主任務執(zhí)行器(圖7中的Executor1……ExecutorN),主任務執(zhí)行器為控制節(jié)點在數(shù)據(jù)節(jié)點上所指定的一個任務執(zhí)行器,具體的指定過程請參閱圖8所示的實施例中的步驟802中的描述。非主任務執(zhí)行器為該數(shù)據(jù)節(jié)點上除主任務執(zhí)行器之外的其他任務執(zhí)行器。

控制節(jié)點與與其連接的多個數(shù)據(jù)節(jié)點中進行通信,下面以控制節(jié)點和其中一個數(shù)據(jù)節(jié)點(為了描述方便,稱之為第一數(shù)據(jù)節(jié)點)之間的信息交互為例,對本發(fā)明實施例中的廣播方法進行詳細介紹,如圖8所示。

801、控制節(jié)點生成廣播數(shù)據(jù);

控制節(jié)點driver_master從所有任務執(zhí)行器上收集待廣播數(shù)據(jù)到本地,形成完整數(shù)據(jù)源,并按照任務運行時指定的廣播數(shù)據(jù)塊大小參數(shù)(broadcast_block_size),將廣播數(shù)據(jù)分塊,構造數(shù)據(jù)塊,并構造廣播數(shù)據(jù)的元數(shù)據(jù)信息,元數(shù)據(jù)信息包括:“分塊塊數(shù)量、分塊總字節(jié)大小、元數(shù)據(jù)編號”等。

可選的,為了在元數(shù)據(jù)上進行區(qū)分,在構造廣播數(shù)據(jù)的元數(shù)據(jù)信息時,在元數(shù)據(jù)信息中加入“是否優(yōu)化廣播”字段,“是否優(yōu)化廣播”字段用于標識每個任務執(zhí)行器在執(zhí)行廣播數(shù)據(jù)相關任務時的數(shù)據(jù)讀取方式,如果該字段的值是“是”時,表示任務執(zhí)行器是采用本發(fā)明中的方式讀取的數(shù)據(jù),如果該字段的值是“否”時,表示該任務執(zhí)行器是采用的現(xiàn)有技術中的方式讀取數(shù)據(jù)。

802、控制節(jié)點設置第一數(shù)據(jù)節(jié)點上的其中一個任務執(zhí)行器為主任務執(zhí)行器;

控制節(jié)點從第一數(shù)據(jù)節(jié)點上選取一個任務執(zhí)行器作為主任務執(zhí)行器,具體的選取方式包括但不限于以下幾種:

第一種:控制節(jié)點從數(shù)據(jù)節(jié)點上隨機選取一個任務執(zhí)行器作為主任務執(zhí)行器(ExecutorMaster),其他任務執(zhí)行器為非主任務執(zhí)行器(Executor1……ExecutorN)。

第二種:控制節(jié)點按照每個任務執(zhí)行器的負載信息情況選擇主任務執(zhí)行器,例如:選擇其中負載最小的一個任務執(zhí)行器作為主任務執(zhí)行器。

具體的,控制節(jié)點設置主任務執(zhí)行器的方式包括:

控制節(jié)點給第一數(shù)據(jù)節(jié)點上的每個任務執(zhí)行器下發(fā)標志位,以標識當前任務執(zhí)行器是否被選中為主任務執(zhí)行器,例如:當某一任務標識器接收的標志位為1時,表示該任務執(zhí)行器被設置為主任務執(zhí)行器,某一任務標識器接收的標識位為0時,表示該任務執(zhí)行器被設置為非主任務執(zhí)行器。

需要說明的是,步驟801中生成廣播數(shù)據(jù)和步驟802中的設置主任務執(zhí)行器之間的執(zhí)行順序不做具體限制,可以先生成廣播數(shù)據(jù),再設置主任務執(zhí)行器,也可以先設置主任務執(zhí)行器,再生成廣播數(shù)據(jù),也可以并行執(zhí)行。

在現(xiàn)有技術中,控制節(jié)點通過下發(fā)廣播執(zhí)行計劃(或廣播任務執(zhí)行計劃)給各任務執(zhí)行器,各任務執(zhí)行器按照廣播執(zhí)行計劃中的指示從數(shù)據(jù)源節(jié)點(控制節(jié)點或其他數(shù)據(jù)節(jié)點)拉取廣播數(shù)據(jù)??蛇x的,為了使方案更完善,本發(fā)明實施例在廣播執(zhí)行計劃中新增以下執(zhí)行計劃,以形成廣播優(yōu)化執(zhí)行計劃:

1)控制節(jié)點執(zhí)行計劃:控制節(jié)點從數(shù)據(jù)節(jié)點上選取ExecutorMaster,指定選取的具體策略,步驟802中控制節(jié)點從第一數(shù)據(jù)節(jié)點上選取一個任務執(zhí)行器作為主任務執(zhí)行器時所使用的策略為廣播任務執(zhí)行計劃中所指定的策略。

2)主任務執(zhí)行器計劃:數(shù)據(jù)節(jié)點上的ExecutorMaster執(zhí)行廣播數(shù)據(jù)的拉取和保存,將廣播數(shù)據(jù)保存至堆外內(nèi)存,通知廣播數(shù)據(jù)的保存地址到該數(shù)據(jù)節(jié)點的非主任務執(zhí)行器(Executor1……ExecutorN)中;

3)非主任執(zhí)行器計劃:數(shù)據(jù)節(jié)點上的非主任務執(zhí)行器不需要執(zhí)行廣播數(shù)據(jù)的拉取,只要等待ExecutorMaster發(fā)送廣播數(shù)據(jù)的保存地址,再從本地堆外內(nèi)存(本數(shù)據(jù)節(jié)點的堆外內(nèi)存)中讀取廣播數(shù)據(jù)。

控制節(jié)點下發(fā)廣播優(yōu)化執(zhí)行計劃(主任務執(zhí)行器計劃和非主任務執(zhí)行器計劃)到各任務執(zhí)行器上。

可選的,控制節(jié)點在下發(fā)廣播優(yōu)化執(zhí)行計劃時,可以是下發(fā)主任務執(zhí)行器計劃到主任務執(zhí)行器上,并下發(fā)非主任務執(zhí)行器計劃到非主任務執(zhí)行器上。還可以是,將主任務執(zhí)行器計劃和非主任務執(zhí)行器計劃下發(fā)到每個任務執(zhí)行器上,由主任務執(zhí)行器選擇主任務執(zhí)行器計劃執(zhí)行,非主任務執(zhí)行器選擇非主任務執(zhí)行器計劃執(zhí)行。

803、主任務執(zhí)行器獲取廣播數(shù)據(jù);

主任務執(zhí)行器根據(jù)收到的廣播優(yōu)化任務執(zhí)行計劃,執(zhí)行從待廣播數(shù)據(jù)源上按指定策略拉取廣播數(shù)據(jù),拉取廣播數(shù)據(jù)的策略根據(jù)各節(jié)點間通信方式的不同而不同:

如果各節(jié)點間采用超文本傳輸協(xié)議(英文:HyperText Transfer Protocol,簡稱:HTTP)方式通信,則主任務執(zhí)行器從控制節(jié)點上拉取所有廣播數(shù)據(jù)塊。

如果各節(jié)點采用對等網(wǎng)絡傳輸(英文:Peer to Peer,簡稱:P2P)方式通信,則第一輪拉取是由各數(shù)據(jù)節(jié)點上的各主任務執(zhí)行器從控制節(jié)點拉取廣播數(shù)據(jù)塊,廣播數(shù)據(jù)塊被打散分塊到各數(shù)據(jù)節(jié)點上,之后,第一數(shù)據(jù)節(jié)點的主任務執(zhí)行器從其他數(shù)據(jù)節(jié)點上拉取廣播數(shù)據(jù)的其他塊,通過多次拉取,能夠獲得完整的廣播數(shù)據(jù)。

804、主任務執(zhí)行器將廣播數(shù)據(jù)保存至目標堆外內(nèi)存;

主任務執(zhí)行器將拉取的廣播數(shù)據(jù)塊保存至第一數(shù)據(jù)節(jié)點上的堆外內(nèi)存中(目標堆外內(nèi)存),通過多次拉取,使得保存在目標堆外內(nèi)存中的數(shù)據(jù)為廣播數(shù)據(jù)的完整分塊。

可選的,ExecutorMaster的BlockManager通知BlockManagerMaster廣播數(shù)據(jù)拉取已完成。

805、主任務執(zhí)行器將目標堆外內(nèi)存的地址發(fā)送至非主任務執(zhí)行器;

ExecutorMaster發(fā)送消息到第一數(shù)據(jù)節(jié)點的其余任務執(zhí)行器(即非主任務執(zhí)行器)上,將廣播數(shù)據(jù)所在的目標堆外內(nèi)存的地址發(fā)送給非主任務執(zhí)行器。

具體的,ExecutorMaster通過Akka消息機制將目標堆外內(nèi)存的地址發(fā)送給非主任務執(zhí)行器。

其中,Akka消息機制是一種可在Java虛擬機上提供分布式、高并發(fā)、容錯的消息傳輸工具包,可實現(xiàn)并發(fā)、容錯的分布式系統(tǒng);通過異步、非阻塞方式,進行消息或事件傳送;具有高性能、易擴展、以構建應用等優(yōu)勢,開源并行計算框架Spark就是基于Akka實現(xiàn)控制節(jié)點和數(shù)據(jù)節(jié)點之間消息的傳遞。

806、非主任務執(zhí)行器根據(jù)目標堆外內(nèi)存的地址,從目標堆外內(nèi)存中獲取廣播數(shù)據(jù)。

第一數(shù)據(jù)節(jié)點上的非主任務執(zhí)行器在接收到主任務執(zhí)行器發(fā)送的目標堆外內(nèi)存地址后,根據(jù)非主任務執(zhí)行器計劃中的指示,根據(jù)目標堆外內(nèi)存的地址,從目標堆外內(nèi)存中獲取廣播數(shù)據(jù),各任務執(zhí)行器上的Task再進行運算。

除此之外,每個非主任務執(zhí)行器在從目標堆外內(nèi)存獲取廣播數(shù)據(jù)后,通知driver_master上的BlockManagerMaster廣播數(shù)據(jù)獲取完成,driver_master接收第一數(shù)據(jù)節(jié)點上的所有的非主任執(zhí)行器發(fā)送的廣播數(shù)據(jù)獲取完成消息后,表示廣播任務已完成,driver_master發(fā)通知消息到每個數(shù)據(jù)節(jié)點上的ExecutorMaster,清除廣播數(shù)據(jù)。

可選的,為了更好地兼容本發(fā)明實施例中的方案與現(xiàn)有技術中的方案,本發(fā)明實施例通過在driver_master側配置開關變量,表明是否開啟廣播數(shù)據(jù)的優(yōu)化選項;當開關變量開啟時,則driver_master和數(shù)據(jù)節(jié)點上的各任務執(zhí)行器執(zhí)行上述步驟801至步驟806;當開關變量不開啟時,則driver_master和數(shù)據(jù)節(jié)點上的各任務執(zhí)行器不執(zhí)行上述步驟801至步驟806,而是執(zhí)行現(xiàn)有技術中的方案。

需要說明的是,圖8所示的實施例只是以第一數(shù)據(jù)節(jié)點與控制節(jié)點的信息交互對本方案進行說明,在實際應用中,控制節(jié)點同時與其控制的多個數(shù)據(jù)節(jié)點進行交互,實施本發(fā)明實施例中的方案。

本發(fā)明實施例基于堆外內(nèi)存和Akka消息機制,優(yōu)化Spark廣播數(shù)據(jù)的方案,由driver_master在每個數(shù)據(jù)節(jié)點上設置一個任務執(zhí)行器為ExecutorMaster,由ExecutorMaster負責從數(shù)據(jù)源處拉取廣播數(shù)據(jù),并保存廣播數(shù)據(jù)到堆外內(nèi)存中,然后該ExecutorMaster發(fā)送消息通知該數(shù)據(jù)節(jié)點上其余Executor廣播數(shù)據(jù)的堆外內(nèi)存地址,使得該數(shù)據(jù)節(jié)點上的其余Executor可以從堆外內(nèi)存中獲取廣播數(shù)據(jù)。從而使得同一個數(shù)據(jù)節(jié)點上,只需要有一個executor從數(shù)據(jù)源處拉取廣播數(shù)據(jù),只需要復制分發(fā)一份廣播數(shù)據(jù),從而能夠減少對系統(tǒng)網(wǎng)絡IO和內(nèi)存資源的占用。

通過本發(fā)明實施例中的方案,則只需要給每個數(shù)據(jù)節(jié)點ExecutorMaster分發(fā)一份數(shù)據(jù),則只需要2GB*10=20GB內(nèi)存開銷,廣播數(shù)據(jù)塊傳輸次數(shù)只需要(2GB/4MB)*10=5120次。而現(xiàn)有技術中的方案需要2GB*9*10=180GB的內(nèi)存開銷,廣播數(shù)據(jù)塊傳輸次數(shù)需要(2GB/4MB)*10*9=46080次。相比之下,本發(fā)明實施例能夠節(jié)省系統(tǒng)網(wǎng)絡開銷和減少對內(nèi)存的占用。

以上是對本發(fā)明實施中的數(shù)據(jù)廣播方法的介紹,上述控制節(jié)點和控制節(jié)點可以是服務器,控制節(jié)點和數(shù)據(jù)節(jié)點可以是位于不同的服務器上,也可以位于同一臺服務器上。本發(fā)明實施例以位于不同服務器上為例進行說明。其中,控制節(jié)點為控制服務器,數(shù)據(jù)節(jié)點為數(shù)據(jù)服務器。

下面對本發(fā)明實施例中的控制服務器和數(shù)據(jù)服務器分別進行介紹。

應用服務器和數(shù)據(jù)服務器硬件結構都可以是如圖9所示的服務器結構示意圖,只是應用服務器和數(shù)據(jù)服務器的處理器執(zhí)行的應用程序的不同,從而具備不同的功能。

圖9是本發(fā)明實施例提供的一種服務器結構示意圖,該服務器900可因配置或性能不同而產(chǎn)生比較大的差異,可以包括一個或一個以上處理器922和存儲器932,一個或一個以上存儲應用程序(或程序代碼)942或數(shù)據(jù)944的存儲器930(例如一個或一個以上海量存儲設備)。其中,存儲器930可以是短暫存儲或持久存儲。存儲在存儲介質930的程序可以包括一個或一個以上模塊(圖示沒標出),每個模塊可以包括對服務器中的一系列指令操作。更進一步地,處理器922與存儲器930通信,在服務器900上執(zhí)行存儲器930中的一系列指令操作。

服務器900還可以包括一個或一個以上電源926,一個或一個以上有線或無線網(wǎng)絡接口950,一個或一個以上輸入輸出(I/O)接口958,和/或,一個或一個以上操作系統(tǒng)941,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,F(xiàn)reeBSDTM等等。

處理器922,可以是CPU或者是特定集成電路ASIC(Application Specific Integrated Circuit),或者是被配置成實施本發(fā)明實施例的一個或多個集成電路,用于執(zhí)行操作系統(tǒng)與應用程序。

基于以上硬件結構,下面先介紹數(shù)據(jù)服務器所具備的功能。

本發(fā)明實施例中的數(shù)據(jù)服務器中的處理器922上處理器上運行有多個任務執(zhí)行器,任務執(zhí)行器包括主任務執(zhí)行器和非主任務執(zhí)行器,主任務執(zhí)行器為控制服務器在第一數(shù)據(jù)服務器上所指定的一個任務執(zhí)行器,非主任務執(zhí)行器為第一數(shù)據(jù)服務器上除主任務執(zhí)行器之外的其他任務執(zhí)行器;

數(shù)據(jù)服務器中存儲器932中包括堆外內(nèi)存,堆外內(nèi)存存儲的數(shù)據(jù)可被至少一個任務執(zhí)行器使用;

處理器922中的主任務執(zhí)行器調(diào)用存儲器930中的程序代碼942,執(zhí)行上述圖8所示的實施例中的主任務執(zhí)行器所執(zhí)行的步驟,同樣,非主任務執(zhí)行器調(diào)用存儲器930中的程序代碼,執(zhí)行上述圖8所示的實施例中的非主任務執(zhí)行器所執(zhí)行的步驟。具體請參閱圖8所示的實施例,此處不再贅述。

基于以上硬件結構,下面介紹控制服務器所具備的功能。

本發(fā)明實施例中的控制服務器中的處理器922調(diào)用所述存儲器930中的所述程序代碼942,執(zhí)行上述圖8所示的實施例中的控制節(jié)點(即driver_master)所執(zhí)行的步驟,具體請參閱圖8所示的實施例,此處不再贅述。

另外,處理器922通過服務器的內(nèi)部總線和I/O連接,I/O再和外部設備連接,最終實現(xiàn)處理器922和外部設備的信息傳輸,用戶可以通過I/O對處理器922下達命令。外部設備包括例如鼠標、鍵盤、打印機等。

另外,本發(fā)明實施例還提供了一種數(shù)據(jù)廣播系統(tǒng),該系統(tǒng)示意圖可以參閱圖7,包括圖9中所述的控制服務器和至少一個圖9中所述的數(shù)據(jù)服務器,數(shù)據(jù)服務器對應于圖7中所示的數(shù)據(jù)節(jié)點,控制服務器對應于圖7中所示的driver_master。此處不再贅述。

所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。

在本申請所提供的幾個實施例中,應該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。

所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。

另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。

所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質。

以上所述,以上實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發(fā)明各實施例技術方案的精神和范圍。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
固镇县| 永城市| 贵定县| 永泰县| 怀集县| 宝坻区| 来凤县| 望江县| 闽清县| 嘉鱼县| 常宁市| 宝应县| 合阳县| 铁岭县| 平果县| 裕民县| 梅河口市| 盐城市| 澄迈县| 互助| 凤山市| 沁源县| 侯马市| 泸定县| 邢台市| 福海县| 石狮市| 神农架林区| 萨嘎县| 三亚市| 太白县| 临西县| 扶沟县| 资源县| 宝清县| 虹口区| 绥德县| 惠水县| 山东| 肇州县| 衡阳市|