<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 理解 Storm Topology 的 Parallelism(并行度) ## 什么讓 topology(拓撲)可以運行: worker 進程, executors(執行器)和 tasks(任務) Storm 區分以下 3 個主要的實體, 它們在 Storm 集群中用于實際的運行 topology(拓撲): 1. Worker 進程 2. Executors(線程) 3. Tasks 這是一個簡單的例子, 以說明他們之間的關系 ![The relationships of worker processes, executors (threads) and tasks in Storm](https://img.kancloud.cn/c2/34/c23482c089a633ea9c62ab844d071c4d_563x341.jpg) 一個 _worker 進程_ 執行一個 topology(拓撲)的子集. 一個 worker 進程屬于一個指定 topology(拓撲), 并且針對該 topology 的一個或多個組件(spouts 或 bolts)來說會運行一個或更多的 executors(執行器). 一個正在運行的 topology 由許多這樣的進程組成, 它們運行在 Storm 集群的多個機器上. 一個 _executor(執行器)_ 是一個線程, 它是由 worker 進程產生的. 它可能針對相同的組件(spout 或 blot)運行一個或多個 tasks(任務). 一個 _task_ 執行實際的數據處理 - 在您代碼中實現的每個 spout 或 bolt 在整個集群上都執行了許多的 taskk(任務). 組件的 task(任務)數量在 topology(拓撲)的整個生命周期中總是相同的, 但組件的 executors(線程)數量可能會隨時間而變化. 這意味著以下條件成立: `#threads ≤ #tasks`. 默認情況下, 默認情況下,tasks(任務)數量與 executors(執行器)設置成一樣, 例如. Storm 在每個線程上運行一個 task(任務). ## 配置 topology 的 parallelism(并行度) 請注意, 在 Storm 的術語中, "parallelism(并行度)" 特別用于描述所謂的 _parallelism hint_, 它表示組件的 executor(線程)的初始化數量. 在本文檔中, 雖然我們在一般意義上使用術語 "parallelism(并行度)" 來描述如何配置的不僅只有 executor(執行器)的數量, 還可以配置 worker 進程的數量以及 Storm topology 的 tasks(任務)數量. We will specifically call out when "parallelism" is used in the normal, narrow definition of Storm. 以下部分概述了各種配置選項以及如何在代碼中設置它們. 盡管設置這些選項有多種方法, 表中只列出了其中的一些選項. Storm 目前有以下 [配置設置的優先順序](Configuration.html): `defaults.yaml` &lt; `storm.yaml` &lt; topology 級別指定的配置 &lt; 內部 component(組件)指定的配置 &lt; 外部 component(組件)指定的配置. ### worker 進程的數量 * 描述: 在集群的機器中有多少個 worker 進程來 _針對 topology_ 以創建它. * 配置選項: [TOPOLOGY_WORKERS](javadocs/org/apache/storm/Config.html#TOPOLOGY_WORKERS) * 如何在代碼中設置(示例): * [Config#setNumWorkers](javadocs/org/apache/storm/Config.html) ### executors (線程)的數量 * 描述: _每個 component(組件)_ 產生多少個 executors(執行器). * 配置選項: None (傳遞 `parallelism_hint` 參數到 `setSpout` 或 `setBolt`) * 如何在代碼中設置(示例): * [TopologyBuilder#setSpout()](javadocs/org/apache/storm/topology/TopologyBuilder.html) * [TopologyBuilder#setBolt()](javadocs/org/apache/storm/topology/TopologyBuilder.html) * 參數現在指定了 bolt 的 executors(執行器)的初始化數量(不是 tasks). ### tasks(任務)的數量 * 描述: _per component_ 有多少個 tasks(任務)來創建他們. * 配置選項: [TOPOLOGY_TASKS](javadocs/org/apache/storm/Config.html#TOPOLOGY_TASKS) * 如何在代碼中設置(示例): * [ComponentConfigurationDeclarer#setNumTasks()](javadocs/org/apache/storm/topology/ComponentConfigurationDeclarer.html) 以下是在練習中顯示這些設置的示例代碼片段: ``` topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2) .setNumTasks(4) .shuffleGrouping("blue-spout"); ``` 在上面的代碼中,我們配置 了Storm 來運行 Bolt "GreenBolt", 其初始數量為兩個 executor(執行器)和四個相關聯的 tasks(任務). Storm 的每個 executor(線程)將會運行兩個 tasks(任務). 如果您不顯示的配置 tasks 的數量, Storm 將使用每個 executor 一個 task 的默認配置來運行它們. ## 運行 topology 的示例 下圖顯示了簡單的 topology(拓撲)是如何運行的. 該 topology 由 3 個 components(組件)構成: 一個名為 `BlueSpout` 的 spout 和兩個名為 `GreenBolt` 和 `YellowBolt` 的 bolts. 該組件鏈接, 使得 `BlueSpout` 將其輸出發送到 `GreenBolt`, 它們將自己的輸出發送到 `YellowBolt`. ![在 Storm 中運行 topology 的示例](https://img.kancloud.cn/c3/c4/c3c4041c2e23179dc7c325abe4eb0434_565x514.jpg) 該 `GreenBolt` 按照上面的代碼片段進行配置, 而 `BlueSpout` 和 `YellowBolt` 只設置了 parallelism hint(執行器數量). 以下是相關代碼: ``` Config conf = new Config(); conf.setNumWorkers(2); // use two worker processes topologyBuilder.setSpout("blue-spout", new BlueSpout(), 2); // set parallelism hint to 2 topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2) .setNumTasks(4) .shuffleGrouping("blue-spout"); topologyBuilder.setBolt("yellow-bolt", new YellowBolt(), 6) .shuffleGrouping("green-bolt"); StormSubmitter.submitTopology( "mytopology", conf, topologyBuilder.createTopology() ); ``` 當然, Storm 還提供了額外的配置設置來控制 topology(拓撲)的并行度, 包括: * [TOPOLOGY_MAX_TASK_PARALLELISM](javadocs/org/apache/storm/Config.html#TOPOLOGY_MAX_TASK_PARALLELISM): 此設置針對單個組件生成的 executor(執行器)的數量設置上限. 通常在測試期間使用它來限制在本地模式下運行 topology(拓撲)時產生的線程數. 您可以通過 [Config#setMaxTaskParallelism()](javadocs/org/apache/storm/Config.html#setMaxTaskParallelism(int)) 來設置此選項. ## 如何改變正在運行中的 topology 的并行度 Storm 的一個很好的特性是可以增加或減少 worker 進程 和/或 executor(執行器)的數量, 而無需重新啟動集群或 topology(拓撲). 這樣做的行為稱之為 rebalancing(重新平衡). 您有兩個選項來 rebalance(重新平衡)一個 topology(拓撲): 1. 使用 Storm web UI 來 rebalance(重新平衡)指定的 topology. 2. 使用 CLI 工具 storm rebalance, 如下所示. 以下是一個使用 CLI 工具的示例: ``` ## 重新配置 topology "mytopology" 以使用 5 個 worker 進程, ## 該 spout "blue-spout" 要使用 3 個 executors(執行器)并且 ## 該 bolt "yellow-bolt" 要使用 10 executors(執行器). $ storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10 ``` ## 參考文獻 * [概念](Concepts.html) * [配置](Configuration.html) * [在生產集群上運行 topologies(拓撲)](Running-topologies-on-a-production-cluster.html)] * [Local mode(本地模式)](Local-mode.html) * [教程](Tutorial.html) * [Storm API 文檔](javadocs/), most notably the class `Config`
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看