前言
提示:本篇为Flume系列的实战应用,在阅读此文前请务必安装好Flume环境,可以参考文件收集工具Flume的简介与安装,基本使用可以参考Flume基本使用。重复内容不再赘述。本机环境为:
CentOS 6.5
CDH 5.3.6
JDK 1.7
一、五步法编写Agent配置
由于上篇博客已经创建了一个Agent名为a1,我们这里直接复制它的框架并改名cp a1.conf a2.conf
并修改组件设置:
#a2: agent名称
#r2: source的名称
#k2: sink的名称
#c2: channel的名称
# 第一步:为组件写一个名字
a2.sources = r2
a2.sinks = k2
a2.channels = c2
# 第二步:设置source的配置
a2.sources.r2.type = exec
a2.sources.r2.command = tail -f /opt/cdh5.3.6/hive-0.13.1-cdh5.3.6/logs/hive.log
a2.sources.r2.shell = /bin/bash -c
# 第三步:设置sink的配置
a2.sinks.k2.type = hdfs
a2.sinks.k2.hdfs.path = hdfs://hadoop:8020/user/root/flume/hive-logs/
a2.sinks.k2.hdfs.fileType = DataStream
a2.sinks.k2.hdfs.writeFormat = Text
a2.sinks.k2.hdfs.batchSize = 10
# 第四步:设置channel的配置
a2.channels.c2.type = memory
# 第五步:把source和sink绑定到channel
a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2
这里配置有几个需要说明的地方,各个组件的设置有很多,不进行配置的情况下它的默认设置往往不符合我们的需求,建议大家还是尽量看官方文档进行设置。这里我们使用的source
种类是exec
也就是执行文件,它对应的命令属性为command
,也就是将我们hive日志文件
的末尾输出到hdfs文件上。在sink
的中path
我们需要配置成hdfs上的某个目录,其他设置都直接copy就可以。
二、开启监控日志任务
1.导入驱动
在启动之前还有一点要注意,我们flume
操作HDFS
时是需要有一些驱动jar包的,否则会报错缺少jar包。理论上来讲我们需要将Hadoop
安装目录lib
下的几个jar包拷贝到flume
的lib
下,但为了方便大家,免去挨个找的麻烦,我贴了我的版本的几个jar包下载地址,直接copy进llib
目录即可。
链接:https://pan.baidu.com/s/1btIyL07kKVrcA0WlhH8CgA
提取码:el08
2.启动Agent
接下来启动好HDFS后,最好先提前创建好上面配置的hdfs路径bin/hdfs dfs -mkdir -p /user/root/flume/hive-logs/
再启动Agent。
bin/flume-ng agent \
-c conf \
-n a2 \
-f conf/a2.conf \
-Dflume.root.logger=DEBUG,console
看到Checking file代表目前Agent成功启动。进入到Hadoop前端的页面查看可以看到已经写入了两个文件。
如果此步骤报错大概率是上述的agent配置文件出错,请仔细对比修正,还有问题也可以在评论区留言。
三、启动Hive测试
在Hive安装目录bin/hive
启动Hive,目的是测试新产生的日志文件能否正常被监控并导入HDFS,进一步地,我们执行一些操作例如select * from xxx;
此时可以立即看到另一个shell中监控到了这些日志变更,并开始写入文件:
最后,在前端可以直观地看到确实多了好几个文件,监控成功!
总结
本文章只是粗浅地展示Flume用于实时监控文件变化的作用,关于Flume其他的各种用法及配置欢迎翻阅我的其他博客,还有大家如果在实际操作遇见什么问题也欢迎留言讨论!