利用Flume采集日志数据到HDFS

背景

首先我们先来看下Hadoop的整体开发流程:
利用Flume采集日志数据到HDFS_第1张图片
从上图可以看出,数据采集是非常重要的一个环节,也是不可避免的一步。
数据采集的产品很多,facebook的scribe、apache的chukwa、淘宝的Time Tunnel以及cloudera的flume等。

Flume简介

Flume是一个可以收集日志、事件等数据资源,并将这些庞大数量的数据资源集中起来存储的工具/服务。Flume具有高可用、可靠、分布式的特点。利用Flume采集日志数据到HDFS_第2张图片

Flume的特点

  • Flume可以将数据高效率的存储到任何集中存储器中,比如HDFS、HBase
  • 当收集数据的速度超过写入数据速度的时候,Flume会在数据生产者和数据收容器间做出调整,使两者达到一定的平衡
  • 提供上下文路由特征
  • Flume的管道是基于事务的,保证了数据在传送和接收时的一致性
  • Flume是可靠、容错性高、可升级、易管理、并且可定制的
  • Flume支持各种接入资源数据类型以及接出数据类型

示例

采集日志数据到HDFS

  1. 下载安装
  • 下载地址:
    http://flume.apache.org/download.html
  • 将安装包上传到服务器并解压
tar -zxvf apache-flume-1.9.0-bin.tar.gz
  • 修改配置文件
cp flume-env.sh.template flume-env.sh

编辑flume-env.sh配置jdk目录

export JAVA_HOME=jdk目录
  • 配置环境变量
vi ~/.bashrc 
#FLUME
export FLUME_HOME=flume目录
export PATH=$PATH:$FLUME_HOME/bin
source ~/.bashrc 
  • 查看flume版本号
flume-ng version
  1. 编写配置文件
    在flume的conf目录下新建tail-hdfs.conf文件
    然后在tail-hdfs.conf文件中配置以下内容:
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /root/logs/test.log #监控logs目录下test.log的日志变化
a1.sources.r1.channels = c1

# Describe the sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.path = /flume/tailout/%y-%m-%d/%H-%M/ #把数据收集到hdfs目录下
a1.sinks.k1.hdfs.filePrefix = log-
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
a1.sinks.k1.hdfs.rollInterval = 3
a1.sinks.k1.hdfs.rollSize = 20
a1.sinks.k1.hdfs.rollCount = 5
a1.sinks.k1.hdfs.batchSize = 1
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#生成的文件类型,默认是Sequencefile,可用DataStream,则为普通文本
a1.sinks.k1.hdfs.fileType = DataStream

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
  1. 启动
  • 首先要启动hdfs集群
  • 启动flume服务
flume-ng agent -c conf -f conf/tail-hdfs.conf -n a1

ok搞定了,hdfs上已经采集到了test.log的数据,当test.log的文本变化时,hdfs也会采集到变化的数据。

总结

Flume这是一个数据采集工具,主要编写配置文件。
所以必须熟练掌握里面的配置参数,以及Flume Agent的三个组件(source、channel、sink)。
Flume除了组件外,还有一些插件(Interceptor拦截器、Channels Selectors管道选择器、sink线程等)。

如果有任何问题,或者有什么想法,随时联系我,大家一起交流,共同进步。
我的邮箱 [email protected]

你可能感兴趣的:(大数据,flume,hadoop,bigdata)