新聞中心
這篇文章主要講解了“Worker、Executor、Task的關系是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Worker、Executor、Task的關系是什么”吧!
為西安等地區(qū)用戶提供了全套網頁設計制作服務,及西安網站建設行業(yè)解決方案。主營業(yè)務為成都網站制作、做網站、西安網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
1 simple introduction
Storm 在集群上運行一個 Topology的時刻,主要通過以下3個實體來完成Topology的執(zhí)行工作
1 Worker
2 Executor
3 Task
一個Worker 進程執(zhí)行的是一個topology的子集,這里我們必須強調:不會存在一個worker 為多個topology服務,
一個worker進程會啟動一個或則多個executor 線程來執(zhí)行一個topology的compotent-》也就是Spout或者bolt,
一個topology就是由于集群中間的多臺物理機上的Worker構成的
一個executor是一個被Worker進程啟動的單獨線程,每一個Executor都只會運行一個topology的一個component,
在默認的情況之下,一個spout,或則一個bolt都只會生成一個task,Executor線程里會在每次循環(huán)的時候順序的去調用所有的task的實例子
task是最終運行spout或bolt中代碼的單元(注:1個task即為spout或bolt的1個實例,executor線程在執(zhí)行期間會調用該task的nextTuple或execute方法)。topology啟動后,1個component(spout或bolt)的task數(shù)目是固定不變的,但該component使用的executor線程數(shù)可以動態(tài)調整(例如:1個executor線程可以執(zhí)行該component的1個或多個task實例)。這意味著,對于1個component存在這樣的條件:#threads<=#tasks(即:線程數(shù)小于等于task數(shù)目)。默認情況下task的數(shù)目等于executor線程數(shù)目,即1個executor線程只運行1個task
更加細化的來說:
一個storm topology運行起來之后, 會在supervisor 機器上啟動一些進程來運行spout和bolt實例.
如果一個topology里面一共有一個spout, 一個bolt。 其中spout的parallelism是2, bolt的parallelism是4, 那么我們可以把這個topology的總工作量看成是6, 那么一共有6個task,那么/tasks/{topology-id}下面一共會有6個以task-id命名的文件,其中兩個文件的內容是spout的id, 其它四個文件的內容是bolt的id。
task->node+port, 它其實就是從task-id到supervisor-id+port的映射, 也就是把這個task分配給某臺機器的某個端口來做。
topology里面的組件(spout/bolt)都根據(jù)parallelism被分成多個task, 而這些task被分配給supervisor的多個worker來執(zhí)行。
task都會跟一個componment-id關聯(lián), componment是spout和bolt的一個統(tǒng)稱.
對于每一個component在部署的時候都會指定使用的數(shù)量, 在storm-user中有一個討論說明了這個問題:
里面的大意是說, 通過設置parallelism來指定執(zhí)行spout/bolt的線程數(shù)量. 而在配置中還有另外一個地方(backtype.storm.Config.setNumWorkers(int))來指定一個storm集群中執(zhí)行topolgy的進程數(shù)量, 所有的線程將在這些指定的worker進程中運行. 比如說一個topology中要啟動300個線程來運行spout/bolt, 而指定的worker進程數(shù)量是60個, 那么storm將會給每個worker分配5個線程來跑spout/bolt, 如果要對一個topology進行調優(yōu), 可以調整worker數(shù)量和spout/bolt的parallelism數(shù)量(調整參數(shù)之后要記得重新部署topology. 后續(xù)會為該操作提供一個swapping的功能來減小重新部署的時間).
對于worker和task之間的比例, nathan也給出了參考, 即1個worker包含10~15個左右, 當然這個參考, 實際情況還是要根據(jù)配置和測試情況
3: work 進程內部消息傳遞處理和數(shù)據(jù)結構分析
本文從外部消息在worker進程內部的轉化,傳遞及處理過程入手,一步步分析在worker-data中的數(shù)據(jù)項存在的原因和意義。試圖從代碼實現(xiàn)的角度來回答,如果是從頭開始實現(xiàn)worker的話,該如何來定義消息接口,如何實現(xiàn)各自接口上的消息處理。
3.1 Topology 到worker的映射關系
Topology 由Spout,Bolt組成,其中的邏輯關系大體如下
請注意 Acker的行為,是在tuple,以及tuple所產生的其他tuple被確認消費掉以后,才會
有你的ACK行為
無論是Spout或Bolt的處理邏輯都需要在進程或線程內執(zhí)行,那么它們與進程及線程間的映射關系又是如何呢。有關這個問題,Understanding the Parallelism of a Storm Topology 一文作了很好的總結,現(xiàn)重復一下其要點。
1 worker是進程,executor對應于線程,spout或bolt是一個個的task
2 同一個worker只會執(zhí)行同一個topology相關的task
3 在同一個executor中可以執(zhí)行多個同類型的task, 即在同一個executor中,要么全部是bolt類的task,要么全部是 spout類的task
4 運行的時候,spout和bolt需要被包裝成一個又一個task
期間的三個組件的關系為:
小結一下,Worker=Process, Executor=Thread, Task=Spout or Bolt.
每一個executor使用的是actor pattern,high level的處理邏輯如下圖所示
感謝各位的閱讀,以上就是“Worker、Executor、Task的關系是什么”的內容了,經過本文的學習后,相信大家對Worker、Executor、Task的關系是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!
文章名稱:Worker、Executor、Task的關系是什么
URL標題:http://fisionsoft.com.cn/article/jdjcdi.html