大数据架构师之Flume学习

By | 2019年2月2日

版权声明: https://blog.csdn.net/hiddpy/article/details/79642729

系统环境: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
        
        2、进入Flume的配置目录conf并创建flume-env.sh文件:
# 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路径。

   
这里的JAVA_HOME不一定跟我的一样,参照对应自己的环境即可。

            

保存并退出。

自此实际上Flume已经可以算完成安装了。

下面,通过一个简单的实例来显示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,就能达到了一个多方位,多层次,多手段的数据采集。可以满足绝大多数的生产实践环境要求。

发表评论