Flume案例三【实时读取目录文件到HDFS】

Posted on 2020-03-27 12:55  MissRong  阅读(774)  评论(0)    收藏  举报

案例三:实时读取目录文件HDFS

目标:使用flume监听整个目录的文件

分步实现

1.创建配置文件flume-dir.conf

#1 Agent

a3.sources = r3

a3.sinks = k3

a3.channels = c3

 

#2 source

#监控目录的类型

a3.sources.r3.type = spooldir

#监控目录的路径-自定义

a3.sources.r3.spoolDir = /opt/renne

#哪个文件上传hdfs,然后给这个文件添加一个后缀

a3.sources.r3.fileSuffix = .COMPLETED

a3.sources.r3.fileHeader = true

#忽略所有以.tmp结尾的文件,不上传(可选)

a3.sources.r3.ignorePattern = ([^ ]*\.tmp)

 

# 3 sink

a3.sinks.k3.type = hdfs

a3.sinks.k3.hdfs.path = hdfs://bigdata111:9000/flume/%H

#上传文件的前缀

a3.sinks.k3.hdfs.filePrefix = upload-

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

a3.sinks.k3.hdfs.round = true

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

a3.sinks.k3.hdfs.roundValue = 1

#重新定义时间单位

a3.sinks.k3.hdfs.roundUnit = hour

#是否使用本地时间戳

a3.sinks.k3.hdfs.useLocalTimeStamp = true

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

a3.sinks.k3.hdfs.batchSize = 100

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

a3.sinks.k3.hdfs.fileType = DataStream

#多久生成一个新的文件

a3.sinks.k3.hdfs.rollInterval = 600

#设置每个文件的滚动大小大概是128M

a3.sinks.k3.hdfs.rollSize = 134217700

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

a3.sinks.k3.hdfs.rollCount = 0

#最小副本数

a3.sinks.k3.hdfs.minBlockReplicas = 1

 

# Use a channel which buffers events in memory

a3.channels.c3.type = memory

a3.channels.c3.capacity = 1000

a3.channels.c3.transactionCapacity = 100

 

# Bind the source and sink to the channel

a3.sources.r3.channels = c3

a3.sinks.k3.channel = c3

2.执行测试

执行如下脚本后,请向/opt/renne文件夹中添加文件试试

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

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

--name a3 \

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

尖叫提示: 在使用Spooling Directory Source时

1) 不要在监控目录中创建并持续修改文件

2) 上传完成的文件会以.COMPLETED结尾

3) 被监控文件夹每500毫秒扫描一次文件变动

3.实践过程、结果分析

本次实验前先开启HDFS-HA服务(当然用完全分布式也可,HA是保证能够转移故障节点)

1)   启动HA之前,需要启动Zookeeper(三台都启动)

[root@bigdata112 ~]# zkServer.sh start

注意:active是谁和是否为leader无关

2)   启动HDFS-HA服务

 

3)查看namenode1服务器状态

 

也可查看Web端:

 

 

4)配置flume文件

[root@bigdata111 myconf]# vi flume-dir.conf

 

5)保存离开之后记得创建要监控的目录/opt/renne

[root@bigdata111 opt]# mv plus renne/

[root@bigdata111 opt]# cd renne/

[root@bigdata111 renne]# ls

plus

现在在renne这个目录下创建一个文件并随意添些东西、并复制到多个文件中

[root@bigdata111 renne]# vi renne-a

[root@bigdata111 renne]# cp renne-a renne-b

[root@bigdata111 renne]# cp renne-a renne-c

[root@bigdata111 renne]# cp renne-a renne-d

[root@bigdata111 renne]# cp renne-a renne-e

[root@bigdata111 renne]# ls

plus  renne-a  renne-b  renne-c  renne-d  renne-e

6)启动

[root@bigdata111 bin]#flume-ng agent --conf ../conf/ --name a3 --conf-file ../myconf/flume-dir.conf

7)查看结果

1)对于上传到HDFS里的文件,会加上.COMPLETED的后缀表明已经上传

[root@bigdata111 opt]# cd renne/

[root@bigdata111 renne]# ll

total 24

-rw-r--r-- 1 root root 3493 Mar 24 23:51 plus.COMPLETED

-rw-r--r-- 1 root root   33 Mar 25 11:58 renne-a.COMPLETED

-rw-r--r-- 1 root root   33 Mar 25 11:59 renne-b.COMPLETED

-rw-r--r-- 1 root root   33 Mar 25 11:59 renne-c.COMPLETED

-rw-r--r-- 1 root root   33 Mar 25 11:59 renne-d.COMPLETED

-rw-r--r-- 1 root root   33 Mar 25 11:59 renne-e.COMPLETED

2Web端:

1222分,文件开始上传,监控开始

 

 上传的是以“小时”为名的目录

 

12这个目录里,有正在上传的文件,未到600秒,它还没形成完毕。

 

1232分,十分钟过去,文件正式生成。

 

4.思考-今后使用时要注意

如果数据量很大,需要修改channel也要调大:a3.channels.c3.capacity = 1000

Flume里面监控文件:一个event会监控一行日志,一个event默认最大值是2048B,如果超过就会切分,可以进行修改,event调大

参考随笔:https://www.cnblogs.com/liuxinrong/p/12607397.html

数据量很大,也可以采用多台flume,还可以结合Kafka

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