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,请注意。