Storm 準備(一)

hadoop解決了分佈式存儲與計算問題,但是大部分都是進行的離線計算時間週期比較長。企業裏急切的希望解決實時的進行大數據分析storm在這樣的環境下誕生了(PPT資料

如何搭建一個企業的實時數據平臺:

1.收集數據  flume工具(分級,安全,壓縮)
2.彙總 flume    消息隊列KAFKA(基於硬盤但是速度很快) hadoop集羣
3.實時處理引擎
4.結果存儲 mysql  mongodb  Redis HBase
5.應用

流式處理,KAFKA消息隊列來從硬盤級來解決大數據的實時處理,基於硬盤的爲啥數據處理還是那麼快:分佈式的消息隊列partition分區是隊列形式從隊列頭部取數據打打減少了尋址過程。


kafka在storm中用來收集彙總數據:zookeeper在kafak中的作用如下圖:(協調kafka)



kafka基本組建:

tipic話題:是指特定類型的消息流。

producer 生產者:能夠發送消息到話題的任何對象

Broker代理:或者Kafka集羣,保存已發佈的消息到一組服務器中

consumer消費者:可以訂閱多個話題,並從Broker拉取數據,從而消費這些已發送的消息。


kafka的特點:

1.消息保存在磁盤,O(1)時間複雜度
2.不使用內存?使用磁盤緩存
3.消費狀態保存在消費客戶端
4.可以保存足夠大的未處理消息

在kafka中,一個partition中的消息只會背group中的一個consumer消費;每個group中的consumer消息消費相互獨立;我們可以認爲一個group是一個訂閱者,一個tpic中的每個partions,只會被一個訂閱者中的consumer消費,不過一個consumer可以消費多個partitions中的消息。kafka只能保證一個partition中的消息被某個consumer消費時,消息是順序的。從topic角度來說,消息仍然不是有序的。



部署zookeeper的步驟:

第一步解壓zookeeper配置conf/zoo.cfg文件

對應代碼修改成如下:
# set server
server.1=192.168.145.129:4887:5887
#server.2=cluster-node-02:4887:5887
#server.3=cluster-node-03:4887:5887
#server.4=cluster-node-04:4887:5887


第二步:啓動服務,用自帶的客戶端連接確認是否安裝成功

bin/zkServer.sh start 
zk客戶端:bin/zkCli.sh[root@localhost zookeeper-3.4.6]# vim conf/zoo.cfg 
[root@localhost zookeeper-3.4.6]# bin/zkServer.sh start   
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
修改conf/zoo.cfg配置文件中的dataDir、dataLogDir、server.1
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/home/shaka/dep/zookeeper-3.3.6/data  (改成自己的目錄)
# the port at which the clients will connect
clientPort=2181
# set logs
dataLogDir=/home/shaka/dep/zookeeper-3.3.6/logs  (改成自己的目錄)
# set server
server.1=hostname:4887:5887   (改成自己的hostname或IP)
#server.2=10.162.219.52:4887:5887
#server.3=10.163.15.119:4887:5887
# add by shaka
# set max client connects
maxClientCnxns=300
[root@localhost zookeeper-3.4.6]# bin/zkCli.sh
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is enabled
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] ls /
[consumers, config, admin, brokers, zookeeper, controller_epoch]
命令行工具的一些簡單操作如下:
    1. 顯示根目錄下、文件: ls / 使用 ls 命令來查看當前 ZooKeeper 中所包含的內容
    2. 創建文件,並設置初始內容: create /zk "test" 創建一個新的 znode節點“ zk ”以及與它關聯的字符串
    3. 獲取文件內容: get /zk 確認 znode 是否包含我們所創建的字符串
    4. 修改文件內容: set /zk "zkbak" 對 zk 所關聯的字符串進行設置
    5. 刪除文件: delete /zk 將剛纔創建的 znode 刪除
    6. 退出客戶端: quit
    7. 幫助命令: help

第三步:可選 安裝zk的ui軟件 zkui

首先安裝編譯工具mvn  
配置環境變量:
export MVN_HOME=/usr/local/apache-maven-3.2.1
PATH=$PATH:$HOME/bin:$MVN_HOME/bin
#set java environment
export PATH

到解壓的zkui目錄下執行:(需要聯網下載jar包)
mvn clean install
在zkui下面建立連接文件:  
ln -s target/zkui-2.0......jar zkui-2.0....jar

啓動zkui
vim config.cfg 
zkServer=192.168.145.129:2181

啓動:nohup java -jar zkui-2.0-SNAPSHOT-jar-with-dependencies.jar &
查看:http://123.56.76.213:9090  或者    jps -l


安裝部署Kafka:


step1:拷貝軟件包

step2:解壓
     tar -xvf kafka_2.9.2-0.8.1.1.tgz    或者用 unzip  kafka_2.9.2-0.8.1.1.zip
,修改配置文件conf/server.properties:
broker.id=0;
host.name=192.169.145.129;
zookeeper.connect=192.168.145.129:2181可逗號分隔配置多個

step3: 確保有執行權限
chmod +x sbin/* 
step 修改配置文件vim log4j.properties
log4j.appender.D.File = /data1/home/shaka/kafka/kafka_2.9.2-0.8.1.1/logs/debug.log
log4j.appender.E.File = /data1/home/shaka/kafka/kafka_2.9.2-0.8.1.1/logs/error.log


Step5:啓動kafka服務
sbin/start-kafka.sh 
查看是否啓動: jsp -l
step6.創建topic主題:
bin/kafka-create-topic.sh --zookeeper 192.168.145.129:2181 --replica 1 --partition 1 --topic mykafka

測試例子:
創建topic
bin/kafka-topics.sh --create --zookeeper 192.168.145.129:2181 --replication-factor 1 --partitions 2 --topic topic-ydcun-name  (IP不能是localhost)</span>
啓動consumer
bin/kafka-console-consumer.sh --zookeeper 192.168.145.129:2181 --topic topic-ydcun
(IP不能localhost)
啓動productor
bin/kafka-console-producer.sh --broker-list 192.168.145.129:9092 --topic topic-ydcun
在productor端輸入,看consumer端的輸出。

用shell程序類來模擬一個生產者

修改logger:
啓動 :nohup sh shelllogger.sh >> shelllogger.log 2>&1 &
查看啓動: ps -axu|grep shell
kill :
查看: tail -f access.log

shelllogger.sh

#!/bin/sh

# start cmd:
# nohup sh shellcrawler.sh  >> shellcrawler.log 2>&1 &
# set timer
g_getTime=""
function getTime
{
        g_getTime=`date  '+%Y%m%d %H:%M:%S'`
}
#getTime && echo "[$g_getTime] [$0:$LINENO:$FUNCNAME] - "

# set function
function crawler
{
	int=1
	while(( $int<=1000000000 ))
	do
	log="insert into test(name,content) values('ydcun','hello word');"
	let "int++"
        echo $log >> access.log 
        sleep 1s
        #usleep 1000
	done
}


# main
 
 crawler


啓動looger

 nohup tail -f ../logger/access.log | bin/kafka-console-producer.sh --broker-list 192.168.145.129:9092 --topic topic-ydcun > logs/producer.log 2>&1 &




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章