模拟使用Flume监听日志变化,并且把增量的日志文件写入到hdfs中

                       

1.采集日志文件时一个很常见的现象

采集需求:比如业务系统使用log4j生成日志,日志内容不断增加,需要把追加到日志文件中的数据实时采集到hdfs中。
   
   
  • 1

1.1.根据需求,首先定义一下3大要素:

采集源,即source—监控日志文件内容更新:exec ‘tail -F file’
下沉目标,即sink—HDFS文件系统:hdfs sink
Source和sink之间的传递通道—-channel,可用file channel也可以用 内存channel。

1.2.进入/home/tuzq/software/apache-flume-1.6.0-bin/agentconf,编写配置文件tail-hdfs.conf,文件内容如下:

# Name the components on this agenta1.sources = r1a1.sinks = k1a1.channels = c1# Describe/configure the source## exec表示flume回去调用给的命令,然后从给的命令的结果中去拿数据a1.sources.r1.type = exec## 使用tail这个命令来读数据a1.sources.r1.command = tail -F /home/tuzq/software/flumedata/test.loga1.sources.r1.channels = c1# Describe the sink## 表示下沉到hdfs,类型决定了下面的参数a1.sinks.k1.type = hdfs## sinks.k1只能连接一个channel,source可以配置多个a1.sinks.k1.channel = c1## 下面的配置告诉用hdfs去写文件的时候写到什么位置,下面的表示不是写死的,而是可以动态的变化的。表示输出的目录名称是可变的a1.sinks.k1.hdfs.path = /flume/tailout/%y-%m-%d/%H%M/##表示最后的文件的前缀a1.sinks.k1.hdfs.filePrefix = events-## 表示到了需要触发的时间时,是否要更新文件夹,true:表示要a1.sinks.k1.hdfs.round = true## 表示每隔1分钟改变一次a1.sinks.k1.hdfs.roundValue = 1## 切换文件的时候的时间单位是分钟a1.sinks.k1.hdfs.roundUnit = minute## 表示只要过了3秒钟,就切换生成一个新的文件a1.sinks.k1.hdfs.rollInterval = 3## 如果记录的文件大于20字节时切换一次a1.sinks.k1.hdfs.rollSize = 20## 当写了5个事件时触发a1.sinks.k1.hdfs.rollCount = 5## 收到了多少条消息往dfs中追加内容a1.sinks.k1.hdfs.batchSize = 10## 使用本地时间戳a1.sinks.k1.hdfs.useLocalTimeStamp = true#生成的文件类型,默认是Sequencefile,可用DataStream:为普通文本a1.sinks.k1.hdfs.fileType = DataStream# Use a channel which buffers events in memory##使用内存的方式a1.channels.c1.type = memorya1.channels.c1.capacity = 1000a1.channels.c1.transactionCapacity = 100# Bind the source and sink to the channela1.sources.r1.channels = c1a1.sinks.k1.channel = c1
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

1.3.编写完成之后,启动flume,执行的命令是:

[root@hadoop1 flumedata]#cd /home/tuzq/software/apache-flume-1.6.0-bin/agentconf[root@hadoop1 flumedata]#bin/flume-ng agent -c conf -f agentconf/tail-hdfs.conf -n a1
   
   
  • 1
  • 2

1.4.通过写一个死循环往test.log中写数据的方式模式日志文件增长

编写shell脚本,模拟日志增长变化。

[root@hadoop1 flumedata]# cd /home/tuzq/software/flumedata[root@hadoop1 flumedata]# while true>do> date >> test.log> sleep 2> done
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

查看日志变化

[root@hadoop1 ~]# cd /home/tuzq/software/flumedata/[root@hadoop1 flumedata]# lsaccess.log  error.log  test.log[root@hadoop1 flumedata]# tail -f test.log 20170613日 星期二 22:02:22 CST20170613日 星期二 22:02:24 CST20170613日 星期二 22:02:26 CST20170613日 星期二 22:02:28 CST20170613日 星期二 22:02:30 CST20170613日 星期二 22:02:32 CST
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

通过上面的文件,可以看到test.log在不停的追加数据。

到hdfs中进行查看,效果如下:

[root@hadoop1 ~]# hdfs dfs -ls /Found 5 itemsdrwxr-xr-x   - root supergroup          0 2017-06-13 12:01 /40000drwxr-xr-x   - root supergroup          0 2017-06-13 22:01 /flume-rw-r--r--   3 root supergroup       3719 2017-06-10 12:11 /kms.shdrwxrwxrwx   - root supergroup          0 2017-06-10 22:06 /tmpdrwxr-xr-x   - root supergroup          0 2017-06-10 22:27 /user[root@hadoop1 ~]# hdfs dfs -ls /flumeFound 1 itemsdrwxr-xr-x   - root supergroup          0 2017-06-13 22:01 /flume/tailout[root@hadoop1 ~]# hdfs dfs -ls /flume/tailoutFound 1 itemsdrwxr-xr-x   - root supergroup          0 2017-06-13 22:03 /flume/tailout/17-06-13[root@hadoop1 ~]# hdfs dfs -ls /flume/tailout/17-06-13Found 4 itemsdrwxr-xr-x   - root supergroup          0 2017-06-13 22:01 /flume/tailout/17-06-13/2201drwxr-xr-x   - root supergroup          0 2017-06-13 22:03 /flume/tailout/17-06-13/2202drwxr-xr-x   - root supergroup          0 2017-06-13 22:04 /flume/tailout/17-06-13/2203drwxr-xr-x   - root supergroup          0 2017-06-13 22:04 /flume/tailout/17-06-13/2204[root@hadoop1 ~]# hdfs dfs -ls /flume/tailout/17-06-13Found 5 itemsdrwxr-xr-x   - root supergroup          0 2017-06-13 22:01 /flume/tailout/17-06-13/2201drwxr-xr-x   - root supergroup          0 2017-06-13 22:03 /flume/tailout/17-06-13/2202drwxr-xr-x   - root supergroup          0 2017-06-13 22:04 /flume/tailout/17-06-13/2203drwxr-xr-x   - root supergroup          0 2017-06-13 22:05 /flume/tailout/17-06-13/2204drwxr-xr-x   - root supergroup          0 2017-06-13 22:05 /flume/tailout/17-06-13/2205[root@hadoop1 /]# hdfs dfs -ls /flume/tailout/17-06-13Found 6 itemsdrwxr-xr-x   - root supergroup          0 2017-06-13 22:01 /flume/tailout/17-06-13/2201drwxr-xr-x   - root supergroup          0 2017-06-13 22:03 /flume/tailout/17-06-13/2202drwxr-xr-x   - root supergroup          0 2017-06-13 22:04 /flume/tailout/17-06-13/2203drwxr-xr-x   - root supergroup          0 2017-06-13 22:05 /flume/tailout/17-06-13/2204drwxr-xr-x   - root supergroup          0 2017-06-13 22:06 /flume/tailout/17-06-13/2205drwxr-xr-x   - root supergroup          0 2017-06-13 22:06 /flume/tailout/17-06-13/2206[root@hadoop1 /]
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

通过上面的案例可以知道,增加的日志文件已经被写入到HDFS中。

可供参考的文件:http://blog.csdn.net/tototuzuoquan/article/details/73194903

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/jdtugfcg/article/details/86572350