大數據開發之storm基礎知識點

storm

     一、概述

           離線計算

                 批量獲取數據、批量傳輸數據、週期性批量計算數據、數據展示

                 代表技術

                      Sqoop批量導入數據、HDFS批量存儲數據、MapReduce批量計算數據、Hive批量計算數據

           流式計算

                 數據實時產生、數據實時傳輸、數據實時計算、實時展示

                 代表技術

                      Flume實時獲取數據、Kafka實時數據存儲、Storm/JStorm實時數據計算、Redis實時結果緩存、持久化存儲(mysql)

                 storm

                      Storm是一個分佈式計算框架,主要使用Clojure與Java語言編寫

                      Storm是一個免費開源的分佈式實時計算系統。Storm能輕鬆可靠地處理無界的數據流,就像Hadoop對數據進行批處理

           Storm能用到很多場景中,包括:實時分析、在線機器學習、連續計算等

                 1)推薦系統:實時推薦,根據下單或加入購物車推薦相關商品

                 2)金融系統:實時分析股票信息數據

                 3)預警系統:根據實時採集數據,判斷是否到了預警閾值

                 4)網站統計:實時銷量、流量統計,如淘寶雙11效果圖

二、編程模型

           1、元組(Tuple)

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

           2、流(Stream)

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

           3、水龍頭(Spout)

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

      Spout可以是可靠的,也可以是不可靠的。如果Storm處理元組失敗,可靠的Spout能夠重新發射,而不可靠的Spout就儘快忘記發出的元組。

      Spout可以發出超過一個流。

      Spout的主要方法是nextTuple()。NextTuple()會發出一個新的Tuple到拓撲,如果沒有新的元組發出,則簡單返回。

      Spout的其他方法是ack()和fail()。當Storm檢測到一個元組從Spout發出時,ack()和fail()會被調用,要麼成功完成通過拓撲,要麼未能完成。Ack()和fail()僅被可靠的Spout調用。

      IRichSpout是Spout必須實現的接口

 

           4、轉接頭(Bolt)

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

Bolt是一個被動的角色,七接口中有一個execute()方法,在接收到消息後會調用此方法,用戶可以在其中執行自己希望的操作。

Bolt可以完成簡單的流的轉換,而完成複雜的流的轉換通常需要多個步驟,因此需要多個Bolt。

Bolt可以發出超過一個的流

 

           5、拓撲(Topology)

                 拓撲(Topology)是Storm中運行的一個實時應用程序,因爲各個組件間的消息流動而形成邏輯上的拓撲結構。

把實時應用程序的運行邏輯打成jar包後提交到Storm的拓撲(Topology)。Storm的拓撲類似於MapReduce的作業(Job)。其主要的區別是,MapReduce的作業最終會完成,而一個拓撲永遠都在運行直到它被殺死。一個拓撲是一個圖的Spout和Bolt的連接流分組

 

三、核心組件

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

zk就是一個管理者,監控者。

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

 

                 1、主控節點與工作節點

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

                 2、Nimbus進程與Supervisor進程

                      主控節點運行一個稱爲Nimbus的守護進程類似於Hadoop的JobTracker。Nimbus負責在集羣中分發代碼,對節點分配任務,並監視主機故障。

每個工作節點運行一個稱爲Supervisor的守護進程。Supervisor監聽其主機上已經分配的主機的作業,啓動和停止Nimbus已經分配的工作進程

 

                 3、流分組(Stream grouping)

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

Storm內置了8種流分組方式

 

                 4、工作進程(Worker)

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

                 5、執行器(Executor)

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

                 6、任務(Task)

                      一個任務就是一個task

           實時流計算常見架構圖

                 1)Flume獲取數據。

2)Kafka臨時保存數據。

3)Strom計算數據。

4)Redis是個內存數據庫,用來保存數據。

四、集羣搭建

      環境準備

           下載jar包http://storm.apache.org/

           虛擬機準備

           安裝jdk

           安裝zookeeper

      配置

1)拷貝jar包到hadoop102的/opt/software目錄下

2)解壓jar包到/opt/module目錄下

[root@hlh001 software]$ tar -zxvf apache-storm-1.1.0.tar.gz -C /opt/module/

3)修改解壓後的apache-storm-1.1.0.tar.gz文件名稱爲storm

[root@hlh001 module]$ mv apache-storm-1.1.0/ storm

4)在/opt/module/storm/目錄下創建data文件夾

      [root@hlh001 storm]$ mkdir data

5)修改配置文件storm.yaml

# 設置Zookeeper的主機名稱

storm.zookeeper.servers:

     - "hlh001"

     - "hlh002"

     - "hlh003"

 

# 設置主節點的主機名稱

nimbus.seeds: ["hlh001"]

 

# 設置Storm的數據存儲路徑

storm.local.dir: "/opt/module/storm/data"

 

# 設置Worker的端口號

supervisor.slots.ports:

    - 6700

    - 6701

    - 6702

    - 6703

 

           6)配置環境變量

                 #STORM_HOME

export STORM_HOME=/opt/module/storm

export PATH=$PATH:$STORM_HOME/bin

           7)啓動集羣

                 (1)後臺啓動nimbus 123臺分別啓動

      bin/storm nimbus &

(2)後臺啓動supervisor 123臺分別啓動

      bin/storm supervisor &

(3)啓動Storm ui

bin/storm ui

           8)通過瀏覽器查看集羣狀態

                 http://hlh001:8080/index.html

五、日誌信息查看

      1)查看nimbus的日誌信息

在nimbus的服務器上

cd /opt/module/storm/logs

tail -100f /opt/module/storm/logs/nimbus.log

      2)查看ui運行日誌信息

在ui的服務器上,一般和nimbus一個服務器

cd /opt/module/storm/logs

tail -100f /opt/module/storm/logs/ui.log

      3)查看supervisor運行日誌信息

在supervisor服務上

cd /opt/module/storm/logs

tail -100f /opt/module/storm/logs/supervisor.log

      4)查看supervisor上worker運行日誌信息

在supervisor服務上

cd /opt/module/storm/logs

tail -100f /opt/module/storm/logs/worker-6702.log

      5)logviewer,可以在web頁面點擊相應的端口號即可查看日誌http://hlh001:8000

分別在supervisor節點上執行:

[root@hlh001 storm]$ bin/storm logviewer &

[root@hlh001 storm]$ bin/storm logviewer &

[root@hlh001 storm]$ bin/storm logviewer &

六、命令行操作

      1)nimbus:啓動nimbus守護進程

      storm nimbus

      2)supervisor:啓動supervisor守護進程

      storm supervisor

      3)ui:啓動UI守護進程。

      storm ui

      4)list:列出正在運行的拓撲及其狀態

      storm list

      5)logviewer:Logviewer提供一個web接口查看Storm日誌文件。

      storm logviewer

      6)jar:

storm jar 【jar路徑】 【拓撲包名.拓撲類名】 【拓撲名稱】

      7)kill:殺死名爲Topology-name的拓撲

      storm kill topology-name [-w wait-time-secs]

      -w:等待多久後殺死拓撲

      8)active:激活指定的拓撲spout。

storm activate topology-name

      9)deactivate:禁用指定的拓撲Spout。

      storm deactivate topology-name

      10)help:打印一條幫助消息或者可用命令的列表。

      storm help

      storm help <command>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章