jstorm實例的簡單介紹

本文目錄一覽:

Storm中進程,線程,任務和實例的關係

以一個具體的例子來闡述「Storm中進程,線程,任務和實例的關係」

假設現在有一個Topology實例,在該Topology實例中,配置為整個Topology實例服務的進程數量為10,配置了Spout單元和Bolt單元以及Spout單元和Bolt單元之間的數據流,為這些Spout和Bolt單元服務的線程和任務數量分別為:Spout單元,10個線程,20個任務;Bolt單元,20個線程,20個任務。

那麼一旦將該Topology實例提交給Nimbus,接下來就會由Nimbus控制運行。

在Nimbus的控制下,有些Supervisor會在所在的worker node上建立一個進程,整個Supervisor集群中共建立10個進程,這些進程都為該Topology實例服務。這些進程可以運行在多個worker node上,也可以運行在同一台worker node上。每個進程都持有對項目JAR包的引用。

現在一共需要30個線程來為Spout和Bolt單元服務,那麼10個進程中,每個進程上運行3個線程。一個進程中的3個線程可以分別為不同的Spout單元和Bolt單元服務。每個線程都創建一份Spout單元或者Bolt單元的實例。

Spout單元共有10個線程,20個任務為其服務,那麼每個線程上運行2個任務,同理為Bolt單元服務的20個線程中的每個線程上運行1個任務。

每個線程中的任務使用線程所持有的Spout實例或者Bolt實例,同一個線程中的多個任務間是串列執行的關係,因而在一個線程有多個任務的情況下,不會產生並發問題。

比如某個線程中持有一個Spout實例spoutInstance,配置該線程中需要運行5個任務,那麼Storm的框架代碼有可能是這麼實現的:

for(int i=0;i5;i++)

{

spoutInstance.nextTuple();

}

storm基本概念

流式計算中,各個中間件產品對計算過程中的角色的抽象都不盡相同,實現方式也是千差萬別。本文針對storm中間件在進行流式計算中的幾個概念做個概括總結。

storm分散式計算結構稱為topology(拓撲)由stream,spout,bolt組成。

spout代表一個storm拓撲中的數據入口,連接到數據源,將數據轉化為一個個tuple,並發射tuple

stream是由無限制個tuple組成的序列。tuple為storm的核心數據結構,是包含了一個或多個鍵值對的列表。

bolt可以理解為計算程序中的運算或者函數,bolt的上游是輸入流,經過bolt實施運算後,可輸出一個或者多個輸出流。

bolt可以訂閱多個由spout或者其他bolt發射的數據流,用以構建複雜的數據流轉換網路。

上述即為storm最基本的組成元素,無論storm如何運行,都是以stream,spout,bolt做為最基本的運行單元。而這三者則是共同構成了一個storm拓撲topology。

首先需要明確一個概念,bolt,spout實例,都屬於任務,spout產生數據流,並發射,bolt消費數據流,進行計算,並進行落地或再發射,他們的存在以及運行過程都需要消耗資源,而storm集群是一個提供了資源的集群,我們要做的就是將spout/boult實例合理分配到storm集群提供的計算資源上,這樣就可以讓spout/bolt得以執行。

worker為JVM進程,一個topology會分配到一個或者多個worker上運行。

executor是worker內的java線程,是具體執行bolt/spout實例用的。下篇文章在介紹如何提供storm並行計算能力時會介紹worker以及executor的配置。

在storm中,worker是由supervisor進程創建,並進行監控的。storm集群遵循主從模式,主為nimbus,從為supervisor,storm集群由一個主節點(確實有單點問題),和多個工作節點(supervisor)組成,並使用zookeeper來協調集群中的狀態信息,比如任務分配情況,worker狀態,supervisor的拓撲度量。

通過配置可指定supervisor上可運行多少worker。一個worker代表一個slot。

nimbus守護進程的主要職責是管理,協調和監控在集群上運行的topology.包括topology的發布,任務指派,事件處理失敗時重新指派任務。

supervisor守護進程等待nimbus分配任務後生成並監控workers執行任務。supervosior和worker都是運行在不同的JVM進程上。

了解了集群模式下,storm大致的分布概念,下面結合筆者做的一個實例,了解一下如何發布計算資源到storm集群上。

筆者定義了一個spout,兩個bolt 運算過程如下:

其中streamMaking是一個不斷生成隨機數(5~30)的spout實例,Step1Bolt會過濾掉15以下的隨機數(過濾),15以上的隨機數會乘以16(計算),再將結果向後發射。Step2Bolt訂閱Step1Bolt發射的數據,接收數據後,列印輸出。流程結束。

筆者在定義spout/bolt實例時,配置了spout,bolt的並行執行數。其中

streamMaking:4   Step1Bolt:2  Step2Bolt 1

這樣,發布成功後,storm會根據我的配置,分配足夠的計算資源給予spout/bolt進行執行。

發布:

發布時,spout和bolt都是在一起以jar的形式發布到nimbus上的,分配後,內部定義的spout和bolt將以組件的形式被nimbus分配至worker進程中執行。

其中worker都是由supervisor創建的,創建出來的worker進程與supervisor是分開的不同進程。一個supervisor可創建多少worker可通過修改storm安裝目錄下的storm.yaml進行配置。

task是執行的最小單元。spout/bolt實例在定義中指定了,要起多少task,以及多少executor。也即一個topology發布之前已經定義了task總量,和需要多少資源來執行我的task總量。nimbus將根據已有的計算資源進行分配。

下圖中:  nimbus左邊代表著計算任務量,和所需計算配置

nimbus右邊代表著計算資源

nimbus將根據計算資源信息,合理的分發計算任務量。

發布成功後,通過storm自帶的UI功能,可以查看你發布的topology運行以及其中每個組件的分布執行情況。

監控圖像中清晰的顯示了,目前部署的topology,以及topology中每個組件所分配的計算資源所在host,以及每個組件發射了多少tuple,接收了多少tuple,以及有多少個executor在並行執行。

本文講述了storm內的基本元素以及基本概念,後續將講述storm的重點配置信息,以及如何提高並發計算能力,窗口概念等高級特性,後續會進行源碼分析,以及與其他實時計算中間件的比較。

請教,icestorm的實例實現,出現了問題

問題現象:安裝MSDE2000時,提示指定的實例名無效 問題原因:安裝MSDE2000時,採用的資料庫默認實例名,如果以前已經安裝過,默認實例名已經被佔用,無論資料庫MSSQLSERVER服務是否啟動,則出現此提示。 解決方案:如果已安裝的資料庫可正常啟動…

如何在Windows下搭建Storm

安裝JAVA:

下載JDK(Storm 需要的環境是JDK6/7),在這個步驟中,我使用JDK 7,大家可以自行到Oracle官網下載。

我將它安裝在:

C:\Java\jdk1.7.0_45\

安裝Python:

為了測試python的安裝,我將部署”word count”來自storm-starter project 的例子,一個用python寫的multi-lang bolt。我使用的python2.7.6可以從這裡下載。

我將python安裝在這裡:

C:\Python27\

安裝以及執行Zookeeper:

下載 Apache Zookeeper 3.3.6並且解壓它。按照如下命令進行配置以及執行:

cd zookeeper-3.3.6

copy conf\zoo_sample.cfg conf\zoo.cfg

.\bin\zkServer.cmd

安裝Storm

允許storm部署到windows下的官方正式版本現在還沒有發布,但是你可以下載並且編譯包含了這個功能的版本,點擊這裡下載。

(源碼分支參考這裡)。

解壓壓縮包到你想要的位置。我選擇 C盤。

配置環境變數

在windows下需要配置兩個環境變數: STORM_HOME 以及 JAVA_HOME ,並且同樣要將安裝路徑配置到PATH中。

JAVA_HOME

C:\Java\jdk1.7.0_45\

STORM_HOME

C:\storm-0.9.1-incubating-SNAPSHOT-12182013\

PATH Add:

%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;

PATHEXT Add:

.PY

Start Nimbus, Supervisor, and Storm UI Daemons

為每一個運行實例打開一個命令行:

Nimbus

cd %STORM_HOME%

storm nimbus

Supervisor

cd %STORM_HOME%

storm supervisor

Storm UI

cd %STORM_HOME%

storm ui

通過瀏覽器 驗證一下Storm是否已經跑起來了。

部署「Word Count」 拓撲:

編譯 storm-starter 項目。

部署 Word Count 拓撲到你的本地集群中:

storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.WordCountTopology WordCount -c nimbus.host=localhost

刷新UI頁面,就可以看到任務已經跑起來了。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/293615.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-26 13:14
下一篇 2024-12-26 13:14

相關推薦

  • Python生成隨機數的應用和實例

    本文將向您介紹如何使用Python生成50個60到100之間的隨機數,並將列舉使用隨機數的幾個實際應用場景。 一、生成隨機數的代碼示例 import random # 生成50個6…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28
  • Python大神作品:讓編程變得更加簡單

    Python作為一種高級的解釋性編程語言,一直被廣泛地運用於各個領域,從Web開發、遊戲開發到人工智慧,Python都扮演著重要的角色。Python的代碼簡潔明了,易於閱讀和維護,…

    編程 2025-04-28
  • 如何在dolphinscheduler中運行chunjun任務實例

    本文將從多個方面對dolphinscheduler運行chunjun任務實例進行詳細的闡述,包括準備工作、chunjun任務配置、運行結果等方面。 一、準備工作 在運行chunju…

    編程 2025-04-28
  • 用Python實現簡單爬蟲程序

    在當今時代,互聯網上的信息量是爆炸式增長的,其中很多信息可以被利用。對於數據分析、數據挖掘或者其他一些需要大量數據的任務,我們可以使用爬蟲技術從各個網站獲取需要的信息。而Pytho…

    編程 2025-04-28
  • 如何製作一個簡單的換裝遊戲

    本文將從以下幾個方面,為大家介紹如何製作一個簡單的換裝遊戲: 1. 遊戲需求和界面設計 2. 使用HTML、CSS和JavaScript開發遊戲 3. 實現遊戲的基本功能:拖拽交互…

    編程 2025-04-27
  • Guava Limiter——限流器的簡單易用

    本文將從多個維度對Guava Limiter進行詳細闡述,介紹其定義、使用方法、工作原理和案例應用等方面,並給出完整的代碼示例,希望能夠幫助讀者更好地了解和使用該庫。 一、定義 G…

    編程 2025-04-27

發表回復

登錄後才能評論