Hive入门--4.flume-数据收集工具 Flume简介 Flume安装 3. 启动flume 4.flume的另外一种配置


  flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。

  flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。

Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置

Flume安装

1. 解压 flume安装包到 /itcast/ 目录下


tar -zxvf /*flume安装包*/ /itcast/

2. 修改 flume配置文件:

2.1 flume-env.sh

修改文件名称:

mv flume-env.sh.template flume-env.sh

添加java_home,保证flume所使用的jdk和hdfs是一样的(可以使用 echo JAVA_HOME 查看当前机器所使用的javaHome所在路径)

2.2 编写agent配置文件a4.conf

定义agent名, source、channel、sink的名称


a4.sources = r1
a4.channels = c1
a4.sinks = k1

具体定义source


a4.sources.r1.type = spooldir #具体实现类是通过反射加载的
a4.sources.r1.spoolDir = /root/logs #监听这个目录

具体定义channel


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

具体定义sink


a4.sinks.k1.type = hdfs
a4.sinks.k1.hdfs.path = hdfs://ns1/flume/%Y%m%d #根据时间动态生成
a4.sinks.k1.hdfs.filePrefix = events- #产生日志的前缀
a4.sinks.k1.hdfs.fileType = DataStream #纯文本方式接收

不按照条数生成文件


a4.sinks.k1.hdfs.rollCount = 0 #多少条flush成1个文件

HDFS上的文件达到128M时生成一个文件


a4.sinks.k1.hdfs.rollSize = 134217728 #文件达到多大时flush成一个文件

HDFS上的文件达到60秒生成一个文件


a4.sinks.k1.hdfs.rollInterval = 60 #flush成一个文件的时间间隔

组装source、channel、sink


a4.sources.r1.channels = c1
a4.sinks.k1.channel = c1

3. 启动flume


先切换到 /itcast/apache-flume-1.5.0-bin/ 目录下:

输入命令:

bin/flume-ng agent -n a4 -c conf -f conf a4.conf -Dflume.root.logger=INFO,console

命令解释:

Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置


启动后有可能遇到如下的错误,这里一一列举出来,出错的童鞋对号入座:


错误1:
Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置

解决:说明缺少jar包,拷贝 /itcast/hadoop-2.6.0/share/hadoop/common/hadoop-common-2.6.0.jar/itcast/apache-flume-1.5.0-bin/lib/ 文件夹下

使用scp命令:
Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置


错误2:
Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置


解决:说明缺少jar包,拷贝/itcast/hadoop-2.6.0/share/hadoop/common/lib/commons-configuration-.jar/itcast/apache-flume-1.5.0-bin/lib/文件夹下
Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置


错误3:
Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置

解决:将/itcast/hadoop-2.6.0/share/hadoop/common/lib/ hadoop-auth-2.6.0.jar拷贝到flume/lib目录下


错误4:
Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置

解决:在 /root目录下创建logs目录 :mkdir /root/logs


错误5:

Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置


解决:告知flume ns1的配置信息

1)拷贝core-site.xml和 hdfs-site.xml到flume的conf目录下

scp /itcast/hadoop-2.6.0/etc/hadoop/{core-site.xml, hdfs-site.xml}  

192.168.1.204:/itcast/apache-flume-1.5.0-bin/conf

2)修改/etc/hosts 文件,让该主机知道itcast01 和itcast02的IP地址

添加itcast01 和itcast02 ip和主机名的映射

3)拷贝hadoop-hdfs-2.6.0.jar

Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置


如果出现如下的内容并且显示在不断滚动,说明没问题了,flume启动成功!
启动成功之后的样子应该是这样的:
Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置

3.1 写入测试

现在如果向 /root/logs 目录下丢进文件,flume则会将这个文件下的内容写入hdfs中

先执行命令:

    bin/flume-ng agent -n a4 -c conf -f conf/a4.conf 
    -Dflume.root.logger=INFO,console

启动flume之后,将日志文件 access_2013_05_30.log 放到 logs 文件夹下:
Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置

Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置
通过网页查看hdfs,发现多了一个目录 /flume ,在这个目录下的文件有 20160618 ,说明文件是以时间命名的
Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置
/flume/20160618 这个文件夹下

Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置

问题:为什么生成的是3个文件,我写入的不是1个吗?而且这3个文件大小加起来刚好等于日志文件access_2013_05_30.log的大小


原因:这里sink设置了每60秒滚动写入一次或者当缓冲区文件大小达到134217728字节(128M)时进行滚动写入。

通过计算时间,写入总共花费几分钟,那势必第二个滚动选项是无法满足的,所以文件每60s的时候刚刚读入了一部分,接着就被写入hdfs中了。

4.flume的另外一种配置


source—exec
channel—memory
sink—logger


启动方式和之前的一样,只是读入的配置文件不同:

bin/flume-ng agent -n a2 -f /home/hadoop/a2.conf -c conf -Dflume.root.logger=INFO,console

a2.conf配置文件:

定义agent名, source、channel、sink的名称


a2.sources = r1
a2.channels = c1
a2.sinks = k1

具体定义source


a2.sources.r1.type = exec
a2.sources.r1.command = tail -F /home/hadoop/a.log

具体定义channel


a2.channels.c1.type = memory
a2.channels.c1.capacity = 1000
a2.channels.c1.transactionCapacity = 100

具体定义sink


a2.sinks.k1.type = logger

组装source、channel、sink


a2.sources.r1.channels = c1
a2.sinks.k1.channel = c1

监控当有数据写入这个log文件中时,flume将这些数据采集并打印在控制台上
a) 就像tail –F file 命令一样

    # echo 111111 >> log
    # echo 222222 >> log
    # echo 333333 >> log

以阻塞形式打印,向log文件中追加记录
Hive入门--4.flume-数据收集工具
Flume简介
Flume安装
3.    启动flume
4.flume的另外一种配置

b) 以a2.conf配置文件运行flume
将a2.conf文件拷贝到flume/conf 目录下
在/root目录下创建文件log

运行命令:

    bin/flume-ng agent -n a2 -f /itcast/apache-flume-1.5.0-bin/conf/a2.conf 
    -c conf -Dflume.root.logger=INFO,console