flume其实没有集群概念,每一个flume都是一个独立的个体,每一个flume agent收集数据汇总到flume collector,由collector写入flume storage。html
我如今有两台虚拟机,一台是叫master,当flume agent;一台叫slave1,当flume collector,实现agent链接collector向collector发送日志,最终collector将日志写入到hdfs。web
两台虚拟机事先配置好了jdk和hadoop。apache
一、解压安装ide
tar -zxvf apache-flume-1.6.0-bin.tar.gzoop
二、配置各机器环境变量 /etc/profileui
三、配置flume JAVA_HOMEspa
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日志
四、复制flume到其余节点(只是各自的启动文件不一样)orm
cd /usr/localhtm
scp -r apache-flume-1.6.0-bin slave1:~而后再移动到响应目录下
五、配置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
六、启动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,请注意。