菜鳥成長之Storm學習總結
有一個星期沒有更新啦,說明是好事,至少開始做專案了,把所有的知識點放在專案上,果然會讓人成長的更快;專案的隱私度比較高就不公開了~
今天總結一下新的內容,學習都有一個過程:從菜鳥到鳥人到大神;所以fighting就對了!
1.離線計算是什麼?
離線計算:批量獲取資料,批量傳輸資料,週期性批量計算資料,資料展示
代表技術:sqoop批量匯入資料,HDFS批量儲存資料,MapReduce批量計算資料,Hive批量計算資料
2.流式計算是什麼??
流式計算:資料實時產生,資料實時傳輸,資料實時計算,實時展示
代表技術:Flume實時獲取資料,kafka/metaQ實時資料儲存,Storm/JStorm實時資料計算,Redis實時結果快取,持久化儲存(mysql)
Storm是什麼??
Flume實時採集,低延遲
kafka訊息佇列,低延遲
storm實時計算,低延遲
Redis實時儲存,低延遲
Storm用來實時處理資料,特點:低延遲,高可用,分散式,可擴充套件,資料不丟失
Storm與Hadoop的區別?
1.Storm用來實時計算,Hadoop用來離線計算
2.Storm處理的資料儲存在記憶體中,源源不斷;Hadoop處理的資料儲存在檔案系統中,一批一批
3.Storm的資料通過網站傳輸進來;Hadoop的資料儲存在磁碟中
nimbus:負責資源分配和任務排程
Supervisor:負責接受nimbus分配的任務,啟動和停止屬於自己管理的worker程序
通過配置檔案設定當前supervisor上啟動多少個Worker
Worker:執行具體處理元件邏輯的程序;worker執行的任務型別只有兩種,一種是Spout任務,一種是Bolt任務
Task:worker中每一個spout/bolt的執行緒稱為一個task.不同的spout/bolt的task可能會共享一個物理執行緒,該執行緒稱為executor
Storm程式設計:
1.Topology:Storm中執行的一個實時應用程式的名稱(拓撲)
2.spout:在一個topology中獲取源資料流的元件
通常情況下spout會從外部資料來源中讀取資料,然後轉換為topology內部的源資料
3.Bolt:接受資料然後執行處理的元件,使用者可以在其中執行自己想要的操作
4.tuple:一次資訊傳遞的基本單元,理解為一組訊息就是一個tuple
5.stream:表示資料的流向
流式計算一般架構圖:
網站系統 ← Flume叢集 → kafka叢集 → storm叢集 → Redis叢集
1.其中flume用來獲取資料
2.kafka用來臨時儲存資料
3.storm用來計算資料
4.Redis是個記憶體資料庫,用來儲存資料
#指定storm使用的zk叢集
storm.zookeeper.servers:
- "minimaster"
- "miniSlave1"
- "miniSlave2"
#指定storm叢集中的nimbus節點所在的伺服器
nimbus.host: "minimaster"
#指定nimbus啟動JVM最大可用記憶體大小
nimbus.childopts: "-Xmx1024m"
#指定supervisor啟動JVM最大可用記憶體大小
supervisor.childopts: "-Xmx1024m"
#指定supervisor節點上,每個worker啟動JVM最大可用記憶體大小
worker.childopts: "-Xmx768m"
#指定ui啟動JVM最大可用記憶體大小,ui服務一般與nimbus同在一個節點上。
ui.childopts: "-Xmx768m"
#指定supervisor節點上,啟動worker時對應的埠號,每個埠對應槽,每個槽位對應一個worker
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
3.分發安裝包
scp -r /usr/local/storm miniSlave1:/usr/local
scp -r /usr/local/storm miniSlave2:/usr/local
4.啟動叢集
1.在nimbus.host所屬的機器上啟動nimbus服務
cd /usr/local
nohup ./storm nimbus &
2.在nimbus.host所屬的機器上啟動ui服務
nohup ./storm ui &
3.在其他各點選上啟動supervisor服務
nohup ./storm supervisor &
提交任務格式:
l storm jar 【jar路徑】 【拓撲包名.拓撲類名】 【拓撲名稱】
bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.6.jar
Storm 訊息容錯機制:
對於每個Spout Tuple儲存一個ack-val的校驗值,它的初始值為0,然後每發射一個tuple或者ack一個tuple,tuple的id都要跟這個校驗值異或一下,並且把得到的值更新為ack-val的新值
ack val 表示了整棵樹的狀態,無論這棵樹多大,只需要這個固定大小的數字就可以跟蹤整棵樹;當訊息被建立和被應答的時候都會有相同的訊息id傳送過來做異或;每當acker發現一棵樹的ack val 值為0的時候,它就知道這棵樹已經被完全處理了
總體介紹:
1.在storm中,可靠的資訊處理機制是從spout開始的
2.一個提供了可靠的處理機制的spout需要記錄他發射出去的tuple,當下遊bolt處理tuple或者子tuple失敗時spout能夠重新發射
3.Storm通過呼叫Spout的nextTuple()傳送一個tuple;為實現可靠的訊息處理,首先要給每個發出的tuple帶上唯一的ID,並且將ID作為引數傳遞給SpoutOutputCollector的emit()
給每個tuple指定ID告訴storm系統,無論處理成功還是失敗,spout都要接收tuple樹上所有節點返回的通知;如果處理成功,spout的ack()方法將會對編號是msgId的訊息應答確認;如果處理失敗或者超時,會呼叫fail()方法