大數據基礎知識學習-----Storm學習筆記(二)基礎理論

Storm基礎理論

Storm編程模型

storm01.png

元組(Tuple)

元組(Tuple),是消息傳遞的基本單元,是一個命名的值列表,元組中的字段可以是任何類型的對象。Storm使用元組作為其數據模型,元組支持所有的基本類型、字符串和字節數組作為字段值,只要實現類型的序列化接口就可以使用該類型的對象。元組本來應該是一個key-value的Map,但是由于各個組件間傳遞的元組的字段名稱已經事先定義好,所以只要按序把元組填入各個value即可,所以元組是一個value的List。

流(Stream)

流是Storm的核心抽象,是一個無界的元組系列,源源不斷傳遞的元組就組成了流,在分布式環境中并行地進行創建和處理

水龍頭(Spout)

Spout是拓撲的流的來源,是一個拓撲中產生源數據流的組件。通常情況下,Spout會從外部數據源中讀取數據,然后轉換為拓撲內部的源數據。

  • Spout可以是可靠的,也可以是不可靠的。如果Storm處理元組失敗,可靠的Spout能夠重新發射,而不可靠的Spout就盡快忘記發出的元組。
  • Spout可以發出超過一個流。
  • Spout的主要方法是nextTuple()。NextTuple()會發出一個新的Tuple到拓撲,如果沒有新的元組發出,則簡單返回。
  • Spout的其他方法是ack()和fail()。當Storm檢測到一個元組從Spout發出時,ack()和fail()會被調用,要么成功完成通過拓撲,要么未能完成。Ack()和fail()僅被可靠的Spout調用。IRichSpout是Spout必須實現的接口。

轉接頭(Bolt)

在拓撲中所有處理都在Bolt中完成,Bolt是流的處理節點,從一個拓撲接收數據,然后執行進行處理的組件。Bolt可以完成過濾、業務處理、連接運算、連接與訪問數據庫等任何操作。

  • Bolt是一個被動的角色,七接口中有一個execute()方法,在接收到消息后會調用此方法,用戶可以在其中執行自己希望的操作。
  • Bolt可以完成簡單的流的轉換,而完成復雜的流的轉換通常需要多個步驟,因此需要多個Bolt。
  • Bolt可以發出超過一個的流。

拓撲(Topology)

拓撲(Topology)是Storm中運行的一個實時應用程序,因為各個組件間的消息流動而形成邏輯上的拓撲結構。
把實時應用程序的運行邏輯打成jar包后提交到Storm的拓撲(Topology)。Storm的拓撲類似于MapReduce的作業(Job)。其主要的區別是,MapReduce的作業最終會完成,而一個拓撲永遠都在運行直到它被殺死。一個拓撲是一個圖的Spout和Bolt的連接流分組。

Storm核心組件

storm02.png

nimbus是整個集群的控管核心,負責topology的提交、運行狀態監控、任務重新分配等工作。
zk就是一個管理者,監控者。

總體描述:nimbus下命令(分配任務),zk監督執行(心跳監控,worker、supurvisor的心跳都歸它管),supervisor領旨(下載代碼),招募人馬(創建worker和線程等),worker、executor就給我干活!task就是具體要干的活。

主控節點與工作節點

Storm集群中有兩類節點:主控節點(Master Node)和工作節點(Worker Node)。其中,主控節點只有一個,而工作節點可以有多個。

Nimbus進程與Supervisor進程

主控節點運行一個稱為Nimbus的守護進程類似于Hadoop的JobTracker。Nimbus負責在集群中分發代碼,對節點分配任務,并監視主機故障。
每個工作節點運行一個稱為Supervisor的守護進程。Supervisor監聽其主機上已經分配的主機的作業,啟動和停止Nimbus已經分配的工作進程。

流分組(Stream grouping)

流分組,是拓撲定義中的一部分,為每個Bolt指定應該接收哪個流作為輸入。流分組定義了流/元組如何在Bolt的任務之間進行分發。Storm內置了8種流分組方式。

工作進程(Worker)

Worker是Spout/Bolt中運行具體處理邏輯的進程。一個worker就是一個進程,進程里面包含一個或多個線程。

執行器(Executor)

一個線程就是一個executor,一個線程會處理一個或多個任務。

任務(Task)

一個任務就是一個task。

實時計算常用架構圖

```mermaid

graph LR

后臺系統(圓角) -->Flume集群(圓角)-->Kafka集群(圓角)-->Storm集群(圓角)-->Redis集群(圓角)

```

  • Flume獲取數據。
  • Kafka臨時保存數據。
  • Strom計算數據。
  • Redis是個內存數據庫,用來保存數據。
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 目錄 場景假設 調優步驟和方法 Storm 的部分特性 Storm 并行度 Storm 消息機制 Storm UI...
    mtide閱讀 17,186評論 30 60
  • 一、Storm是什么 Storm是一個免費并開源的分布式實時計算系統。利用Storm可以很容易做到可靠地處理無限的...
    Graceleeman閱讀 3,050評論 0 6
  • Date: Nov 17-24, 2017 1. 目的 積累Storm為主的流式大數據處理平臺對實時數據處理的相關...
    一只很努力爬樹的貓閱讀 2,196評論 0 4
  • Zookeeper用于集群主備切換。 YARN讓集群具備更好的擴展性。 Spark沒有存儲能力。 Spark的Ma...
    Yobhel閱讀 7,349評論 0 34
  • 1.show databases; (展示數據庫,注意分號和s) 2.use mysql;(使用某個數據庫) 3....
    AlwaysBlue閱讀 279評論 0 0