环境准备:
hadoop集群正常运行
zookeeper正常运行
机器 | master | slave1 | slave2 |
IP | 192.168.231.105 | 192.168.231.106 | 192.168.231.107 |
环境搭建:
一、下载安装
1、下载flume-1.8.0-bin.tar.gz:
Index of /flume/1.8.0https://downloads.apache.org/flume/1.8.0/
2、解压:
tar -zxvf apache-flume-1.8.0-bin.tar.gz -C /home
3、重命名:
mv apache-flume-1.8.0-bin/ flume
二、环境变量
1、配置flume环境变量:
vim /etc/profile
2、使环境变量立即生效:
source /etc/profile
三、配置文件
1、修改配置文件 flume-env.sh:
进入conf目录,拷贝 flume-env.sh.template 为 flume-env.sh:
cp flume-env.sh.template flume-env.sh
修改jdk路径:
export JAVA_HOME=/home/jdk
2、在 conf 目录下创建slave.conf文件:
vim slave.conf
# 主要作用是监听目录中的新增数据,采集到数据之后,输出到avro (输出到agent)
# 注意:Flume agent的运行,主要就是配置source channel sink
# 下面的a1就是agent的代号,source叫r1 channel叫c1 sink叫k1
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#具体定义source
a1.sources.r1.type = spooldir
#先创建此目录,保证里面空的
a1.sources.r1.spoolDir = /tmp/logs
#对于sink的配置描述 使用avro日志做数据的消费
a1.sinks.k1.type = avro
# hostname是最终传给的主机名称或者ip地址
a1.sinks.k1.hostname = master
a1.sinks.k1.port = 44444
#对于channel的配置描述 使用文件做数据的临时缓存 这种的安全性要高
a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /home/flume/checkpoint
a1.channels.c1.dataDirs = /home/flume/data
#通过channel c1将source r1和sink k1关联起来
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
注:需要注意的地方标号已注明,需保证logs目录存在且为空,3,4两处依据实际情况进行修改
3、在 /tmp/下创建logs监控目录,flume/ 目录下创建checkpoint,data目录(3台机器全部都要做):
mkdir -p /tmp/logs
mkdir checkpoint
mkdir data
4、分发 flume 文件到slave1和slave2从机:
scp -r /home/flume slave1:/home/flume
scp -r /home/flume slave2:/home/flume
5、在master的flume的conf文件夹下创建一个master.conf文件:
vim master.conf
# 获取slave1,2上的数据,聚合起来,传到hdfs上面
# 注意:Flume agent的运行,主要就是配置source channel sink
# 下面的a1就是agent的代号,source叫r1 channel叫c1 sink叫k1
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#对于source的配置描述 监听avro
a1.sources.r1.type = avro
# hostname是最终传给的主机名称或者ip地址
a1.sources.r1.bind = master
a1.sources.r1.port = 44444
#定义拦截器,为消息添加时间戳
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
#对于sink的配置描述 传递到hdfs上面
a1.sinks.k1.type = hdfs
#集群的nameservers名字
#单节点的直接写:hdfs://主机名(ip):9000/xxx
a1.sinks.k1.hdfs.path = hdfs://master:9000/flume/%Y%m%d
a1.sinks.k1.hdfs.filePrefix = events-
a1.sinks.k1.hdfs.fileType = DataStream
#不按照条数生成文件
a1.sinks.k1.hdfs.rollCount = 0
#HDFS上的文件达到128M时生成一个文件
a1.sinks.k1.hdfs.rollSize = 134217728
#HDFS上的文件达到60秒生成一个文件
a1.sinks.k1.hdfs.rollInterval = 60
#对于channel的配置描述 使用内存缓冲区域做数据的临时缓存
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
#通过channel c1将source r1和sink k1关联起来
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
注:如果机器名与笔者相同,只需修改这一行即可,master后的数字为core-site.xml配置文件中的配置数字
四、启动集群
1、启动hadoop集群:
sbin/start-all.sh
2、启动zookeeper:
3、启动flume集群:
在flume目录下
master端:
bin/flume-ng agent -n a1 -c conf -f conf/master.conf -Dflume.root.logger=INFO,console
slave1端和slave2端:
bin/flume-ng agent -n a1 -c conf -f conf/slave.conf -Dflume.root.logger=INFO,console
五、在slave机器 /tmp/logs 目录下创建文本
1、创建test1:
vim test1
2、创建test2:
vim test2
slave端:
master端:
注:可以在master和slave终端均看到有持续的信息回读且正确读取到test1和test2文件
六、web端查看
master:50070
七、终端查看上传hdfs文件:
1、查看 hdfs 根目录列表:
hdfs dfs -ls /
2、查看上传文件内容:
hdfs dfs -cat /flume/20211109/events-.1636507269933