分享

使用Flume对搜集数据的实时处理

本帖最后由 pig2 于 2014-8-20 18:20 编辑
问题导读:
1.你对flume了解多少
2.flume配置文件有什么作用?
3.通过什么方法可以封装flume启动脚本?






在已经成功安装Flume的基础上,本文将总结使用Flume进行数据的实时收集处理,具体步骤如下:

第一步,在$FLUME_HOME/conf目录下,编写Flume的配置文件,命名为flume_first_conf,具体内容如下:

  1. #agent1表示代理名称
  2. agent1.sources=source1
  3. agent1.sinks=sink1
  4. agent1.channels=channel1
  5. #Spooling Directory是监控指定文件夹中新文件的变化,一旦新文件出现,就解析该文件内容,然后写入到channle。写入完成后,标记该文件已完成或者删除该文件。
  6. #配置source1
  7. agent1.sources.source1.type=spooldir
  8. agent1.sources.source1.spoolDir=/home/yujianxin/hmbbs
  9. agent1.sources.source1.channels=channel1
  10. agent1.sources.source1.fileHeader = false
  11. agent1.sources.source1.interceptors = i1
  12. agent1.sources.source1.interceptors.i1.type = timestamp
  13. #配置channel1
  14. agent1.channels.channel1.type=file
  15. agent1.channels.channel1.checkpointDir=/home/yujianxin/hmbbs/hmbbs_tmp123
  16. agent1.channels.channel1.dataDirs=/home/yujianxin/hmbbs/hmbbs_tmp
  17. #配置sink1
  18. agent1.sinks.sink1.type=hdfs
  19. agent1.sinks.sink1.hdfs.path=hdfs://slave3:9000/hmbbs
  20. agent1.sinks.sink1.hdfs.fileType=DataStream
  21. agent1.sinks.sink1.hdfs.writeFormat=TEXT
  22. agent1.sinks.sink1.hdfs.rollInterval=1
  23. agent1.sinks.sink1.channel=channel1
  24. agent1.sinks.sink1.hdfs.filePrefix=%Y-%m-%d
复制代码
第二步,编写Shell脚本,执行Flume任务



  1. vi flume1.sh
  2. #!/bin/sh
  3. flume-ng agent -n agent1 -c conf-f /home/yujianxin/flume/apache-flume-1.4.0-bin/conf/flume_first_conf
  4. -Dflume.root.logger=DEBUG,console >./flume1.log 2>&1 &
  5. 让日志收集任务以后台进程运行,且将运行日志重定向到./flume1.log保存。
复制代码


验证

通过命令行查看新启的进程


1.jpg


不断往Flume监控的目录/home/yujianxin/hmbbs1下放置文件
2.jpg


查看./flume.log运行日志,截部分关键图如下
3.jpg

4.jpg


查看成功上传到HDFS中的文件
5.jpg



OK!使用Flume自动监控指定目录下文件的变化,自动处理,上传到HDFS。比以前自己写Shell脚本方便、快捷、高效多了,哈哈












已有(28)人评论

跳转到指定楼层
semion 发表于 2014-9-5 16:52:59
监控一个目录时,这个目录中的文件不能再编辑或者写入数据了吧 你是怎么实现的?
回复

使用道具 举报

pig2 发表于 2014-9-5 17:42:11
semion 发表于 2014-9-5 16:52
监控一个目录时,这个目录中的文件不能再编辑或者写入数据了吧 你是怎么实现的?

认识还需要加深,你可以自己试试。这里只是通过脚本自动化了。
回复

使用道具 举报

hbbtym 发表于 2014-12-3 15:15:39
你好,楼主。我也有这样的疑问。
我们部署Flume的时候,可定是要监控一个目录下,多有的日志的变化情况。

比如,log4j的日志。

每天0的时候会重命名昨天的日志,加上时间。如login.log重命名为login.log.2014-12-03,然后创建一个一个login.log文件继续写日志。

那么问题就来了,我要用什么source呢?

是用spooldir么,这样的话loging.log是一直打的,这样就会报错了吧。

要是用exec里面用tail命令的话,零点的时候重命名文件,这个tial就不管用了。

这一块能不能指导一下?
回复

使用道具 举报

pig2 发表于 2014-12-4 01:47:40
hbbtym 发表于 2014-12-3 15:15
你好,楼主。我也有这样的疑问。
我们部署Flume的时候,可定是要监控一个目录下,多有的日志的变化情况。
...

flume监控目录和日志产生目录最好分开,这样就不会产生这个问题了。

重命名完之后,然后通过程序传递到监控目录中
回复

使用道具 举报

hbbtym 发表于 2014-12-5 14:05:39
pig2 发表于 2014-12-4 01:47
flume监控目录和日志产生目录最好分开,这样就不会产生这个问题了。

重命名完之后,然后通过程序传递 ...

这样的功能实在是无法满足 实时采集的需求 还得自己开发source啊
回复

使用道具 举报

eclipsesky 发表于 2014-12-5 14:21:34
hbbtym 发表于 2014-12-3 15:15
你好,楼主。我也有这样的疑问。
我们部署Flume的时候,可定是要监控一个目录下,多有的日志的变化情况。
...

真相就在source的ignore参数中
回复

使用道具 举报

hbbtym 发表于 2014-12-10 17:04:38
pig2 发表于 2014-12-4 01:47
flume监控目录和日志产生目录最好分开,这样就不会产生这个问题了。

重命名完之后,然后通过程序传递 ...

这样无法实现,实时监控的目的啊,我都准备重写source了
回复

使用道具 举报

hbbtym 发表于 2014-12-10 17:05:41
eclipsesky 发表于 2014-12-5 14:21
真相就在source的ignore参数中

能不能说具体一点
回复

使用道具 举报

eclipsesky 发表于 2014-12-11 11:06:33
hbbtym 发表于 2014-12-10 17:05
能不能说具体一点

正在传输的设置为source的ignore,Flume就不读了 传完了改名就会被读取了 看下文档的source里的ignore参数你就知道了
回复

使用道具 举报

1234下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条