[轉載] 利用flume+kafka+storm+mysql構建大資料即時系統

來源:互聯網
上載者:User

標籤:

原文: http://mp.weixin.qq.com/s?__biz=MjM5NzAyNTE0Ng==&mid=205526269&idx=1&sn=6300502dad3e41a36f9bde8e0ba2284d&key=c468684b929d2be22eb8e183b6f92c75565b8179a9a179662ceb350cf82755209a424771bbc05810db9b7203a62c7a26&ascene=0&uin=Mjk1ODMyNTYyMg%3D%3D&devicetype=iMac+MacBookPro9%2C2+OSX+OSX+10.10.3+build(14D136)&version=11000003&pass_ticket=HKR%2BXKPFBrbVIWepmb7SozvfYdm5CIHU8HWlVnE78YKUsYHCq65XPAv9e1W48Ts1

 

雖然我一直不贊成完全用開源軟體組裝成一個系統, 但是對於初創公司來說, 效率高並且成本小, 還是有潛在的應用空間的. 風險就是系統的維護.

 

本文介紹了如何使用flume+kafka+storm+mysql構建一個分布式大資料流式架構,涉及基本架構,安裝部署等方面的介紹。

架構圖

資料流向圖

(是visio畫的,圖太大,放上來字看起來比較小,如果有需要的朋友留郵箱)

即時日誌分析系統架構簡介

系統主要分為四部分:

1).資料擷取

負責從各節點上即時採集資料,選用cloudera的flume來實現

2).資料接入

由於採集資料的速度和資料處理的速度不一定同步,因此添加一個訊息中介軟體來作為緩衝,選用apache的kafka

3).流式計算

對採集到的資料進行即時分析,選用apache的storm

4).資料輸出

對分析後的結果持久化,暫訂用mysql

 

詳細介紹各個組件及安裝配置:

作業系統:centos6.4

Flume

Flume是Cloudera提供的一個分布式、可靠、和高可用的海量日誌採集、彙總和傳輸的日誌收集系統,支援在日誌系統中定製各類資料發送方,用於收集資料;同時,Flume提供對資料進行簡單處理,並寫到各種資料接受方(可定製)的能力。

為flume典型的體繫結構:

Flume資料來源以及輸出方式:

Flume提供了從console(控制台)、RPC(Thrift-RPC)、text(檔案)、tail(UNIX tail)、syslog(syslog日誌系統,支援TCP和UDP等2種模式),exec(命令執行)等資料來源上收集資料的能力,在我們的系統中目前使用exec方式進行日誌採集。

Flume的資料接受方,可以是console(控制台)、text(檔案)、dfs(HDFS檔案)、RPC(Thrift-RPC)和syslogTCP(TCP syslog日誌系統)等。在我們系統中由kafka來接收。

 

Flume版本:1.4.0

Flume下載及文檔:

http://flume.apache.org/

Flume安裝:

$tar zxvf apache-flume-1.4.0-bin.tar.gz /usr/local

Flume啟動命令:

$bin/flume-ng agent --conf conf --conf-file conf/flume-conf.properties --name producer -Dflume.root.logger=INFO,console

注意事項:需要更改conf目錄下的設定檔,並且添加jar包到lib目錄下。

 

Kafka

Kafka是一個訊息中介軟體,它的特點是:

1、關注大輸送量,而不是別的特性

2、針對即時性情境

3、關於訊息被處理的狀態是在consumer端維護,而不是由kafka server端維護。

4、分布式,producer、broker和consumer都分佈於多台機器上。

為kafka的架構圖:

Kafka版本:0.8.0

Kafka下載及文檔:http://kafka.apache.org/

Kafka安裝:

> tar xzf kafka-<VERSION>.tgz

> cd kafka-<VERSION>

> ./sbt update

> ./sbt package

> ./sbt assembly-package-dependency Kafka

 

啟動及測試命令:

(1) start server

> bin/zookeeper-server-start.sh config/zookeeper.properties

> bin/kafka-server-start.sh config/server.properties

(2)Create a topic
> bin/kafka-create-topic.sh --zookeeper localhost:2181 --replica 1 --partition 1 --topic test

> bin/kafka-list-topic.sh --zookeeper localhost:2181

(3)Send some messages

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

(4)Start a consumer

> bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

 

storm

Storm是一個分布式的、高容錯的即時計算系統。

Storm架構圖:

storm工作任務topology:

Storm 版本:0.9.0

Storm 下載:http://storm-project.net/

Storm安裝:

第一步,安裝Python2.7.2

# wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz

# tar zxvf Python-2.7.2.tgz

# cd Python-2.7.2

# ./configure

# make

# make install

# vi /etc/ld.so.conf

第二步,安裝zookeeper(kafka內建zookeeper,如果選用kafka的,該步可省略)

#wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//zookeeper/zookeeper-3.3.3/zoo keeper-3.3.3.tar.gz

# tar zxf zookeeper-3.3.3.tar.gz

# ln -s /usr/local/zookeeper-3.3.3/ /usr/local/zookeeper

# vi ~./bashrc (設定ZOOKEEPER_HOME和ZOOKEEPER_HOME/bin)

第三步,安裝JAVA

$tar zxvf jdk-7u45-linux-x64.tar.gz /usr/local

 

如果使用storm0.9以下版本需要安裝zeromq及jzmq。

第四步,安裝zeromq以及jzmq

jzmq的安裝貌似是依賴zeromq的,所以應該先裝zeromq,再裝jzmq。

1)安裝zeromq(非必須):

  • # wget http://download.zeromq.org/historic/zeromq-2.1.7.tar.gz

  • # tar zxf zeromq-2.1.7.tar.gz

  • # cd zeromq-2.1.7

  • # ./configure

  • # make

  • # make install

  • # sudo ldconfig (更新LD_LIBRARY_PATH)

缺少c++環境:yum install gcc-c++

之後遇到的問題是:Error:cannot link with -luuid, install uuid-dev

這是因為沒有安裝uuid相關的package。

解決方案是:# yum install uuid*

# yum install e2fsprogs*

# yum install libuuid*

 

2)安裝jzmq(非必須)

  • # yum install git

  • # git clone git://github.com/nathanmarz/jzmq.git

  • # cd jzmq

  • # ./autogen.sh

  • # ./configure

  • # make

  • # make install

然後,jzmq就裝好了,這裡有個網站上參考到的問題沒有遇見,遇見的童鞋可以參考下。在./autogen.sh這步如果報錯:autogen.sh:error:could not find libtool is required to run autogen.sh,這是因為缺少了libtool,可以用#yum install libtool*來解決。

如果安裝的是storm0.9及以上版本不需要安裝zeromq和jzmq,但是需要修改storm.yaml來指定訊息傳輸為netty:

storm.local.dir: "/tmp/storm/data"

storm.messaging.transport: "backtype.storm.messaging.netty.Context"
storm.messaging.netty.server_worker_threads: 1
storm.messaging.netty.client_worker_threads: 1
storm.messaging.netty.buffer_size: 5242880
storm.messaging.netty.max_retries: 100
storm.messaging.netty.max_wait_ms: 1000
storm.messaging.netty.min_wait_ms: 100

 

第五步,安裝storm

$unzip storm-0.9.0-wip16.zip

備忘:單機版不需要修改設定檔,分布式在修改設定檔時要注意:冒號後必須加空格。

測試storm是否安裝成功:

1. 下載strom starter的代碼 git clone https://github.com/nathanmarz/storm-starter.git

2. 使用mvn -f m2-pom.xml package 進行編譯

如果沒有安裝過maven,參見如下步驟安裝:
1.從maven的官網下載http://maven.apache.org/

tar zxvf apache-maven-3.1.1-bin.tar.gz /usr/local

配置maven環境變數

export MAVEN_HOME=/usr/local/maven

export PATH=$PATH:$MAVEN_HOME/bin

驗證maven是否安裝成功:mvn -v

修改Storm-Starter的pom檔案m2-pom.xml ,修改dependency中twitter4j-core 和 twitter4j-stream兩個包的依賴版本,如下:

org.twitter4j
twitter4j-core
[2.2,)


org.twitter4j
twitter4j-stream
[2.2,)

編譯完後產生target檔案夾

啟動zookeeper

zkServer.sh start

啟動nimbus supervisor ui

storm nimbus

storm supervisor

storm ui

jps查看啟動狀態

進入target目錄執行:

storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.WordCountTopology wordcountTop

然後查看http://localhost:8080

注釋:單機版 不用修改storm.yaml

 

kafka和storm整合

1.下載kafka-storm0.8外掛程式:https://github.com/wurstmeister/storm-kafka-0.8-plus

2.該項目下載下來需要調試下,找到依賴jar包。然後重新打包,作為我們的storm項目的jar包。

3.將該jar包及kafka_2.9.2-0.8.0-beta1.jar metrics-core-2.2.0.jar scala-library-2.9.2.jar (這三個jar包在kafka-storm-0.8-plus項目依賴中能找到)

備忘:如果開發的項目需要其他jar,記得也要放進storm的Lib中比如用到了mysql就要添加mysql-connector-java-5.1.22-bin.jar到storm的lib下

 

flume和kafka整合

1.下載flume-kafka-plus: https://github.com/beyondj2ee/flumeng-kafka-plugin

2.提取外掛程式中的flume-conf.properties檔案

修改該檔案:#source section

producer.sources.s.type = exec
producer.sources.s.command = tail -f -n+1 /mnt/hgfs/vmshare/test.log
producer.sources.s.channels = c

修改所有topic的值改為test

將改後的設定檔放進flume/conf目錄下

在該項目中提取以下jar包放入環境中flume的lib下:

以上為單機版的flume+kafka+storm的配置安裝

 

flume+storm外掛程式

https://github.com/xiaochawan/edw-Storm-Flume-Connectors

 

啟動步驟

 

安裝好storm,flume,kafka之後開始項目部署啟動(在部署啟動之前最好按照安裝文檔進行storm kafka flume各個組件測試)。

第一步
將編寫好的storm項目打成jar包放入伺服器上,假如放在/usr/local/project/storm.xx.jar

注:關於storm項目的編寫見安裝文檔中的 kafka和storm整合 。

第二步

啟動zookeeper(這裡可以啟動kafka內建的zookeeper或者啟動單獨安裝的kafka,以下以kafka內建為例)

cd /usr/local/kafka

bin/zookeeper-server-start.sh config/zookeeper.properties
第三步
啟動kafka
cd /usr/local/kafka
> bin/kafka-server-start.sh config/server.properties
建立主題
> bin/kafka-create-topic.sh --zookeeper localhost:2181 --replica 1 --partition 1 --topic test
注:因為kafka訊息的offset是由zookeeper記錄管理的,所以在此需指定zookeeper的ip,replica 表示該主題的訊息被複製幾份,partition 表示每份主題被分割成幾部分。test表示主題名稱。
第四步
啟動storm
> storm nimbus
> storm supervisor
> storm ui
cd /usr/local/project/
> storm jar storm.xx.jar storm.testTopology test
註:storm.xx.jar 為我們編寫好的storm項目jar包,第一步完成的工作。 storm.testTopology 為storm項目中main方法所在的類路徑。test為此次topology的名字。
第五步
啟動flume
cd /usr/local/flume
bin/flume-ng agent --conf conf --conf-file conf/flume-conf.properties --name producer 
註:flume.conf.properties為我們自訂的flume設定檔,flume安裝好後是沒有此檔案的,需要我們自己編寫,編寫方式見flume安裝的文章。

至此需要啟動的程式已經全部啟動,storm項目已經開始運行,可以開啟storm ui 觀察運行是否正常。
http://localhost:8080
注:此處ip為storm nimbus所在機器Ip 連接埠可在storm設定檔 storm/conf/storm.yaml中修改

本文摘自http://blog.csdn.net/mylittlered/article/details/20810265 標題為:“flume+kafka+storm+mysql架構設計” 。

[轉載] 利用flume+kafka+storm+mysql構建大資料即時系統

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.