天天看點

Storm 環境部署及簡單使用

===> 什麼是 Storm?

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

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

        --> Storm為分布式實時計算提供了一組通用原語,可被用于“流處理”之中,實時處理消息并更新資料庫。

            Storm也可被用于“連續計算”(continuous computation),對資料流做連續查詢,在計算時就将結果以流的形式輸出給用

            戶。它還可被用于“分布式RPC”,以并行的方式運作昂貴的運算。 

        --> Storm的主工程師Nathan Marz表示:Storm可以友善地在一個計算機叢集中編寫與擴充複雜的實時計算,

               Storm保證每個消息都會得到處理,而且它很快——在一個小叢集中,每秒可以處理數以百萬計的消息。更棒的是你可以使用

                任意程式設計語言來做開發

===> 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 體系結構

===> Storm 運作流程

        --> 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 環境,參見:http://blog.51cto.com/songqinglong/2062909 

        --> 解壓:

<code>        </code><code>tar zxf apache</code><code>-</code><code>storm</code><code>-</code><code>1.0</code><code>.</code><code>3.tar</code><code>.gz </code><code>-</code><code>C </code><code>/</code><code>app</code>

        --&gt; 配置環境變量

<code>        </code><code>vim  ~</code><code>/</code><code>.bash_profile</code>

<code>        </code><code># storm_home</code>

<code>        </code><code>STORM_HOME</code><code>=</code><code>/</code><code>app</code><code>/</code><code>apache</code><code>-</code><code>storm</code><code>-</code><code>1.0</code><code>.</code><code>3</code>

<code>        </code><code>export STORM_HOME</code>

<code>        </code><code>PATH</code><code>=</code><code>$STORM_HOME</code><code>/</code><code>bin</code><code>:$PATH</code>

<code>        </code><code>export PATH</code>

        --&gt; 修改配置檔案

<code>       </code><code>vim $STORM_HOME</code><code>/</code><code>conf</code><code>/</code><code>storm.yaml </code>

<code>         </code><code># 此處指定 zookeeper 節點           </code>

<code>         </code><code>storm.zookeeper.servers:</code>

<code>                </code><code>-</code> <code>"192.168.10.210"</code>

<code>         </code><code># </code>

<code>         </code><code># nimbus.seeds: ["host1", "host2", "host3"]</code>

<code>         </code><code># 此處指定 nimbus 節點</code>

<code>         </code><code>nimbus.seeds: [</code><code>"192.168.10.210"</code><code>]</code>

<code>         </code><code># 每個從節點上的worker個數</code>

<code>         </code><code>supervisor.slots:ports:</code>

<code>            </code><code>-</code> <code>6700</code>

<code>            </code><code>-</code> <code>6701</code>

<code>            </code><code>-</code> <code>6702</code>

<code>            </code><code>-</code> <code>6703</code>

<code>         </code><code># 開啟任務 Debug 功能</code>

<code>         </code><code>"topology.eventlogger.executors"</code><code>: </code><code>1</code>

<code>         </code><code># 任務上傳後,儲存的目錄</code>

<code>         </code><code>storm.local.</code><code>dir</code><code>: </code><code>"/data/storm_data"</code>

        --&gt; 啟動Storm

            --- 僞分部模式:

<code>      </code><code>storm nimbus &amp;            </code>

<code>      </code><code>storm ui &amp;      </code><code># 可以通過 http 的方式檢視:http://ip:8080</code>

<code>      </code><code>storm supervisor &amp;</code>

<code>      </code><code>storm logviewer &amp;</code>

            --- 完全分部式:

                    -- 主節點

<code>        </code><code>storm nimbus &amp;</code>

<code>        </code><code>storm ui &amp;</code>

<code>        </code><code>storm logviewer &amp;</code>

                    -- 從節點

<code>        </code><code>storm supervisor    </code>

<code>        </code><code>storm logviewer</code>

        --&gt; 檢視:  http://ip:8080

===&gt; Strom 完全分布式安裝部署

        --&gt; 安裝方式與僞分布式基本相同,隻需要将安裝目錄copy 到其它節點上即可

===&gt; Storm HA

        --&gt; 隻需修改storm.yaml 檔案中的 nimbus.seeds: ["bigdata1"] ,将主機加入到此清單中,并在主機上啟動 nimbus 即可

===&gt; Storm 常用指令 

        --&gt; 送出任務

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

            --- 示例:

<code>      </code><code>storm jar storm</code><code>-</code><code>starter</code><code>-</code><code>topologies</code><code>-</code><code>1.0</code><code>.</code><code>3.jar</code> <code>org.apache.storm.starter.WordCountTopology MyWordCountExample</code>

        --&gt; 殺死任務

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

<code>      </code><code>storm kill MyWordCountExample  </code><code>-</code><code>w  </code><code>10</code>

        --&gt; 停用任務

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

<code>      </code><code>storm deactivte  MyWordCountExample</code>

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

<code>      </code><code>storm activate MyWordCountExample</code>

        --&gt; 重新部署任務

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

<code>      </code><code>storm rebalance MyWordCountExample</code>

            --- (*) 當叢集有所變動,此指令将會信用拓撲,然後在相應的逾時時間内重新開機拓撲,重新配置設定任務

===&gt; Storm 中 WordCount 程式流程分析

        --&gt; 通過檢視 Storm  UI 上每個元件的events 連結,可以檢視 Storm 的每個元件(spout/blot)發送的消息

        --&gt; 需要開啟 Debug 功能,在配置檔案中添加下列參數并重新啟動 storm 

<code>            </code><code>"topology.eventlogger.executors"</code><code>: </code><code>1</code>

        --&gt;

===&gt; Storm 程式設計模型

        --&gt; Topology: Storm 中運作的一個實時應用程式的名稱

        --&gt; Spout: 在一個topology 中擷取源資料流,然後轉換為 topology 的内部源資料

        --&gt; Bolt: 接受資料然後執行處理,使用者可以在其中執行自己想要的操作

        --&gt; Tuple: 一次消息傳遞的基本單元