flume集群搭建
flume其實沒有集群概念,每個flume都是一個獨立的個體,每個flume agent收集數據匯總到flume collector,由collector寫入flume storage。
我現在有兩臺虛擬機,一臺是叫master,當flume agent;一臺叫slave1,當flume collector,實現agent連接collector向collector發送日志,最終collector將日志寫入到hdfs。
兩臺虛擬機事先配置好了jdk和hadoop。
1、解壓安裝
tar -zxvf apache-flume-1.6.0-bin.tar.gz
2、配置各機器環境變量 /etc/profile
3、配置flume JAVA_HOME
cd /usr/local/apache-flume-1.6.0-bin/conf,把flume-env.sh.template重命名為flume-env.sh,往里添加 export JAVA_HOME=/usr/lib/jdk1.7.0_75
4、復制flume到其他節點(只是各自的啟動文件不同)
cd /usr/local
scp -r apache-flume-1.6.0-bin slave1:~然后再移動到響應目錄下
5、配置agent啟動文件
在master節點上,在flume的conf目錄,將flume-conf.properties.template重命名為flume-test.conf(其實什么名字都可以,只要你啟動的時候調用對就可以了),然后配置source,channel,sink。
我這里agent source是spooldir ,channel是memory,sink是avro,三層類別詳細說明見flume官網
在slave1節點,collector三層,source是avro,channel是memory,sink是hdfs
6、啟動flume
先啟動slave1節點,再啟動master節點
flume-ng agent -n agent -c /usr/local/apache-flume-1.6.0-bin/conf -f /usr/local/apache-flume-1.6.0-bin/conf/flume-test.conf -Dflume.root.logger=DEBUG,console
flume-ng agent -n agent -c /usr/local/apache-flume-1.6.0-bin/conf -f /usr/local/apache-flume-1.6.0-bin/conf/flume-test.conf -Dflume.root.logger=DEBUG,console
啟動命令一樣,-n是名字,-c是配置文件的目錄,-f是配置文件,-D是日志級別。
然后在master的/home/zhanghuan/Documents/flume-test目錄下添加文件,最后在hdfs里查看該文件,如果存在該文件,則表示flume搭建成功,否則失敗。
注意,搭建過程中可能出現如下錯誤:
Could not configure sink sink1 due to: No channel configured for sink: sink1
org.apache.flume.conf.ConfigurationException: No channel configured for sink: sink1
則仔細查看配置文件,一個source可以對應多個channel,所以是channels,agent.sources.source1.channels = channel1,
但是一個sink對應一個channel,所以是channel,agent.sinks.sink1.channel = channel1,請注意。