您好,登錄后才能下訂單哦!
===> 什么是 Storm?
--> Twitter將Storm正式開源了,這是一個分布式的、容錯的實時計算系統,遵循 Eclipse Public License 1.0。
--> Storm是由BackType開發的實時處理系統,BackType現在已在Twitter麾下。
--> Storm為分布式實時計算提供了一組通用原語,可被用于“流處理”之中,實時處理消息并更新數據庫。
Storm也可被用于“連續計算”(continuous computation),對數據流做連續查詢,在計算時就將結果以流的形式輸出給用
戶。它還可被用于“分布式RPC”,以并行的方式運行昂貴的運算。
--> Storm的主工程師Nathan Marz表示:Storm可以方便地在一個計算機集群中編寫與擴展復雜的實時計算,
Storm用于實時處理,就好比 Hadoop 用于批處理。
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 環境,參見: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
-->
===> Storm 編程模型
--> Topology: Storm 中運行的一個實時應用程序的名稱
--> Spout: 在一個topology 中獲取源數據流,然后轉換為 topology 的內部源數據
--> Bolt: 接受數據然后執行處理,用戶可以在其中執行自己想要的操作
--> Tuple: 一次消息傳遞的基本單元