应用场景
按照搭建hadoop完全分布式集群博文搭建完hadoop集群后,发现hadoop完全分布式集群自带了HDFS,MapReduce,Yarn等基本的服务,一些其他的服务组件需要自己重新安装,比如Hive,Hbase,sqoop,zookeeper,spark等,这些组件集群模式都在前面相关博文中有介绍,今天我们需要安装另外一个组件,它就是日志采集工具Flume。
操作步骤
1. Flume介绍
Cloudera 开发的分布式日志收集系统 Flume,是 hadoop 周边组件之一。其可以实时的将分布在不同节点、机器上的日志收集到 hdfs 中。Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 cloudera。但随着 FLume 功能的扩展,Flume OG 代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点暴露出来,尤其是在 Flume OG 的最后一个发行版本 0.94.0 中,日志传输不稳定的现象尤为严重,这点可以在 BigInsights 产品文档的 troubleshooting 板块发现。为了解决这些问题,2011 年 10 月 22 号,cloudera 完成了 Flume-728,对 Flume 进行了里程碑式的改动:重构核心组件、核心配置以及代码架构,重构后的版本统称为 Flume NG(next generation);改动的另一原因是将 Flume 纳入 apache 旗下,cloudera Flume 改名为 Apache Flume。
2. Flume1.7.0下载
- 注意:
- 下载完安装包后,将Flume的安装包上传到主节点的opt目录下
3. Flume1.7.0解压缩和更换目录
# cd /opt
# tar -xzvf apache-flume-1.7.0-bin.tar.gz
# mv apache-flume-1.7.0-bin flume1.7.0
# chmod 777 -R /opt/flume1.7.0 #给目录授权
4. 配置环境变量
# vim /etc/profile
export FLUME_HOME=/opt/flume1.7.0
export FLUME_CONF_DIR=$FLUME_HOME/conf
export PATH=$FLUME_HOME/bin
# source /etc/profile
5. 测试使用
5.1 添加flume-conf.properties配置文件
# cd /opt/flume1.7.0/conf
# vim flume-conf.properties
# a.conf: A single-node Flume configuration
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /opt/log
a1.sources.r1.fileHeader = true
a1.sources.r1.deserializer.outputCharset=UTF-8
# Describe the sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://hadoop0:9000/log
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.writeFormat=Text
a1.sinks.k1.hdfs.maxOpenFiles = 1
a1.sinks.k1.hdfs.rollCount = 0
a1.sinks.k1.hdfs.rollInterval = 0
a1.sinks.k1.hdfs.rollSize = 1000000
a1.sinks.k1.hdfs.batchSize = 100000
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000000
a1.channels.c1.transactionCapacity = 100000
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
5.2 创建目录并授权
# mkdir /opt/log
# chmod 777 -R /opt/log
注:hdfs的log目录,不用手动去创建,它会自动生成的
5.3 运行
# cd /opt/flume1.7.0/
# bin/flume-ng agent --conf conf --conf-file conf/flume-conf.properties --name a1 -Dflume.root.logger=INFO,console
5.4 运行效果
命令执行后,它会存在一个进程,一直在监听目录,所以会一直开着!
效果就是:当你在/opt/log目录下添加了txt文档后,HDFS中的log目录下会生成一个文件,将txt中的内容拷贝到HDFS的log中,当再传入一个文件时,Flume会将txt中的内容添加到已创建的文件后面!如果关闭这个flume agent,重新开启一个,那么HDFS的log中,会重新生成一个文件进行收集!
5.5 测试
在/opt/log目录下,上传一个a1.txt文档,里面写着“北京欢迎您,test1”,在/opt/log/目录下刷新,看到a1.txt文件,立马改变成为a1.txt.COMPLETED,查看HDFS的log目录,发现增加了一个文件,查看其中内容。
当在/opt/log目录下,再上传一个a2.txt文档,里面写着“北京欢迎您,test2”,查看效果。
注:再次上传的文件名,不能和之前的文件名相同,否则报错了!