案例一:使用 Flume 监听文件内容变动,将新增加的内容输出到控制台。 案例二:使用 Flume 监听指定目录,将目录下新增加的文件存储到 HDFS。 案例三:使用 Avro 将本服务器收集到的日志数据发送到另外一台服务器。

案例一

环境: 需先开启HDFS
需求: 监听文件内容变动,将新增加的内容输出到控制台。
实现: 主要使用 Exec Source 配合 tail 命令实现。

配置

/root/flume/examples目录下新建配置文件 exec-memory-logger.properties,其内容如下:

  1. vi exec-memory-logger.properties
  2. #指定agent的sources,sinks,channels
  3. a1.sources = s1
  4. a1.sinks = k1
  5. a1.channels = c1
  6. #配置sources属性 #监听文件为/tmp/log.txt
  7. a1.sources.s1.type = exec
  8. a1.sources.s1.command = tail -F /tmp/log.txt
  9. a1.sources.s1.shell = /bin/bash -c
  10. #将sources与channels进行绑定
  11. a1.sources.s1.channels = c1
  12. #配置sink
  13. a1.sinks.k1.type = logger
  14. #将sinks与channels进行绑定
  15. a1.sinks.k1.channel = c1
  16. #配置channel类型
  17. a1.channels.c1.type = memory

启动

  1. flume-ng agent \
  2. --conf conf \
  3. --conf-file /root/flume/examples/exec-memory-logger.properties \
  4. --name a1 \
  5. -Dflume.root.logger=INFO,console

测试

  1. echo "hello world " >> /tmp/log.txt

控制台的显示:
image.png

案例二

需求: 监听指定目录,将目录下新增加的文件存储到 HDFS。
实现:使用 Spooling Directory SourceHDFS Sink

配置

/root/flume/examples目录下新建配置文件 spooling-memory-hdfs.properties ,内容如下

  1. vi spooling-memory-hdfs.properties
  2. #指定agent的sources,sinks,channels
  3. a1.sources = s1
  4. a1.sinks = k1
  5. a1.channels = c1
  6. #配置sources属性
  7. a1.sources.s1.type =spooldir
  8. #监听目录
  9. a1.sources.s1.spoolDir =/tmp/logs
  10. a1.sources.s1.basenameHeader = true
  11. a1.sources.s1.basenameHeaderKey = fileName
  12. #将sources与channels进行绑定
  13. a1.sources.s1.channels =c1
  14. #配置sink
  15. a1.sinks.k1.type = hdfs
  16. # 上传到hdfs的路径
  17. a1.sinks.k1.hdfs.path = /root/flume/events/%y-%m-%d/%H/
  18. a1.sinks.k1.hdfs.filePrefix = %{fileName}
  19. #生成的文件类型,默认是Sequencefile,可用DataStream,则为普通文本
  20. a1.sinks.k1.hdfs.fileType = DataStream
  21. a1.sinks.k1.hdfs.useLocalTimeStamp = true
  22. #将sinks与channels进行绑定
  23. a1.sinks.k1.channel = c1
  24. #配置channel类型
  25. a1.channels.c1.type = memory

启动

  1. flume-ng agent \
  2. --conf conf \
  3. --conf-file /root/flume/examples/spooling-memory-hdfs.properties \
  4. --name a1 -Dflume.root.logger=INFO,console

注:如出现
image.png
即/tmp/logs 为一个文件,而不是目录,删除文件,并新建为目录即可。mkdir /tmp/logs

测试

上传文件并测试
image.png

案例三

需求: 将本服务器收集到的数据发送到另外一台服务器。
实现:使用 avro sourcesavro Sink 实现。

配置日志收集Flume

/root/flume/examples目录下新建配置 netcat-memory-avro.properties,监听文件内容变化,然后将新的文件内容通过 avro sink 发送到 hadoop002 这台服务器的 8888 端口:

  1. vi /root/flume/examples/netcat-memory-avro.properties
  2. #指定agent的sources,sinks,channels
  3. a1.sources = s1
  4. a1.sinks = k1
  5. a1.channels = c1
  6. #配置sources属性
  7. a1.sources.s1.type = exec
  8. a1.sources.s1.command = tail -F /tmp/log.txt
  9. a1.sources.s1.shell = /bin/bash -c
  10. a1.sources.s1.channels = c1
  11. #配置sink
  12. a1.sinks.k1.type = avro
  13. a1.sinks.k1.hostname = hadoop002
  14. a1.sinks.k1.port = 8888
  15. a1.sinks.k1.batch-size = 1
  16. a1.sinks.k1.channel = c1
  17. #配置channel类型
  18. a1.channels.c1.type = memory
  19. a1.channels.c1.capacity = 1000
  20. a1.channels.c1.transactionCapacity = 100

配置日志聚合Flume

/root/flume/examples目录下新建配置 avro-memory-logger.properties
使用 avro source 监听 hadoop002 服务器的 8888 端口,将获取到内容输出到控制台:

  1. vi /root/flume/examples/avro-memory-logger.properties
  2. #指定agent的sources,sinks,channels
  3. a2.sources = s2
  4. a2.sinks = k2
  5. a2.channels = c2
  6. #配置sources属性
  7. a2.sources.s2.type = avro
  8. a2.sources.s2.bind = hadoop002
  9. a2.sources.s2.port = 8888
  10. #将sources与channels进行绑定
  11. a2.sources.s2.channels = c2
  12. #配置sink
  13. a2.sinks.k2.type = logger
  14. #将sinks与channels进行绑定
  15. a2.sinks.k2.channel = c2
  16. #配置channel类型
  17. a2.channels.c2.type = memory
  18. a2.channels.c2.capacity = 1000
  19. a2.channels.c2.transactionCapacity = 100

启动

  1. flume-ng agent \
  2. --conf conf \
  3. --conf-file /root/flume/examples/avro-memory-logger.properties \
  4. --name a2 -Dflume.root.logger=INFO,console
  1. flume-ng agent \
  2. --conf conf \
  3. --conf-file /root/flume/examples/netcat-memory-avro.properties \
  4. --name a1 -Dflume.root.logger=INFO,console

测试

向监听文件添加内容
image.png
验证结果:
image.png

总结

通过flume简单三个案例的配置使用,进而接触到flume中的知识,了解flume的配置和架构。