系统环境:CentOS 7
平台:Hadoop2.9
JAVA:JAVA1.8
在正式开始学习Flume之前,我相信各位都已经清楚了解HDFS到底是个什么了。在这里我们将HDFS简单地视为一个大硬盘,容量非常大的大硬盘,那么如何实现自动化地往这个硬盘中定期存入数据呢?Flume的功能就在于此。
Flume就是这样一个工具。
下面我将介绍在如何在HDFS的基础上应用Flume来达到日志文件的自动收集目的。
第一步:部署安装Flume
Flume需要JDK环境,因此需要先安装JDK并设置好系统环境。【这里不赘述了,因为能跑Hadoop自然有JDK环境】
我选择用二进制包解压安装。
Flume版本我选择的是1.8。官网下载地址是:http://mirrors.hust.edu.cn/apache/flume/1.8.0/
下载好 apache-flume-1.8.0-bin.tar.gz 文件后,通过Xftp或者其他ftp工具传到服务器端,我上传后的服务器路径在 /usr 目录。如图。
1、解压并进入Flume:
# cd /usr
# tar -zxvf apache-flume-1.8.0-bin.tar.gz
# cd apache-flume-1.8.0-bin
# cd conf
# cp flume-env.sh.template flume-env.sh
3、修改flume-env.sh中的JAVA_HOME:
# vim flume-env.sh
将JAVA_HOME的路径修改为/etc/profile中的JAVA_HOME路径。
保存并退出。
自此实际上Flume已经可以算完成安装了。
目的:将本机上的日志文件定时传入HDFS。
首先,根据目的我们要配置一个新的flume-conf文件:
# cp flume-conf.properties.template flume-conf
# vim flume-conf
进入后根据我们的目的进行相应的配置:
# The configuration file needs to define the sources,
# the channels and the sinks.
# Sources, channels and sinks are defined per agent,
# in this case called 'agent'
agent.sources = hdfstest
agent.channels = ch1
agent.sinks = sk1
# For each one of the sources, the type is defined
agent.sources.hdfstest.type = spooldir
# The channel can be defined as follows.
agent.sources.hdfstest.channels = ch1
agent.sources.hdfstest.spoolDir = /usr/apache-flume-1.8.0-bin/tmpLog
agent.sources.hdfstest.bind = 0.0.0.0
agent.sources.hdfstest.port = 41414
# Each sink's type must be defined
agent.sinks.sk1.type = hdfs
#Specify the channel the sink should use
agent.sinks.sk1.channel = ch1
agent.sinks.sk1.hdfs.path = hdfs://node1:9000/tmpLog
agent.sinks.sk1.hdfs.filePrefix = %{host}
# Each channel's type is defined.
agent.channels.ch1.type = memory
# Other config values specific to each type of channel(sink or source)
# can be defined as well
# In this case, it specifies the capacity of the memory channel
agent.channels.memoryChannel.capacity = 100
其中,agent.sources.hdfstest.spoolDir和agent.sinks.sk1.hdfs.path的值应该根据自己服务器的情况进行更改,filePrefix参数上传至hdfs的文件名前缀,像上面这样的配置意思就是我需要flume监听 /usr/apache-flume-1.8.0-bin/tmpLog 目录,倘若该目录下有新的文件生成且满足上传条件,旋即将目录下的日志文件上传至HDFS的 /tmpLog 目录下。
保存退出,回到 /usr/apche-flume-1.8.0-bin 目录,输入命令创建tmpLog文件夹:
# mkdir tmpLog
创建成功后,可以进入tmpLog目录随意新建或者从其他路径复制一些测试文件。
回到flume的根目录,输入命令启动agent:
# bin/flume-ng agent --conf ./conf/ -f ./conf/flume-conf --name agent -Dflume.root.logger=DEBUG,console
可以发现事件确实滚动入HDFS上了。我们也可以在HDFS的WEB端查看。
甚至我们还可以另起一个终端,再往tmpLog下存入新文件,可以发现flume会及时地将新的文件上传到HDFS上,达到一个秒级的数据采集。
总结:这虽然只是一个最基础的flume“Hello world!”例子,但通过上面的测试我们已经可以大致了解flume的工作是什么,而实际上除了上面的配置外,flume实际上还有更多更强大的配置,甚至假如有需要,我们可以建立出flume-conf1,flume-conf2......flume-confn的不同配置信息,只需利用对应配置启动agent,就能达到了一个多方位,多层次,多手段的数据采集。可以满足绝大多数的生产实践环境要求。