Storm程序的并发机制原理总结
生活随笔
收集整理的這篇文章主要介紹了
Storm程序的并发机制原理总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 目錄
- 前言:
- 1、概念
- 2、配置并行度
- 總結:
目錄
前言:
為了在以后的實踐中提高Storm程序執行的效率,我們還是有必要了解下對應的Storm程序的并發機制。(哈哈,雖然以博主小菜鳥的水平還沒有接觸到這種提升程序效率層面的東西(這里只是空談理論),但是Storm的并行機制還是有必要了解下,畢竟技多不壓身嘛!)
1、概念
- 并發度:用戶指定的一個任務,可以被多個線程執行,**并發度的數量等于線程的數量。**一個任務的多個線程,會被運行在多個Worker(JVM)上,有一種類似于平均算法的負載均衡策略。盡可能減少網絡IO,和Hadoop中的MapReduce中的本地計算的道理一樣。
- Workers (JVMs): 在一個物理節點上可以運行一個或多個獨立的JVM
進程。一個Topology可以包含一個或多個worker(并行的跑在不同的物理機上), 所以worker process就是執行一個topology的子集, 并且worker只能對應于一個topology。 - Executors (threads): 在一個worker JVM進程中運行著多個Java線程。一個executor線程可以執行一個或多個tasks。但一般默認每個executor只執行一個task。一個worker可以包含一個或多個executor,每個component (spout或bolt)至少對應于一個executor, 所以可以說executor執行一個compenent的子集, 同時一個executor只能對應于一個component。
- Tasks(bolt/spout instances):Task就是具體的處理邏輯對象,**每一個Spout和Bolt會被當作很多task在整個集群里面執行。**每一個task對應到一個線程,而stream grouping則是定義怎么從一堆task發射tuple到另外一堆task。你可以調用TopologyBuilder.setSpout和TopBuilder.setBolt來設置并行度 — 也就是有多少個task。
2、配置并行度
- 對于并發度的配置, 在storm里面可以在多個地方進行配置, 優先級為: defaults.yaml < storm.yaml < topology-specific configuration< internal component-specific configuration < external component-specific configuration
- worker processes的數目, 可以通過配置文件和代碼中配置, worker就是執行進程, 所以考慮并發的效果,數目至少應該大亍machines的數目
- executor的數目, component的并發線程數,只能在代碼中配置(通過setBolt和setSpout的參數), 例如,setBolt(“green-bolt”, new GreenBolt(), 2)
- tasks的數目, 可以不配置, 默認和executor1:1, 也可以通過setNumTasks()配置 。Topology的worker數通過config設置,即執行該topology的worker(java)進程數。它可以通過 storm rebalance 命令任意調整。
- 動態的改變并行度
Storm支持在不 restart topology 的情況下, 動態的改變(增減) worker processes 的數目和 executors 的數目, 稱為rebalancing. 通過Storm web UI,或者通過storm rebalance命令實現:
storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10
并發度描述如下圖所示:
配置實例
Config conf = newConfig(); conf.setNumWorkers(2); //用2個worker topologyBuilder.setSpout("blue-spout", newBlueSpout(), 2); //設置2個并發度 topologyBuilder.setBolt("green-bolt", newGreenBolt(), 2).setNumTasks(4).shuffleGrouping("blue-spout"); //設置2個并發度,4個任務 topologyBuilder.setBolt("yellow-bolt", newYellowBolt(), 6).shuffleGrouping("green-bolt"); //設置6個并發度 StormSubmitter.submitTopology("mytopology", conf, topologyBuilder.createTopology());3個組件的并發度加起來是10,就是說拓撲一共有10個executor,一共有2個worker,每個worker產生10 / 2 = 5條線程。
綠色的bolt配置成2個executor和4個task。為此每個executor為這個bolt運行2個task。
總結:
知道了并發機制后,那么在實際生產中如何指定驅動類中每個組件的并發度數量?如何設置worker的數量?有以下幾個參考點:
1,根據上游的數據量來設置Spout的并發度。
2,根據業務復雜度和execute方法執行時間來設置Bolt并發度。
3,根據集群的可用資源來配置,一般情況下70%的資源使用率。
4,Worker的數量理論上根據程序并發度總的Task數量來均分,在實際的業務場景中,需要反復調整。
總結
以上是生活随笔為你收集整理的Storm程序的并发机制原理总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是肌电信号?
- 下一篇: 关于django的模板