1. 程式人生 > >Storm入門,看這篇就夠了

Storm入門,看這篇就夠了

flink jps 處理 不一致 index 應用 實現 4.5 擴展性

部分一:Srorm 簡介

1.1 Storm是實時的數據流,Hadoop是批量離線數據

起源背景

  • Twitter 開源的一個類似於Hadoop的實時數據處理框架
  • Storm是由Nathan Marz 在BackType公司【做社交數據分析,數據量大】工作中實現的,這家公司後來被Twitter收購。

Ps:·Hadoop分布式存儲和分布式計算兩個難題全部解決了。但是缺點就是不能實時處理數據,Storm的作者就像寫一個這樣實時數據處理場景的框架出來

1.2 Storm應用場景【實時處理數據】
  • 推薦系統:實時推薦,根據下單或加入購物車等操作
  • 網站統計:實時銷量,流量統計
  • 監控預警系統,金融系統
1.3Storm特性
  • 擴展性強,當計算能力不足時,可以進行橫向擴展機器
  • 保證數據不丟失,且數據可以消費一次或多次
  • 容錯性好,消息處理過程出現異常,會進行重試
  • 語言無關性:storm程序可以使用各種語言進行編寫

部分2 Storm原理

2.1拓展:大數據框架都有哪些架構類型?

主從架構:簡單高效,單主節點存在單點問題
HDFS\YARN\Storm\Hbase\Spark\Flink

對稱架構:復雜,效率較低,無單點問題,更加可靠
Zookeeper\Kafka [會進行主節點的選舉]

Storm的主從架構

  • Nimbus 主節點
  • Sipervisor 從節點

Nimbus—zookeeper--supervisor

Storm組件:Nimbus

  • 接收客戶端的topo代碼,拆分成多個task,將task信息存入zk,並將task分配給Supervisor,將映射關系存入ZK,並進行故障檢測

  • 類比:部門經理將需求拆分為 多個任務(每個任務有多個模塊) 將這些任務寫入項目文檔中去,,並將每個任務與每一程序員進行對應

Storm組件:Supervisor

  • 從Nimbus目錄讀取代碼,從zk上讀取Nimbus分配的task
  • 啟動工作進程Worker
  • 監控每一個工作進程Worker

Storm 組件:Worker

  • 從zk上讀取分配的task,並計算出task需要給哪些task發信息
  • 啟動一個或多個Execucor線程執行任務Task

Storm組件:Zookeeper

  • Nimbus與Supervisor進行通信(分配任務與心跳)
  • Supervisor與Worker進行通信(分配任務和心跳)
  • Nimbus高可用(HA機制)

動手實踐

  • Zookeeper簡介與集群配置【Storm的各個組件間是通過這個組件進行通信】
  • Zookeeper 的核心,單機和集群的配置方法
  • Storm的單機和集群環境的搭建

部分3.Zookeeper簡介與集群配置【Storm的各個組件間是通過這個組件進行通信】

簡介:
Zookeeper是一個開源的分布式協調服務的框架,使各個機器進行之間進行通信

3.1核心功能:
  • 文件系統
  • 通知機制

文件系統:
類似於linux的文件系統目錄結構,從根目錄(/)開始

1.每一個目錄都是一個znode節點

2.每一個znode節點可直接存儲數據

3.類型:持久化,持久化順序,臨時,臨時順序

通知機制:

  • 客戶端監聽關心的znode節點
  • Znode節點有變化(數據改變、刪除、子目錄添加刪除),通知客戶端處理
3.2 zookeeper的安裝

下載:直接去官網:zookeeper.apache.org或CDH5進行下載
/opt/soft [下載位置]
/opt/module 【解壓位置】
下載 .tar.gz
解壓 tar –zxvf
tar.gz –C /apps

解壓後的主要目錄結構:
bin:包含

  • zkCli.sh 【命令行客戶端,可以去連接到這個文件系統,類似於hadoop fs】
  • zkCleanup.sh [zk是一個小型文件系統,用於清理數據信息,保證各個節點的數據一致]
  • zkEnv.sh [環境變量的一些東西]
  • zkServer.sh 【zk服務器的啟動停止等操作】

conf:包含

  • log4j.properties 日誌輸出級別
  • zoo_sample.cfg mv zoo_sample.cfg zoo.cfg
  • [tickTime:客戶端與zk服務器的心跳時間,各個znode節點也要保持心跳]
  • InitLimit 啟動集群時候,選舉Nimbus節點的最大時間 tickTime* InitLimit
  • SyncLimit 集群中各個znode節點進行數據同步時候,保持數據一致性,進行數據同步的最大時間,超過這個時間,數據會同步失敗
  • dataDir zookeeper是一個小型的文件系統,將數據存放在哪裏配置
  • clientPort 客戶端訪問zk服務器的端口號2181去連接到這個服務器

在解壓後的目錄新建一個data的目錄用於存放zk的數據
將$ZK_HOME/data 替換conf/zoo.cfg 中的dataDir

啟動bin/zkServer.sh start
Jps
Or
bin/zkServer.sh status

  • standalone狀態
3.3 zk的命令行客戶端

去連接zk服務器
bin/zkCli.sh
這樣會連接本地的zk服務器‘
裏面的操作類似於linux的操作
輸入ls
查看根目錄有什麽 ls /
查看目錄下面的數據 get /
創建目錄 create /test 111
查看數據 get /test 得到111
修改數據 set /test 222
再次查看: get /test 得到222
刪除數據rmr /test
再次查看 ls / 無test目錄

3.4 zookeeper的集群搭建(推薦1,3,5這樣的節點數,在進行節點選舉的時候,保證能選舉一個主節點出來)

啟動三個機器
配置第一臺
步驟一:在單機的基礎(解壓後修改dataDir的目錄)上,添加配置項
server.

server.1=192.168.1.1:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3:2888:3888
步驟二:

Scp –r zookeeper-3.4.5/ [email protected]:/opt/module
即可
在這之前可以配置ssh的免密碼登錄

拓展:
1.HOSTNAME主機名:vim /etc/sysconfig/network

2.配置ip與主機名之間的映射關系
Vim /etc/hosts
192.168.1.1 hadoop001
192.168.1.2 hadoop002
192.168.1.3 hadoop003

啟動zk集群
在每一臺上面都要進行啟動,bin/zkServer.sh start
Bin/zkServer.sh status 狀態為:leader 主節點
Bin/zkServer.sh status 狀態為:follower 從節點

ZKcli從1-2-3
192.168.1.1可以使用bin/zkCli.sh -server 192.168.1.2:2181
進入之後,connect 192.168.1.3:2181

部分4 Storm的安裝配置

單機環境的安裝配置
下載啊storm.apache.org 或CDH5 1.1.0 ,1.2.1等版本
解壓 tar –zxvf storm.tar.gz –C /opt/module

Storm的啟動是需要依賴於zookeeper服務的
在這之前,先使用單個zk服務(單節點)

Storm解壓後的目錄
bin 包含

  • storm 核心腳本,可以通過這個腳本進行啟動
  • Storm.py 是一個python腳本

Conf 包含

  • Storm.yaml最核心的配置文件
  • storm.zookeeper.servers
  • nimbus.seeds
  • drpc.servers
    暫時不做任何修改

啟動主節點
bin/storm nimbus &
啟動從節點
bin/storm supervisor &
啟動UI
bin/storm ui &
啟動日誌
bin/storm logviewer &

ps:nohup java –jar hh.jar &
nohup + & 客戶端和虛擬機是不需要保持連接的,即當前輸入的命令界面是可以進行關閉的

Storm性能調優
為了解決數據不一致的問題,我們先把zookeeper的data目錄下先刪除,保持一致
每個機器上執行
rm –rf $ZK_HOME/data
mkdir $ZK_HOME/data
vim $ZK_HOME/data/myid 寫入相應的

每個機器上啟動zookeeper
bin/zkServer.sh start

開始配置storm的單機環境為集群環境配置

Vim #STORM_HOME/conf/storm.yaml
storm.zookeeper.servers:

  • “192.168.1.1”
  • “192.168.1.2”
  • “192.168.1.3”
    Nimbus.seeds: [“192.168.1.1”,”192.168.1.2”]

就簡單做這樣的操作就 可以了
接著 拷貝storm文件到其余的機器上面去

就可以啟動storm了

啟動主節點【第一臺機器上】
Nohup bin/storm nimbus &
啟動從節點【第二臺機器上】
Nohup bin/storm supervisor &
啟動UI
可以在第一臺 也可以在第二臺上面
nohup bin/storm ui
WebUI查看:
192.168.1.2:8080/index.html

這裏可以做節點故障轉義的實驗

Storm入門,看這篇就夠了