Storm 環境部署及簡單使用

===> 什麼是 Storm?python

        --> Twitter將Storm正式開源了,這是一個分佈式的、容錯的實時計算系統,遵循 Eclipse Public License 1.0。數據庫

        --> Storm是由BackType開發的實時處理系統,BackType如今已在Twitter麾下。apache

        --> Storm爲分佈式實時計算提供了一組通用原語,可被用於「流處理」之中,實時處理消息並更新數據庫。編程

            Storm也可被用於「連續計算」(continuous computation),對數據流作連續查詢,在計算時就將結果以流的形式輸出給用vim

            戶。它還可被用於「分佈式RPC」,以並行的方式運行昂貴的運算。 緩存

        --> Storm的主工程師Nathan Marz表示:Storm能夠方便地在一個計算機集羣中編寫與擴展複雜的實時計算,bash

               Storm用於實時處理,就比如 Hadoop 用於批處理。網絡

               Storm保證每一個消息都會獲得處理,並且它很快——在一個小集羣中,每秒能夠處理數以百萬計的消息。更棒的是你可使用數據結構

                任意編程語言來作開發app

===> Storm 支持離線計算和流式計算

        --> 離線計算:批量獲取數據,批量傳輸數據,週期性比量計算數據,數據展現(Sqoop-->HDFS--> MR ---> HDFS)

            --- 表明技術:

                    -- Sqoop 批量導入數據

                    -- HDFS 批量存儲數據

                    -- MapReduce 批量計算

                    -- Hive

        --> 流式計算:數據實時產生,數據實時傳輸,數據實時計算,實時展現(Flume ---> Kafka ---> 流式計算 ---> Redis)

            --- 表明技術:

                    -- Flume 實時獲取數據

                    -- Kafka/metaq 實時數據存儲

                    -- Storm/JStorm 實時數據計算

                    -- Redis 實時結果緩存,持久化存儲(MySQL)

===> Storm 與 Hadoop 的區別

        --> 

Storm Hadoop
用於實時計算 用於離線計算
處理的數據保存在內存中,連連不斷 處理的數據保存在文件系統中
數據經過網絡傳輸進來 從 HDFS 平臺獲取數據


===> Storm 體系結構

image.png


===> Storm 運行流程

image.png

        --> Storm 結構中各部分職責:

            --- Nimbus: 

                    負責資源分配和任務調度

            --- Supervisor

            負責接受 Nimbus 分配的任務,啓動和中止屬於本身管理的 worker 進程

                  (*)可經過配置文件設置當前 supervisor 上啓動幾個 worker 進程

            --- Worker:

                    運行具體處理 組件邏輯 ,任務類型有兩種:

                    -- Spout任務

                    -- Bolt 任務

            --- Executor: 

                        Storm 0.8 以後, Executor 爲 Worker 進程中的具體的物理線程,同一個 Spout/Bolt的 Task可能會共享一個物理線程,一個 Executor 中只能運行隸屬於同一個 Spout/Bolt 的 Task

            --- Task: 

                    worker 中每個 spout/bolt 的線程稱爲一個 task, 在 storm0.8 以後, task 再也不與物理線程對應,不一樣 spout/bolt 的 task 可能會共享一個物理線程,該 線程稱爲 executor


===> Strom 僞分佈式安裝部署

        --> 安裝前須要部署 Zookeeper 環境,參見:https://blog.51cto.com/songqinglong/2062909 

        --> 解壓:

        tar zxf apache-storm-1.0.3.tar.gz -C /app


        --> 配置環境變量

        vim  ~/.bash_profile
        # storm_home
        STORM_HOME=/app/apache-storm-1.0.3
        export STORM_HOME
        PATH=$STORM_HOME/bin:$PATH
        export PATH


        --> 修改配置文件

       vim $STORM_HOME/conf/storm.yaml 
         # 此處指定 zookeeper 節點           
         storm.zookeeper.servers:
                - "192.168.10.210"
         # 
         # nimbus.seeds: ["host1", "host2", "host3"]
         # 此處指定 nimbus 節點
         nimbus.seeds: ["192.168.10.210"]
         # 每一個從節點上的worker個數
         supervisor.slots:ports:
            - 6700
            - 6701
            - 6702
            - 6703
         # 
         # 開啓任務 Debug 功能
         "topology.eventlogger.executors": 1
         # 任務上傳後,保存的目錄
         storm.local.dir: "/data/storm_data"


        --> 啓動Storm

            --- 僞分部模式:

      storm nimbus &            
      storm ui &      # 能夠經過 http 的方式查看:http://ip:8080
      storm supervisor &
      storm logviewer &

            --- 徹底分部式:

                    -- 主節點

        storm nimbus &
        storm ui &
        storm logviewer &

                    -- 從節點

        storm supervisor    
        storm logviewer

        --> 查看:  http://ip:8080

===> Strom 徹底分佈式安裝部署

        --> 安裝方式與僞分佈式基本相同,只須要將安裝目錄copy 到其它節點上便可

===> Storm HA

        --> 只需修改storm.yaml 文件中的 nimbus.seeds: ["bigdata1"] ,將主機加入到此列表中,並在主機上啓動 nimbus 便可


===> Storm 經常使用命令 

        --> 提交任務

            --- 格式:storm jar    ***.jar   [Toplogy名字:類名字]   別名

            --- 示例:

      storm jar storm-starter-topologies-1.0.3.jar org.apache.storm.starter.WordCountTopology MyWordCountExample


        --> 殺死任務

            --- 格式:storm  kill  任務名稱   -w  10    注: -w  等待秒數

            --- 示例:

      storm kill MyWordCountExample  -w  10

        --> 停用任務

            --- 格式:storm deactivte 任務名稱

            --- 示例:

      storm deactivte  MyWordCountExample

            --- 格式:storm activate 任務名稱

            --- 示例:

      storm activate MyWordCountExample


        --> 從新部署任務

            --- 格式:storm rebalance 任務名稱

            --- 示例:

      storm rebalance MyWordCountExample

            --- (*) 當集羣有所變更,此命令將會信用拓撲,而後在相應的超時時間內重啓拓撲,從新分配任務

===> Storm 中 WordCount 程序流程分析

        --> 經過查看 Storm  UI 上每一個組件的events 連接,能夠查看 Storm 的每一個組件(spout/blot)發送的消息

        --> 須要開啓 Debug 功能,在配置文件中添加下列參數並從新啓動 storm 

            "topology.eventlogger.executors": 1


        -->

 image.png

===> Storm 編程模型

image.png


        --> Topology: Storm 中運行的一個實時應用程序的名稱

        --> Spout: 在一個topology 中獲取源數據流,而後轉換爲 topology 的內部源數據

        --> Bolt: 接受數據而後執行處理,用戶能夠在其中執行本身想要的操做

        --> Tuple: 一次消息傳遞的基本單元

        --> Stream: 表示數據的流向

        --> StreamGroup: 數據分組策略

            --- Shuffle Grouping隨機分組,儘可能均勻的分佈到下游 Bolt 中

            --- Fields Grouping: 按字段分組,按數據中 field 值進行分組, 相同 field 值的 Tuple 被髮送到相同的Task

            --- All grouping: 廣播

            --- Global grouping: 全局分組, Tuple 被分配到一個 Bolt 中的同一個Task 中,實現事物性的 Topology

            ---  None grouping: 不分組

            --- Direct grouping: 直接分組,指定分組


===> Storm 集羣在 Zookeeper 中保存的數據結構

image.png

===> Strom 任務提交


image.png

相關文章
相關標籤/搜索