Flume案例二【实时读取本地文件到HDFS】

Posted on 2020-03-27 10:44  MissRong  阅读(815)  评论(0)    收藏  举报

案例二:实时读取本地文件HDFS

同时启动的agent不能相同:a1、a2、...

1.创建flume-hdfs.conf文件

# 1 agent

a2.sources = r2

a2.sinks = k2

a2.channels = c2

 

# 2 source

a2.sources.r2.type = exec

#要监控的文件

a2.sources.r2.command = tail -F /opt/plus

a2.sources.r2.shell = /bin/bash -c

 

# 3 sink

a2.sinks.k2.typehdfs

# 如果是Hadoop,写有namenode节点的一个主机名,如果是HA,哪个是native就写哪个

#也就是说,当active点换的时候,这个主机名也需要修改

a2.sinks.k2.hdfs.path = hdfs://bigdata111:9000/flume/%Y%m%d/%H

#上传文件的前缀

a2.sinks.k2.hdfs.filePrefix = logs-

#是否按照时间滚动文件夹

a2.sinks.k2.hdfs.round = true

#多少时间单位创建一个新的文件夹

a2.sinks.k2.hdfs.roundValue = 1

#重新定义时间单位

a2.sinks.k2.hdfs.roundUnit = hour

#是否使用本地时间戳

a2.sinks.k2.hdfs.useLocalTimeStamp = true

#积攒多少个Event才flush到HDFS一次

a2.sinks.k2.hdfs.batchSize = 1000

#设置文件类型,可支持压缩

a2.sinks.k2.hdfs.fileType = DataStream

#多久生成一个新的文件

a2.sinks.k2.hdfs.rollInterval = 600

#设置每个文件的滚动大小-超过这个数据大小(一个块的大小128MB)就滚动

a2.sinks.k2.hdfs.rollSize = 134217700

#文件的滚动与Event数量无关

a2.sinks.k2.hdfs.rollCount = 0

#最小副本数

a2.sinks.k2.hdfs.minBlockReplicas = 1

 

# Use a channel which buffers events in memory

a2.channels.c2.type = memory

a2.channels.c2.capacity = 1000

a2.channels.c2.transactionCapacity = 100

 

# Bind the source and sink to the channel

a2.sources.r2.channels = c2

a2.sinks.k2.channel = c2

复制之后,注意修改主机名(active的那个),然后根据这句配置:a2.sources.r2.command = tail -F /opt/plus

记得创建文件plus:[root@bigdata111 myconf]# vi /opt/plus,然后添加一些数据。

2.执行监控配置

/opt/module/flume1.8.0/bin/flume-ng agent \

--conf /opt/module/flume1.8.0/conf/ \

--name a2 \

--conf-file /opt/module/flume1.8.0/jobconf/flume-hdfs.conf

接下来查看Web页面,bigdata111的50070端口,监控plus文件,可以echo往里追加一些内容,查看变化。

对文件的内容进行追加:

[root@bigdata111 ~]# date Tue Mar 24 22:40:03 CST 2020

[root@bigdata111 ~]# echo a >> /opt/plus

3.实践结果分析

1)22:19分,开始监控plus文件的内容

 

 

 

 

 

 

 

2)22:29分,正是600秒-十分钟之后,文件停止更新,生成成功

3)一段时间后,22:41分,接着对plus文件输入数据

 

 

 

 

 4)22:51分,正是600秒-十分钟之后,文件停止更新,生成成功

 

 

 

 5)过了一段时间,23:44分,进行第三波的数据输入

此时较上两波数据的输入,不在同一小时内,也就是说不在同一时间戳里,因此又生成了23目录。

 

 

6)23:54分,正是600秒-十分钟之后,文件停止更新,生成成功

 

 

 

 此时22目录下面的两个文件的大小依然未改变,表明:生成后的文件不会再被写进数据,即使它大小不足128MB-134217700byte

 

7)也可以向文件追加执行脚本

#!/bin/bash

while true

do

    date >> /opt/plus;

    sleep 0.5;    #(这样可以使追加变得缓慢一些)

done

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3