flume其实没有集群概念,每个flume都是一个独立的个体,互相之间对数据流转进行协作
一起直接写到一个hdfs目标会报错,一般最终汇总写到一个sink即可
注意:节点间有数据流向的要实现无密码登陆实现无障碍通信,还有各机器防火墙最好关闭,不然部署过程会吃很多苦头
(基于三节点z4,z5,z6部署,监控z5,z6文件夹,发现新文件则汇入z4,通过z4的 hdfssink上传到hdfs)
1、解压安装
tar -zxvf apache-flume-1.6.0-bin.tar.gz
2、配置各机器环境变量 /etc/profile
3、配置flume JAVA_HOME
cd /usr/local/flume-1.6.0/conf,把flume-env.sh.template重命名为flume-env.sh,往里添加 export JAVA_HOME=/usr/local/jdk1.7.0_79
4、复制flume到其他节点(只是各自的启动文件不同)
cd /usr/local
scp -r flume-1.6.0 root@z5: /usr/local
scp -r flume-1.6.0 root@z6: /usr/local
5、配置agent启动文件
z4节点上,在flume conf目录中flume-conf.properties.template重命名为agent0.conf
vi agent0.conf
(注:rollCount不设置的话默认是10行,上传的文件内容如果多于10行,会被切分成两个文件,适当改大些.
source1.port端口选用前查看该端口是否被占用:netstat -tunlp | grep 23004)
z5节点上,在flume conf目录中flume-conf.properties.template重命名为agent1.conf
vi agent1.conf
同理z6节点agent2.conf,配置与agent1.conf类似
6、启动flume
进入当前机器flume 目录下面进行启动,先启动z4节点的flume,不然会报异常,并且确保hadoop之前是启动的
在/usr/local/flume-1.6.0下分别启动:
z4: flume-ng agent --conf ./conf/ -f ./conf/agent0.conf -n agent0 -Dflume.root.logger=INFO,console
z5:flume-ng agent --conf ./conf/ -f ./conf/agent1.conf -n agent1 -Dflume.root.logger=INFO,console
z6:flume-ng agent --conf ./conf/ -f ./conf/agent2.conf -n agent2 -Dflume.root.logger=INFO,console
(注意此处的-n agent0名称对应agent0.conf中的agent0)
3台机器服务都启动之后, 可以往 z5 或者z6 机器中的 文件夹下面(配置好的spooldir路径)加入新的文件, flume 集群会将这些数据 都收集到z4上面,然后写到hdfs 中