Flume监控目录变化并采集到HDFS

采集目录到HDFS(监控文件目录变化)

在这里插入图片描述
采集需求:服务器的某特定目录下,会不断产生新的文件,每当有新文件出现,就要把文件采集到HDFS中去。

根据需求,首先定义一下3大要素:

  • 采集源,即Source——监控文件目录:spooldir
  • 下称目标,即Sink——HDFS文件系统:hdfs sink
  • source 和 sink 之间的传递通道——channel,可用file channel,也可以用内存channel
    配置文件编写:
# Name the components on this agent
a1.sources = r1  #source命名
a1.sinks = k1  #sink命名
a1.channels = c1  #channel命名

#spooldir source
a1.sources.r1.type = spooldir  #source类型
a1.sources.r1.spoolDir = /root/logs  #指定监控的目录
a1.sources.r1.fileHeader = true

#hdfs sink
a1.sinks.k1.type = hdfs  #sink类型
a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/%S #动态获取时间
a1.sinks.k1.hdfs.filePrefix = events-   #文件的前缀信息
#roll三兄弟: 控制写入hdfs文件,以何种方式进行滚动 (控制文件的滚动)
a1.sinks.k1.hdfs.rollInterval = 3  #以时间间隔
a1.sinks.k1.hdfs.rollSize = 20  #以文件大小
a1.sinks.k1.hdfs.rollCount = 5  #以event个数
#如果上面三个都配置,谁先满足谁触发滚动
#如果不想以某个属性滚动,设置为0即可
#round三兄弟 是否开启时间上的舍弃 (控制文件夹的滚动)
#默认是不开启的,以下为例:以每10分钟开启一个新的文件夹
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
a1.sinks.k1.hdfs.batchSize = 1
a1.sinks.k1.hdfs.userlocalTimeStamp=trule  #使用本地的时间戳
a1.sinks.k1.hdfs.fileType=DataStream  #文件类型

#channel,此处使用是内存缓存的方式
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000 #event个数为1000
a1.channels.transactionCapacity=100  #事务的容量为100

#channel 连接source和sink
a1.sources.r1.channels=c1  #soource的channel为c1
a1.sinks.k1.channels=c1  #sink的channel也为c1

  • spooldir source
    • 注意其监控的文件夹下面不能有同名文件的产生
    • 如果有,报错且罢工,后续就不能再进行数据的监视采集了
    • 在企业中通常给文件追加时间戳命名的方式保证文件不会重名

启动agent去采集数据

bin/flume-ng agent -c conf -f conf/netcat-logger.conf -n a1 -Dflume.root.logger=INFO,console

-c conf 指定 flume 自身的配置文件所在目录
-f conf/netcat-logger.con 指定我们所描述的采集方案
-n a1 指定我们这个 agent 的名字

注意:
batchsize <= 事务容量(transactionCapacity) <= channel容量

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您讲解Flume采集指定目录下的日志信息到HDFS系统的实验过程及总结。 实验过程: 1. 安装Hadoop和Flume 在进行实验前,需要先安装好Hadoop和Flume。可以从官方网站下载最新版本的Hadoop和Flume,并按照官方文档进行安装。 2. 编写Flume配置文件 在安装好Flume后,需要编写配置文件来指定日志信息的来源和目标位置。以下是一个示例配置文件: ``` # Name the components on this agent agent.sources = source1 agent.sinks = sink1 agent.channels = channel1 # Describe/configure the source agent.sources.source1.type = spooldir agent.sources.source1.spoolDir = /path/to/log/directory # Describe the sink agent.sinks.sink1.type = hdfs agent.sinks.sink1.hdfs.path = hdfs://localhost:9000/flume/logs agent.sinks.sink1.hdfs.filePrefix = %{hostname} agent.sinks.sink1.hdfs.fileSuffix = .log agent.sinks.sink1.hdfs.rollInterval = 60 agent.sinks.sink1.hdfs.rollSize = 0 agent.sinks.sink1.hdfs.rollCount = 0 # Use a channel which buffers events in memory agent.channels.channel1.type = memory agent.channels.channel1.capacity = 1000 agent.channels.channel1.transactionCapacity = 100 # Bind the source and sink to the channel agent.sources.source1.channels = channel1 agent.sinks.sink1.channel = channel1 ``` 在以上配置中,我们使用`spooldir`作为Flume的source,它可以监控指定目录下的文件,当文件发生变化时,Flume会自动将文件内容读取到内存中,并发送到指定的sink。在此示例中,我们使用HDFS作为sink,将读取到的日志信息写入到指定的HDFS路径中。其中,`%{hostname}`会自动被替换为当前主机的名称,`.log`为文件的后缀名。 3. 启动Flume agent 在完成配置文件编写后,可以使用以下命令启动Flume agent: ``` $ flume-ng agent --conf-file /path/to/flume.conf --name agent -Dflume.root.logger=INFO,console ``` 其中,`/path/to/flume.conf`为配置文件的路径,`agent`为agent的名称,`-Dflume.root.logger=INFO,console`用于指定日志输出的级别和位置。 4. 查看HDFS中的日志信息 在启动Flume agent后,它会自动将指定目录下的日志信息写入到HDFS中。可以使用以下命令查看HDFS中的日志信息: ``` $ hdfs dfs -cat /flume/logs/* ``` 以上命令会列出HDFS中所有以`.log`为后缀名的文件,并将文件内容输出到终端。 总结: 通过以上实验,我们可以看到Flume的强大功能,它能够自动监控指定目录下的文件,将文件内容写入到指定的sink中。这使得我们能够轻松地将日志信息等数据写入到HDFS中,并进行后续的数据分析处理。同时,Flume的配置文件也十分灵活,可以根据实际需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值