一、flume采集日志信息到hdfs系统
【实验目的】
1) 掌握flume的应用原理
2) 掌握flume对日志信息的采集过程
【实验原理】
Flume是Cloudera提供的日志收集系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种storage。Flume是一个分布式、高可靠、和高可用的海量日志采集、聚合和传输的系统。本试验就是通过学习flume工具实现对数据信息的采集并实时把采集到的信息打印到hdfs系统中指定的位置。
【实验环境】
本次环境是:centos6.5 + jdk1.7.0_79 + hadoop2.4.1 + apache-flume-1.5.0
工具包在/simple/soft目录下
【实验步骤】
直接start-all.sh失败
ip a 命令发现没有IP地址
修改ip配置
把DEVICE=eth0改成DEVICE=eth2
重启服务
命令:service network restart
通过执行命令start-all.sh启动服务
SecureCRT 与虚拟机连接
在本机桌面新建一个a2.conf文件,记事本编辑如下
a2.sources = r1
a2.channels = c1
a2.sinks = k1
a2.sources.r1.type = exec
a2.sources.r1.command = tail -F /simple/a.log
a2.channels.c1.type = memory
a2.channels.c1.capacity = 1000
a2.channels.c1.transactionCapacity = 100
a2.sinks.k1.type = hdfs
a2.sinks.k1.hdfs.path = hdfs://192.168.1.2:9000/flume/aa.log
a2.sinks.k1.hdfs.filePrefix = events-
a2.sinks.k1.hdfs.fileType = DataStream
a2.sources.r1.channels = c1
a2.sinks.k1.channel = c1
然后通过SecureCRT 把a2.conf文件复制到虚拟机/simple目录下
在/simple目录下创建一个a.log文件并写入内容aaaaaaaaa
切换到bin目录下,执行flume命令:./flume-ng agent -n a2 -f /simple/a2.conf -c ../conf/ -Dflume.root.logger=INFO,console
另外再开启一个终端,通过执行命令:echo ‘bbbbbbbbbb’>>/simple/a.log向a.log文件中追加内容。如图3所示。然后可以通过执行hdfs系统的命令查看hdfs中生成的文件并发现hdfs指定的目录文件下的内容增多。
二、flume采集日志信息到控制台
配置ip ,start-all.sh命令启动hadoop
SSH连接,然后在本机桌面新建一个a2.conf文件,编辑内容为:
a2.sources = r1
a2.channels = c1
a2.sinks = k1
a2.sources.r1.type = exec
a2.sources.r1.command = tail -F /simple/a.log
a2.channels.c1.type = memory
a2.channels.c1.capacity = 1000
a2.channels.c1.transactionCapacity = 100
a2.sinks.k1.type = logger
a2.sources.r1.channels = c1
a2.sinks.k1.channel = c1
然后将a2.conf文件复制到虚拟机/simple目录下
在/simple目录下执行命令:touch a.log并向文件中写入内容“aaaaaaaaa”
切换到bin目录下,执行flume命令:./flume-ng agent -n a2 -f /simple/a2.conf -c ../conf/ -Dflume.root.logger=INFO,console。
执行上一步命令之后,发现在控制台上把/simple/a.log文件的内容输出到控制台上
在另外一个命令终端通过执行命令:echo ‘zzzzzzzzzzzzzzzzzzzzzzzzzzz>>a.log向a.log文件中追加内容时,发现在另外一个终端实时输出’zzzzzzzzzzzzzzzzzzzzzzzzzzzzz’的内容。
三、flume采集制定目录下的日志信息到hdfs系统
通过执行命令start-all.sh启动hadoop
在/simple 目录下创建一个文件a4.conf内容如下(通过前两个实验的方法)
a4.sources = r1
a4.channels = c1
a4.sinks = k1
a4.sources.r1.type = spooldir
a4.sources.r1.spoolDir = /simple/logs
a4.channels.c1.type = memory
a4.channels.c1.capacity = 10000
a4.channels.c1.transactionCapacity = 100
a4.sources.r1.interceptors = i1
a4.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
#a2.sinks.k1.type = logger
a4.sinks.k1.type = hdfs
a4.sinks.k1.hdfs.path = hdfs://192.168.1.2:9000/flume/%Y%m%d
a4.sinks.k1.hdfs.filePrefix = event-
a4.sinks.k1.hdfs.fileType = DataStream
a4.sinks.k1.hdfs.rollCount = 0
a4.sinks.k1.hdfs.rollSize = 134217728
a4.sinks.k1.hdfs.rollInterval = 60
a4.sources.r1.channels = c1
a4.sinks.k1.channel = c1
在simple目录下创建一个目录,执行命令:mkdir logs
在simple目录下创建文件a.log,执行命令touch a.log,编辑内容
切换到bin目录下,执行flume命令:./flume-ng agent -n a4 -f /simple/a4.conf -c ../conf/ -Dflume.root.logger=INFO,console。
执行上一步命令之后,同时在另外一个终端中,在simple目录下通过执行拷贝命令:cp a.log logs/a1.log和cp a.log logs/a2.log实现把a.log日志文件拷贝到logs目录下,此时logs目录下的日志文件会被采集并保存到hdfs指定位置/flume目录下